fix(backend): CI war seit mehreren Commits rot - realer Bug + veraltete Tests
Wichtigster Fund: mein eigener CI-Check hat nur den zuletzt aktualisierten Task angeschaut statt beide Jobs (backend-tests/frontend-build) einzeln zu prüfen - dadurch ist die tatsächlich rote backend-tests-Pipeline seit mehreren Commits unbemerkt geblieben (auch schon deployed). Echter Bug (von mir eingeführt in SEARCH-002): /suche filterte auf Objektposition.status, das Feld heißt aber ist_status - AttributeError bei jeder Materialsuche. 5 veraltete Testerwartungen korrigiert (Logik in dashboard.py ist seit längerem korrekt und dokumentiert, Tests wurden nie nachgezogen): "noch_nie_kontrolliert" gilt laut _kategorie_und_gruende() IMMER zusätzlich zu jedem anderen Grund - test_dashboard.py/test_mangel.py/ test_fahrzeugdetails.py prüften teils das Gegenteil. 1 Typo-Bug in test_kontrolle.py (UUID != str-Vergleich, immer falsch). Offen/nicht geklärt: test_stammdaten.py::test_fach_verwendung_und_ersetzen_ fuehrt_zusammen (KeyError 'id' bei Fach-Merge-Response) - ohne lokale Testausführung nicht sicher diagnostizierbar, braucht echten pytest-Lauf. Nebenbei: FOUND-009/FOUND-011 im Backlog korrigiert (CI existiert bereits unter .gitea/, vorheriger Abgleich hatte nur .github/ geprüft). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -204,8 +204,11 @@ async def test_offener_fehlbestand_macht_objekt_nicht_einsatzbereit(
|
||||
body = response.json()
|
||||
assert body["einsatzbereit"] == 0
|
||||
assert body["nicht_einsatzbereit"] == 1
|
||||
assert body["details"][0]["gruende"] == ["fehlbestand_offen", "noch_nie_kontrolliert"]
|
||||
assert body["nie_kontrolliert_gesamt"] == 1
|
||||
# Die Kontrolle, die den Fehlbestand erzeugt hat, wurde per _fehlbestand()
|
||||
# bereits abgeschlossen (abschliessen=True) - das Objekt gilt damit als
|
||||
# kontrolliert, "noch_nie_kontrolliert" darf hier nicht mehr erscheinen.
|
||||
assert body["details"][0]["gruende"] == ["fehlbestand_offen"]
|
||||
assert body["nie_kontrolliert_gesamt"] == 0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -232,8 +235,10 @@ async def test_genehmigte_mindermenge_macht_objekt_eingeschraenkt_einsatzbereit(
|
||||
assert body["einsatzbereit"] == 0
|
||||
assert body["eingeschraenkt_einsatzbereit"] == 1
|
||||
assert body["nicht_einsatzbereit"] == 0
|
||||
assert body["details"][0]["gruende"] == ["mindermenge_genehmigt", "noch_nie_kontrolliert"]
|
||||
assert body["nie_kontrolliert_gesamt"] == 1
|
||||
# Wie oben: die zugrundeliegende Kontrolle wurde abgeschlossen, Objekt gilt
|
||||
# als kontrolliert.
|
||||
assert body["details"][0]["gruende"] == ["mindermenge_genehmigt"]
|
||||
assert body["nie_kontrolliert_gesamt"] == 0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
@@ -77,7 +77,9 @@ async def test_in_wartung_macht_objekt_nicht_einsatzbereit(
|
||||
)
|
||||
body = response.json()
|
||||
assert body["nicht_einsatzbereit"] == 1
|
||||
assert body["details"][0]["gruende"] == ["in_wartung"]
|
||||
# Objekt wurde in diesem Test nie kontrolliert - "noch_nie_kontrolliert"
|
||||
# gilt laut _kategorie_und_gruende() zusätzlich zu jedem anderen Grund.
|
||||
assert body["details"][0]["gruende"] == ["in_wartung", "noch_nie_kontrolliert"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -96,7 +98,9 @@ async def test_ueberfaellige_hu_macht_objekt_nicht_einsatzbereit_und_erscheint_i
|
||||
bereitschaft = await client.get(
|
||||
"/api/v1/dashboard/einsatzbereitschaft", headers=auth_header(verantwortlicher_token)
|
||||
)
|
||||
assert bereitschaft.json()["details"][0]["gruende"] == ["hu_uvv_ueberfaellig"]
|
||||
# Objekt wurde in diesem Test nie kontrolliert - "noch_nie_kontrolliert"
|
||||
# gilt laut _kategorie_und_gruende() zusätzlich zu jedem anderen Grund.
|
||||
assert bereitschaft.json()["details"][0]["gruende"] == ["hu_uvv_ueberfaellig", "noch_nie_kontrolliert"]
|
||||
|
||||
prueftermine = await client.get("/api/v1/dashboard/prueftermine", headers=auth_header(verantwortlicher_token))
|
||||
body = prueftermine.json()
|
||||
|
||||
@@ -337,7 +337,7 @@ async def test_zweite_kontrolle_aktualisiert_offenen_fehlbestand_statt_duplikat(
|
||||
assert len(fehlbestaende) == 1
|
||||
assert float(fehlbestaende[0].istmenge) == 7
|
||||
assert float(fehlbestaende[0].fehlmenge) == 3
|
||||
assert fehlbestaende[0].kontrolle_id == erste_kontrolle
|
||||
assert str(fehlbestaende[0].kontrolle_id) == erste_kontrolle
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
@@ -93,7 +93,9 @@ async def test_kritischer_offener_mangel_macht_objekt_nicht_einsatzbereit(
|
||||
)
|
||||
body = response.json()
|
||||
assert body["nicht_einsatzbereit"] == 1
|
||||
assert body["details"][0]["gruende"] == ["mangel_kritisch_offen"]
|
||||
# Objekt wurde in diesem Test nie kontrolliert - "noch_nie_kontrolliert"
|
||||
# gilt laut _kategorie_und_gruende() zusätzlich zu jedem anderen Grund.
|
||||
assert body["details"][0]["gruende"] == ["mangel_kritisch_offen", "noch_nie_kontrolliert"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
Reference in New Issue
Block a user