fix(kontrolle): Abbruch löscht bereits nachgefüllten Fehlbestand nicht mehr
CI / backend-tests (push) Successful in 57s
CI / frontend-build (push) Successful in 5m12s

Beim Testen des neuen Inline-Nachfüll-Dialogs (Karte 07) gefunden: Sofort-
Nachfüllung während laufender Kontrolle + anschließender Abbruch führte zu
IntegrityError (FK-Verweis aus nachfuellung), da _verwirf_kontrolldaten
jeden Fehlbestand der Kontrolle unbedingt löschte.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
2026-09-04 09:14:41 +02:00
co-authored by Claude Sonnet 5
parent d70558f124
commit 032126c605
2 changed files with 47 additions and 1 deletions
+40
View File
@@ -157,6 +157,46 @@ async def test_abbruch_verwirft_fehlbestand_und_positionen(
assert kontrolle.status == KontrollStatus.abgebrochen
@pytest.mark.asyncio
async def test_abbruch_nach_sofort_nachfuellung_loescht_fehlbestand_nicht(
client, db_session, objekt_mit_position, mitarbeiter_user
):
"""Karte 07: wird während der laufenden Kontrolle sofort nachgefüllt und die
Kontrolle danach abgebrochen (z. B. Einsatzalarmierung), darf der bereits
nachgefüllte Fehlbestand NICHT gelöscht werden - er ist eine echte
dokumentierte Bestandsbewegung, kein reiner Kontroll-Zwischenstand."""
objekt, material = objekt_mit_position
token = await login(client, "mitarbeiter1")
start = await _starte(client, token, objekt.id)
kontrolle_id = start.json()["id"]
erfassung = await client.put(
f"/api/v1/kontrollen/{kontrolle_id}/positionen/{material.id}",
json={"istmenge": "8"},
headers=auth_header(token),
)
fehlbestand_id = erfassung.json()["fehlbestand_id"]
assert fehlbestand_id is not None
nf = await client.post(
f"/api/v1/fehlbestaende/{fehlbestand_id}/nachfuellungen",
json={"menge": "2"},
headers=auth_header(token),
)
assert nf.status_code == 201
response = await client.post(
f"/api/v1/kontrollen/{kontrolle_id}/abbrechen",
json={"grund": "Einsatzalarmierung"},
headers=auth_header(token),
)
assert response.status_code == 200
fehlbestand = await db_session.get(Fehlbestand, fehlbestand_id)
assert fehlbestand is not None
assert fehlbestand.status.value == "erledigt"
@pytest.mark.asyncio
async def test_objekt_sperre_zweiter_zugriff_ist_409(
client, objekt_mit_position, mitarbeiter_user, mitarbeiter2_user