Files
OAMC-Auswertung/tests/test_models_constraints.py
linusandClaude Sonnet 5 03f6fdb0d9 Erstumsetzung: OAMC Turnierauswertung (AP 0–7, 9)
* Datenmodell + Alembic-Initialmigration (Plan §4), Seed Saison 2026
* Wertungs-Engine (Plan §3.3), regelbasiert je Kategorie/Saison
  - Abnahmetest gegen die Ergebnisliste 2026-05-31
* Meisterschaftsberechnung mit Streichresultaten + Tie-Break
  (PLATZHALTER-Punktetabelle, O-1 offen)
* Ingest-API (idempotent, dry_run) inkl. Excel-Leser und Fahrer-Matching/Merge
* Zeitmessungs-Endpoint (Batch, idempotent, unzugeordnet/unplausibel) + SSE-Anzeige
  - Mess-Pi-Client bewusst NICHT enthalten (docs/zeitmessung-endpoint.md)
* Frontend: öffentliche Seiten + internes Backend (Jinja2/HTMX, kein Build)
* Auslieferung: Docker (multi-arch) + docker-compose sowie Debian-Paket/APT-Repo
* 57 Tests grün gegen echte PostgreSQL-Testdatenbank

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 18:49:00 +02:00

48 lines
1.5 KiB
Python

"""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"}