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>
52 lines
1.6 KiB
Python
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
|