"""Unit tests for the planning domain dataclasses. These tests deliberately avoid spinning up the JVM-backed solver — they only verify that the domain objects construct, serialise, and compare as expected. The full solver lifecycle is exercised by integration tests run against a populated DB (Phase 8). """ from app.domain import Lesson, Room, SchoolClass, Subject, Teacher, Timeslot def _ts() -> Timeslot: return Timeslot(id="ts1", day_of_week=1, period_index=1, start_time="08:00", end_time="08:45") def _room() -> Room: return Room(id="r1", name="A101", room_type="standard") def _teacher() -> Teacher: return Teacher(id="t1", last_name="Schmidt", first_name="Anna", short_code="SCH") def _class() -> SchoolClass: return SchoolClass(id="c1", name="5a", grade_level=5) def _subject() -> Subject: return Subject(id="s1", name="Mathematik", short_code="M") def test_timeslot_str() -> None: assert str(_ts()) == "D1P1" def test_teacher_str() -> None: assert str(_teacher()) == "Schmidt, Anna" def test_lesson_starts_unassigned() -> None: lesson = Lesson(id="L1", school_class=_class(), subject=_subject(), teacher=_teacher()) assert lesson.timeslot is None assert lesson.room is None def test_lesson_accepts_assignment() -> None: lesson = Lesson(id="L1", school_class=_class(), subject=_subject(), teacher=_teacher()) lesson.timeslot = _ts() lesson.room = _room() assert lesson.timeslot.day_of_week == 1 assert lesson.room.name == "A101"