fix(test): letzten CI-Fund gelöst - Fach-Merge-Test kollidierte mit Auto-Provisionierung
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:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user