Files
OAMC-Auswertung/tests/test_seed.py
T
linusandClaude Sonnet 5 c33aaa1a4b Meisterschaft: eine pro Saison, mit zugeordneten Turnieren
Auf Vorgabe des Auftraggebers umgestellt:
* genau eine Meisterschaft je Saison (unique auf saison_jahr)
* turnier.meisterschaft_id (nullable FK) statt bool zaehlt_meisterschaft;
  NULL = "o. M.". Kompat-Property turnier.zaehlt_meisterschaft bleibt.
* Teilwertungen (Erwachsene-Gesamt, Jugend J1-J5) sind (Kategorie, Klasse)-
  Sichten auf die eine Meisterschaft, keine eigenen Zeilen mehr
* meisterschaft_stand: kategorie + klasse_id + Unique je Wertung/Fahrer
* berechne_stand(kategorie=, klasse_id=), wertungen_fuer(), berechne_alle_wertungen()
* Read-API: /meisterschaften/{id}/stand[?wertung=], .../endlauf-qualifikation?wertung=
* Ingest: POST /turniere haengt zaehlende Turniere an die Jahres-Meisterschaft
* Initialmigration neu erzeugt (Projekt noch nicht ausgerollt); Seed: eine
  "HTH-Meisterschaft <jahr>"
* Tests angepasst/ergaenzt (61 gruen)

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

52 lines
1.6 KiB
Python

"""Stammdaten-Seed (AP 1)."""
from sqlalchemy import func, select
from oamc.models import Klasse, Meisterschaft, Saison, Verein
from oamc.models.enums import Kategorie
from oamc.seeds import seed_saison_2026
def test_seed_ist_idempotent(db):
z1 = seed_saison_2026(db)
db.flush()
z2 = seed_saison_2026(db)
db.flush()
assert z1["klasse"] == 18 # J1-J5 + S1-S9 + A1-A4
assert all(v == 0 for v in z2.values())
def test_seed_jugendklassen_haben_jahrgaenge(seed_2026):
db = seed_2026
j1 = db.scalars(select(Klasse).where(Klasse.code == "J 1", Klasse.saison_jahr == 2026)).one()
assert j1.kategorie == Kategorie.JUGEND
assert j1.jahrgaenge == [2019, 2018, 2017]
assert j1.mindestalter_am_veranstaltungstag == 7
def test_seed_saison_streichresultate(seed_2026):
s = seed_2026.get(Saison, 2026)
assert s.streichresultate_tabelle["12"] == 8
assert s.streichresultate_tabelle["4"] == 2
def test_seed_meisterschaft(seed_2026):
db = seed_2026
ms = db.scalars(select(Meisterschaft).where(Meisterschaft.saison_jahr == 2026)).all()
# genau EINE Meisterschaft pro Saison
assert len(ms) == 1
assert ms[0].bezeichnung == "HTH-Meisterschaft 2026"
# O-1: Platzhalter-Punktetabelle ist markiert
assert "_hinweis" in ms[0].regelwerk
from oamc.meisterschaft.berechnung import wertungen_fuer
codes = {w.code for w in wertungen_fuer(db, ms[0].id)}
assert "erwachsene" in codes and "J 3" in codes
def test_seed_vereins_kurznamen(seed_2026):
db = seed_2026
hainstadt = db.scalars(select(Verein).where(Verein.kurzname == "Hainstadt")).first()
assert hainstadt is not None