update tests

This commit is contained in:
Ross
2025-12-09 14:29:54 +00:00
parent 069da08f5a
commit dfd37a7a62
11 changed files with 78 additions and 50 deletions
@@ -47,7 +47,7 @@ def test_summed_shift_grade_constraints():
)
# Add summed shift grade constraints
Rota.constraint_options["min_summed_grade_by_shifts_per_day"].append(
Rota.constraint_options_model.min_summed_grade_by_shifts_per_day.append(
MinSummedGradeByShiftsPerDayConstraint(
shifts=["a", "b"],
min_grade_sum=4,
@@ -78,7 +78,7 @@ def test_summed_shift_grade_constraints():
for summed_grade in summed_grades:
assert summed_grade >= 4, f"Summed grade {summed_grade} is less than 4"
Rota.constraint_options["min_summed_grade_by_shifts_per_day"] = [
Rota.constraint_options_model.min_summed_grade_by_shifts_per_day = [
MinSummedGradeByShiftsPerDayConstraint(
shifts=["a", "b"],
min_grade_sum=5,
+1 -1
View File
@@ -257,7 +257,7 @@ def test_constraint_require_remote_site_presence_week2(limit_constraint_rota):
Rota = limit_constraint_rota
Rota.constraint_options["minimise_shift_diffs"] = False
Rota.constraint_options["balance_shifts_quadratic"] = False
Rota.constraint_options["balance_shift"] = False
Rota.constraint_options["balance_shifts"] = False
Rota.constraint_options["balance_nights_across_sites"] = True
Rota.shifts = []
Rota.add_shifts(
+2 -2
View File
@@ -51,7 +51,7 @@ class TestRemoteRotas:
Rota.constraint_options["balance_blocks"] = False
Rota.constraint_options["balance_weekends"] = False
Rota.constraint_options["balance_nights"] = False
Rota.constraint_options["minimse_shift_diffs"] = False
Rota.constraint_options["minimise_shift_diffs"] = False
Rota.add_workers(
[Worker(
@@ -111,7 +111,7 @@ class TestRemoteRotas:
Rota.constraint_options["balance_blocks"] = False
Rota.constraint_options["balance_weekends"] = False
Rota.constraint_options["balance_nights"] = False
Rota.constraint_options["minimse_shift_diffs"] = False
Rota.constraint_options["minimise_shift_diffs"] = False
Rota.add_workers(
[Worker(
+10 -10
View File
@@ -19,16 +19,16 @@ def demo_rota():
weeks_to_rota=weeks_to_rota,
balance_offset_modifier=1,
)
Rota.constraint_options["max_shifts_per_week"] = 5
Rota.constraint_options["max_shifts_per_month"] = 31
Rota.constraint_options["constrain_time_off_after_nights"] = False
Rota.constraint_options["balance_nights_across_site"] = False
Rota.constraint_options["balance_shifts_quadratic"] = True
Rota.constraint_options["balance_shifts_over_workers"] = True
Rota.constraint_options["balance_nights"] = False
Rota.constraint_options["minimise_shift_diffs"] = False
Rota.constraint_options["balance_blocks"] = False
Rota.constraint_options["balance_bank_holidays"] = False
Rota.constraint_options_model.max_shifts_per_week = 5
Rota.constraint_options_model.max_shifts_per_month = 31
Rota.constraint_options_model.constrain_time_off_after_nights = False
Rota.constraint_options_model.balance_nights_across_sites = False
Rota.constraint_options_model.balance_shifts_quadratic = True
Rota.constraint_options_model.balance_shifts_over_workers = True
Rota.constraint_options_model.balance_nights = False
Rota.constraint_options_model.minimise_shift_diffs = False
Rota.constraint_options_model.balance_blocks = False
Rota.constraint_options_model.balance_bank_holidays = False
# Add a few workers
workers = [
+1 -1
View File
@@ -34,7 +34,7 @@ def demo_rota_clear():
weeks_to_rota=weeks_to_rota,
balance_offset_modifier=1,
)
Rota.constraint_options["max_shifts_per_month"] = 20
Rota.constraint_options_model.max_shifts_per_month = 20
workers = [
Worker(name="worker1", site="group1", grade=1),
+12 -12
View File
@@ -3,7 +3,7 @@ import pytest
from pytest import approx
from rota_generator.shifts import PostShiftConstraint, RotaBuilder, SingleShift, days
from rota_generator.workers import Worker
from web.rota.shifts import PreShiftConstraint
from rota_generator.shifts import PreShiftConstraint
@pytest.fixture
def demo_rota_nights():
@@ -16,17 +16,17 @@ def demo_rota_nights():
balance_offset_modifier=1,
)
Rota.constraint_options["max_shifts_per_week"] = 5
Rota.constraint_options["max_shifts_per_month"] = 31
Rota.constraint_options["limit_to_1_st2_on_nights"] = False
Rota.constraint_options["constrain_time_off_after_nights"] = False
Rota.constraint_options["balance_nights_across_site"] = False
Rota.constraint_options["balance_shifts"] = True
Rota.constraint_options["balance_shifts_over_workers"] = True
Rota.constraint_options["balance_nights"] = False
Rota.constraint_options["minimise_shift_diffs"] = False
Rota.constraint_options["balance_blocks"] = False
Rota.constraint_options["max_night_frequency"] = 0
Rota.constraint_options_model.max_shifts_per_week = 5
Rota.constraint_options_model.max_shifts_per_month = 31
# legacy option `limit_to_1_st2_on_nights` removed; test omits it
Rota.constraint_options_model.constrain_time_off_after_nights = False
Rota.constraint_options_model.balance_nights_across_sites = False
Rota.constraint_options_model.balance_shifts = True
Rota.constraint_options_model.balance_shifts_over_workers = True
Rota.constraint_options_model.balance_nights = False
Rota.constraint_options_model.minimise_shift_diffs = False
Rota.constraint_options_model.balance_blocks = False
Rota.constraint_options_model.max_night_frequency = 0
# Add workers
workers = [
+7 -7
View File
@@ -36,36 +36,36 @@ def rota_3workers(rota_2workers):
return Rota3
def test_max_shifts(rota_2workers):
rota_2workers.constraint_options["max_shifts_per_month"] = 14
rota_2workers.constraint_options_model.max_shifts_per_month = 14
rota_2workers.build_and_solve()
assert rota_2workers.results.solver.status == "ok"
assert rota_2workers.results.solver.termination_condition == "optimal"
def test_max_shifts_fail(rota_2workers):
rota_2workers.constraint_options["max_shifts_per_month"] = 13
rota_2workers.constraint_options_model.max_shifts_per_month = 13
rota_2workers.build_and_solve()
assert rota_2workers.results.solver.status in ("warning", "error")
assert rota_2workers.results.solver.termination_condition == "infeasible"
def test_max_shifts_extra_worker(rota_3workers):
rota_3workers.constraint_options["max_shifts_per_month"] = 12
rota_3workers.constraint_options_model.max_shifts_per_month = 12
rota_3workers.build_and_solve()
assert rota_3workers.results.solver.status == "ok"
assert rota_3workers.results.solver.termination_condition == "optimal"
def test_max_shifts_per_week_fail(rota_2workers):
rota_2workers.constraint_options["max_shifts_per_week"] = 3
rota_2workers.constraint_options_model.max_shifts_per_week = 3
rota_2workers.build_and_solve()
assert rota_2workers.results.solver.status in ("warning", "error")
assert rota_2workers.results.solver.termination_condition == "infeasible"
def test_max_shifts_per_week_pass(rota_2workers):
rota_2workers.constraint_options["max_shifts_per_month"] = 14
rota_2workers.constraint_options["max_shifts_per_week"] = 4
rota_2workers.constraint_options_model.max_shifts_per_month = 14
rota_2workers.constraint_options_model.max_shifts_per_week = 4
rota_2workers.build_and_solve()
assert rota_2workers.results.solver.status == "ok"
def test_max_shifts_per_week_extra_worker_pass(rota_3workers):
rota_3workers.constraint_options["max_shifts_per_week"] = 3
rota_3workers.constraint_options_model.max_shifts_per_week = 3
rota_3workers.build_and_solve()
assert rota_3workers.results.solver.status == "ok"
+7 -7
View File
@@ -20,7 +20,7 @@ class TestDemoRota:
start_date,
weeks_to_rota=weeks_to_rota,
)
self.Rota.constraint_options["balance_weekends"] = True
self.Rota.constraint_options_model.balance_weekends = True
# Add a few workers
worker1 = Worker(name="worker1", site="group1", grade=1)
@@ -77,7 +77,7 @@ class TestDemoRota:
start_date,
weeks_to_rota=weeks_to_rota,
)
self.Rota.constraint_options["balance_weekends"] = True
self.Rota.constraint_options_model.balance_weekends = True
# Add a few workers
worker1 = Worker(name="worker1", site="group1", grade=1)
@@ -136,7 +136,7 @@ class TestDemoRota:
start_date,
weeks_to_rota=weeks_to_rota,
)
self.Rota.constraint_options["prevent_monday_and_tuesday_after_full_weekends"] = ["group1",]
self.Rota.constraint_options_model.prevent_monday_and_tuesday_after_full_weekends = ["group1",]
# Add a few workers
worker1 = Worker(name="worker1", site="group1", grade=1)
@@ -182,7 +182,7 @@ class TestDemoRota:
start_date,
weeks_to_rota=weeks_to_rota,
)
self.Rota.constraint_options["prevent_monday_and_tuesday_after_full_weekends"] = ["group1",]
self.Rota.constraint_options_model.prevent_monday_and_tuesday_after_full_weekends = ["group1",]
# Add a few workers
worker1 = Worker(name="worker1", site="group1", grade=1)
@@ -221,7 +221,7 @@ class TestDemoRota:
start_date,
weeks_to_rota=weeks_to_rota,
)
self.Rota.constraint_options["prevent_monday_after_full_weekends"] = ["group1",]
self.Rota.constraint_options_model.prevent_monday_after_full_weekends = ["group1",]
# Add a few workers
worker1 = Worker(name="worker1", site="group1", grade=1)
@@ -271,7 +271,7 @@ class TestDemoRota:
start_date,
weeks_to_rota=weeks_to_rota,
)
self.Rota.constraint_options["prevent_monday_after_full_weekends"] = ["group1",]
self.Rota.constraint_options_model.prevent_monday_after_full_weekends = ["group1",]
# Add a few workers
worker1 = Worker(name="worker1", site="group1", grade=1)
@@ -312,7 +312,7 @@ class TestDemoRota:
start_date,
weeks_to_rota=weeks_to_rota,
)
self.Rota.constraint_options["prevent_monday_after_full_weekends"] = ["group1",]
self.Rota.constraint_options_model.prevent_monday_after_full_weekends = ["group1",]
# Add a few workers
worker1 = Worker(name="worker1", site="group1", grade=1)
+5 -5
View File
@@ -224,7 +224,7 @@ class TestWorkerRequests:
"""_summary_"""
Rota = generate_basic_rota()
Rota.constraint_options["balance_bank_holidays"] = False
Rota.constraint_options_model.balance_bank_holidays = False
Rota.add_worker(
Worker(
@@ -311,7 +311,7 @@ class TestWorkerRequests:
def test_work_requests(self):
"""_summary_"""
Rota = generate_basic_rota()
Rota.constraint_options["balance_bank_holidays"] = False
Rota.constraint_options_model.balance_bank_holidays = False
Rota.add_workers(
[Worker(
@@ -362,7 +362,7 @@ class TestWorkerRequests:
def test_work_requests_invalid(self):
"""_summary_"""
Rota = generate_basic_rota()
Rota.constraint_options["balance_bank_holidays"] = False
Rota.constraint_options_model.balance_bank_holidays = False
Rota.add_worker(
Worker(
@@ -433,7 +433,7 @@ class TestWorkerRequests:
def test_work_requests_generic(self):
"""_summary_"""
Rota = generate_basic_rota()
Rota.constraint_options["balance_bank_holidays"] = False
Rota.constraint_options_model.balance_bank_holidays = False
Rota.add_workers(
[Worker(
@@ -484,7 +484,7 @@ class TestWorkerRequests:
def test_work_requests_generic2(self):
"""_summary_"""
Rota = generate_basic_rota()
Rota.constraint_options["balance_bank_holidays"] = False
Rota.constraint_options_model.balance_bank_holidays = False
Rota.add_workers(
[Worker(
+2 -2
View File
@@ -4,7 +4,7 @@ from rota_generator.shifts import InvalidShift, MaxShiftsPerWeekConstraint, NoWo
import datetime
from rota_generator.workers import NonWorkingDays, NotAvailableToWork, Worker, generate_not_available_to_works
from rota_generator.workers import WorkRequests
from web.rota.shifts import PreShiftConstraint
from rota_generator.shifts import PreShiftConstraint
def generate_basic_rota(
weeks_to_rota=10, workers=0, start_date=datetime.date(2022, 3, 7)
@@ -357,7 +357,7 @@ def test_worker_pairs():
]
)
Rota.constraint_options["hard_constrain_pair_separation"] = True
Rota.constraint_options_model.hard_constrain_pair_separation = True
Rota.build_and_solve()