"""Constraint-Tests (Plan AP 1): Mehrfachstart erlaubt, Startnummer eindeutig je Turnier, hoechstens ein aktives Turnier.""" import pytest from sqlalchemy.exc import IntegrityError from tests import factories as f def test_startnummer_eindeutig_je_turnier(seed_2026): db = seed_2026 t = f.turnier(db) k = f.klasse(db, "S 6") a, b = f.fahrer(db, "A", "A"), f.fahrer(db, "B", "B") f.start(db, t, a, k, startnummer=10) f.start(db, t, b, k, startnummer=10, flush=False) with pytest.raises(IntegrityError): db.flush() def test_mehrfachstart_desselben_fahrers_erlaubt(seed_2026): db = seed_2026 t = f.turnier(db) fahrer = f.fahrer(db, "Schmunk", "Christian", 1990) f.start(db, t, fahrer, f.klasse(db, "S 9"), startnummer=1) f.start(db, t, fahrer, f.klasse(db, "S 3"), startnummer=2) db.flush() # kein Fehler assert len(fahrer.starts) == 2 def test_hoechstens_ein_aktives_turnier(seed_2026): db = seed_2026 v = f.veranstaltung(db) f.turnier(db, v, name="A", aktiv=True) f.turnier(db, v, name="B", aktiv=True, flush=False) with pytest.raises(IntegrityError): db.flush() def test_doppelturnier_zwei_turniere_pro_veranstaltung(seed_2026): db = seed_2026 v = f.veranstaltung(db, titel="Doppelturnier MSC Hainstadt / OAMC Reinheim") v.ist_doppelturnier = True f.turnier(db, v, name="Reinheim") f.turnier(db, v, name="Hainstadt") db.flush() assert {t.name for t in v.turniere} == {"Reinheim", "Hainstadt"}