Files
OAMC-Auswertung/tests/test_seed.py
T
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.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_meisterschaften(seed_2026):
db = seed_2026
ms = db.scalars(select(Meisterschaft).where(Meisterschaft.saison_jahr == 2026)).all()
bezeichnungen = {m.bezeichnung for m in ms}
assert "HTH Erwachsene 2026" in bezeichnungen
assert "HTH Jugend J 3 2026" in bezeichnungen
# O-1: Platzhalter-Punktetabelle ist markiert
erw = next(m for m in ms if m.bezeichnung == "HTH Erwachsene 2026")
assert "_hinweis" in erw.regelwerk
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