"""Smoke tests for the constraint-rule dataclasses.""" from app.rules import ( RoomRequiresTypeRule, RoomUnavailableRule, SubjectPreferredPeriodRule, TeacherExcludedRoomRule, TeacherUnavailableDayRule, TeacherUnavailableWindowRule, ) def test_rules_construct_with_expected_fields() -> None: rules = [ TeacherUnavailableDayRule(teacher_id="t1", day_of_week=1, is_hard=True, weight=100), TeacherUnavailableWindowRule(teacher_id="t1", day_of_week=2, start_time="13:00", end_time="17:00", is_hard=True, weight=100), TeacherExcludedRoomRule(teacher_id="t1", room_id="r1", is_hard=True, weight=100), RoomUnavailableRule(room_id="r1", day_of_week=3, period_index=4, is_hard=True, weight=100), SubjectPreferredPeriodRule(subject_id="s1", period_from=1, period_to=4, is_hard=False, weight=40), RoomRequiresTypeRule(subject_id="s1", room_type="Sporthalle", is_hard=True, weight=100), ] assert len(rules) == 6 def test_rules_are_hashable_frozen() -> None: # Frozen dataclasses are hashable, important when Timefold inserts them # into hash-based caches inside the solver. rule = TeacherUnavailableDayRule(teacher_id="t1", day_of_week=1, is_hard=True, weight=100) s = {rule, rule} assert len(s) == 1