[TEST] Veraltete Test-Erwartungen an aktuelle Daten angepasst (Foerderer/Mubea/Omniflo-Strecke)

17 vorbestehende Failures behoben - alles veraltete Tests, kein Produktivcode:

test_foerderer.py (3): CSV-Spalten header-basiert statt per festem Index
ansprechen. Die Export-CSV hat inzwischen 17 statt 11 Spalten (Insertpoint,
K1-K4, Warnungen kamen dazu, siehe lib/export_csv.py) - die Tests hingen an
row[10] fuer Merkmale. Neu: self.col-Lookup + _cell(row, spaltenname), robust
gegen weitere Spalten.

test_mubea.py (2): _is_gefaelle zaehlte einen zweiten GF_*-Eintrag (block
'S-LP', ein Separator mit assigned_to GF_Mubea) faelschlich als Gefaellestrecke
mit -> erwartete 40 statt 20. Jetzt: GF_* UND nicht _is_separator.

test_omniflo_strecke.py (12): Test und seine Testdaten-Datei waren auf zwei
verschiedene Datenmodelle geschrieben (Test: 12 Elemente, gerade_start/
kurve_180/gerade_ende, Felder drehung_ende/x_mitte; Datei: 7 Elemente,
gerade_unten/gerade_oben/bogen/weiche ohne diese Felder). Test komplett auf das
tatsaechliche 7-Element-Modell umgeschrieben (Struktur/Katalog/Geraden-
Geometrie); Boegen gegen omniflo_boegen.json, Weiche gegen omniflo_weichen.json.

Nicht angefasst (bewusst): 3x hundm05 (funktioniert noch nicht) und
test_omniflo.py::test_zeilen_matches_reference (inkonsistente Export-CSV +
veraltete Referenz - Analyse: export_csv.py ist konsistent 17-spaltig, die
Output-Datei stammt aus einem gemischten Lauf; Referenz per --set-as-reference
neu abnehmen, kein Code-Fix noetig).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-29 20:08:39 +02:00
parent 493967c06d
commit 775e27182c
3 changed files with 110 additions and 103 deletions
+31 -15
View File
@@ -199,16 +199,28 @@ class TestFoerdererExportCSV:
self.header = next(reader)
for row in reader:
self.rows.append(row)
# Spalten header-basiert ansprechen (die CSV-Struktur waechst - Insertpoint,
# K1-K4, Warnungen kamen spaeter dazu, siehe lib/export_csv.py) statt ueber
# feste Indizes. So bleiben die Tests robust gegen Spalten-Erweiterungen.
self.col = {name: i for i, name in enumerate(self.header)}
def _cell(self, row, spalte):
"""Zellwert einer Zeile ueber den Spaltennamen (oder None, falls fehlt)."""
i = self.col.get(spalte)
if i is None or i >= len(row):
return None
return row[i]
def test_header_felder(self):
"""CSV-Header muss korrekte Spaltenbezeichnungen haben."""
"""CSV-Header muss die erwarteten Spalten enthalten (Reihenfolge/Zusatz-
spalten wie Insertpoint/K1-K4/Warnungen egal - per Name geprueft)."""
expected = ["Elementnummer", "TeileArt", "TeileId", "Bezeichnung",
"Planquadrat", "Anzahl", "Position", "Boundingbox", "Nachbarn",
"Fehler", "Merkmale"]
for i, name in enumerate(expected):
assert self.header[i] == name, (
f"Header[{i}]: erwartet '{name}', ist '{self.header[i]}'"
)
fehlend = [name for name in expected if name not in self.col]
assert not fehlend, (
f"Fehlende Spalten im CSV-Header: {fehlend}\nHeader ist: {self.header}"
)
def test_hat_eintraege(self):
"""CSV muss mindestens einen Dateneintrag enthalten."""
@@ -218,28 +230,31 @@ class TestFoerdererExportCSV:
"""Alle Eintraege muessen TeileArt 'ILS 2.0 Strecke' haben (VarioFoerderer
ist ein Streckentyp, siehe export_csv.py:process_blocks)."""
for i, row in enumerate(self.rows):
if len(row) < 2:
teileart = self._cell(row, "TeileArt")
if teileart is None:
continue
assert row[1].strip('"') == "ILS 2.0 Strecke", (
f"Zeile {i + 2}: TeileArt='{row[1]}', erwartet 'ILS 2.0 Strecke'"
assert teileart.strip('"') == "ILS 2.0 Strecke", (
f"Zeile {i + 2}: TeileArt='{teileart}', erwartet 'ILS 2.0 Strecke'"
)
def test_anzahl_spalte_ist_eins(self):
"""Anzahl-Spalte muss fuer alle Zeilen '1' sein."""
for i, row in enumerate(self.rows):
if len(row) < 6:
anzahl = self._cell(row, "Anzahl")
if anzahl is None:
continue
assert row[5] == "1", (
f"Zeile {i + 2}: Anzahl={row[5]}, erwartet 1"
assert anzahl == "1", (
f"Zeile {i + 2}: Anzahl={anzahl}, erwartet 1"
)
def test_merkmale_sind_valides_json(self):
"""Merkmale-Spalte muss valides JSON enthalten."""
for i, row in enumerate(self.rows):
if len(row) < 11:
merkmale = self._cell(row, "Merkmale")
if merkmale is None:
continue
try:
json.loads(row[10])
json.loads(merkmale)
except json.JSONDecodeError as e:
pytest.fail(f"Zeile {i + 2}: Merkmale ist kein valides JSON: {e}")
@@ -248,9 +263,10 @@ class TestFoerdererExportCSV:
required = {"Typ", "Winkel", "DeltaH_mm", "DeltaL_mm",
"L_VF_m", "Hoehe_Von_mm", "Hoehe_Bis_mm"}
for i, row in enumerate(self.rows):
if len(row) < 11:
zelle = self._cell(row, "Merkmale")
if zelle is None:
continue
merkmale = json.loads(row[10])
merkmale = json.loads(zelle)
missing = required - set(merkmale.keys())
assert not missing, (
f"Zeile {i + 2}: Fehlende Merkmale-Felder: {missing}"