From e40dd01be94f7a4c743da347b92bc5e81b12805f Mon Sep 17 00:00:00 2001 From: patrick Date: Tue, 8 Sep 2026 10:10:23 +0200 Subject: [PATCH] =?UTF-8?q?fix(test):=20letzten=20CI-Fund=20gel=C3=B6st=20?= =?UTF-8?q?-=20Fach-Merge-Test=20kollidierte=20mit=20Auto-Provisionierung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV --- backend/tests/test_stammdaten.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/backend/tests/test_stammdaten.py b/backend/tests/test_stammdaten.py index d326f83..288c371 100644 --- a/backend/tests/test_stammdaten.py +++ b/backend/tests/test_stammdaten.py @@ -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]