fix(test): letzten CI-Fund gelöst - Fach-Merge-Test kollidierte mit Auto-Provisionierung
CI / backend-tests (push) Successful in 2m11s
CI / frontend-build (push) Successful in 28s

Per SSH-Debug auf dem Server (Wegwerf-Testdatenbank, echte pytest-Ausführung
- hier lokal ohne venv nicht möglich): erstelle_vorlage() legt für den
Freitext-Fachnamen einer Vorlagenposition bereits automatisch ein Fach an
(services/vorlagen.py). Der Test versuchte danach nochmal explizit ein Fach
mit fast demselben Namen anzulegen ("Reizverschlussfach Gross") - das
kollidierte case-insensitiv mit dem bereits automatisch erzeugten
("Reizverschlussfach gross") und schlug mit 409 fehl, worauf der Rest des
Tests mit falschen Annahmen weiterlief (KeyError 'id').

Fix: das automatisch angelegte Fach wird jetzt per Query als Ziel verwendet
statt nochmal angelegt zu werden. Komplette Suite (164 Tests) läuft auf dem
Server jetzt vollständig grün.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-08 10:10:23 +02:00
co-authored by Claude Sonnet 5
parent f4fe423559
commit e40dd01be9
+11 -6
View File
@@ -308,11 +308,16 @@ async def test_fach_verwendung_und_ersetzen_fuehrt_zusammen(
zustaendiger_server_id=hauptserver_id,
)
ziel_fach = await client.post(
"/api/v1/faecher",
json={"objekttyp_id": objekttyp_id, "name": "Reizverschlussfach Gross"},
headers=auth_header(token),
)
# erstelle_vorlage() legt für den Freitext-Fachnamen der Vorlagenposition
# bereits automatisch ein Fach an (services/vorlagen.py::_erstelle_faecher)
# - das ist hier schon das spätere "Ziel", ein erneutes Anlegen desselben
# Namens würde am case-insensitiven Duplikat-Schutz scheitern (409).
ziel = (
await db_session.execute(
select(Fach).where(Fach.objekttyp_id == objekttyp_id, Fach.name == "Reizverschlussfach gross")
)
).scalar_one()
quell_fach = await client.post(
"/api/v1/faecher",
json={"objekttyp_id": objekttyp_id, "name": "reizverschlussfach gross tmp"},
@@ -334,7 +339,7 @@ async def test_fach_verwendung_und_ersetzen_fuehrt_zusammen(
headers=auth_header(token),
)
assert ersetzt.status_code == 200
assert ersetzt.json()["id"] == ziel_fach.json()["id"]
assert ersetzt.json()["id"] == ziel.id
liste = await client.get("/api/v1/faecher", headers=auth_header(token))
verbleibende = [f for f in liste.json() if f["objekttyp_id"] == objekttyp_id]