from sqlmodel import select from app.models import Edition, Volunteer from app.seed import DEMO_EDITION_NAME, build def test_build_creates_a_realistic_dataset(session): summary = build(session) assert summary.volunteers == 120 assert summary.positions == 15 assert summary.shifts > 40 assert summary.assignments > 100 assert summary.understaffed_shifts >= 3 # « quelques trous d'effectif » assert summary.blocking == 0 # aucune violation bloquante # Au moins deux règles d'avertissement représentées, quelques alertes. assert len(summary.warnings) >= 2 assert sum(summary.warnings.values()) >= 3 edition = session.exec( select(Edition).where(Edition.name == DEMO_EDITION_NAME) ).one() volunteers = session.exec( select(Volunteer).where(Volunteer.edition_id == edition.id) ).all() assert len(volunteers) == 120 def test_build_is_deterministic_and_idempotent(session): first = build(session) second = build(session) assert (second.volunteers, second.positions, second.shifts) == ( first.volunteers, first.positions, first.shifts, ) assert second.assignments == first.assignments assert second.understaffed_shifts == first.understaffed_shifts assert dict(second.warnings) == dict(first.warnings) editions = session.exec( select(Edition).where(Edition.name == DEMO_EDITION_NAME) ).all() assert len(editions) == 1