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>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user