fix(dashboard): nie kontrollierte Objekte gelten nicht mehr als einsatzbereit
Nutzer-Fund (Readiness-Backlog-Review): einsatzbereitschaft() zählte ein Objekt ohne jede Kontrolle bisher als "einsatzbereit", weil keine Kriterien verletzt waren - fachlich falsch, "nie geprüft" ist nicht dasselbe wie "geprüft und in Ordnung". Neuer vierter Zustand "unbekannt": Objekte ohne abgeschlossene Kontrolle UND ohne sonstige Blocker fallen jetzt hierunter statt unter "einsatzbereit". Objekte mit anderen Gründen (Fehlbestand/Mangel/Prüfung/...) bleiben davon unberührt, die zählten schon vorher korrekt. Tests angepasst: zwei bestehende Tests nutzten ungeprüfte Objekte und erwarteten fälschlich "einsatzbereit" - jetzt entweder explizit kontrolliert (Ist=Soll) oder auf "unbekannt" korrigiert, plus neuer Test für den Kernfall. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
This commit is contained in:
@@ -153,19 +153,41 @@ async def test_abgelaufenes_material_wird_als_abgelaufen_markiert(
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_objekt_ohne_maengel_ist_einsatzbereit(
|
||||
client, objekt_mit_position, materialverantwortlicher_user
|
||||
async def test_objekt_ohne_maengel_und_kontrolliert_ist_einsatzbereit(
|
||||
client, objekt_mit_position, mitarbeiter_user, materialverantwortlicher_user
|
||||
):
|
||||
objekt, _material = objekt_mit_position
|
||||
"""Kontrolliert (Ist=Soll, kein Fehlbestand) und ohne sonstige Mängel -> bereit.
|
||||
Unterscheidet sich bewusst von test_nie_kontrolliertes_objekt_ist_unbekannt."""
|
||||
objekt, material = objekt_mit_position
|
||||
mitarbeiter_token = await login(client, "mitarbeiter1")
|
||||
await _fehlbestand(client, mitarbeiter_token, objekt, material, "10") # = Sollmenge, kein Fehlbestand
|
||||
|
||||
token = await login(client, "materialverantwortlicher1")
|
||||
response = await client.get("/api/v1/dashboard/einsatzbereitschaft", headers=auth_header(token))
|
||||
body = response.json()
|
||||
assert body["einsatzbereit"] == 1
|
||||
assert body["eingeschraenkt_einsatzbereit"] == 0
|
||||
assert body["unbekannt"] == 0
|
||||
assert body["nicht_einsatzbereit"] == 0
|
||||
assert body["details"] == []
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_nie_kontrolliertes_objekt_ist_unbekannt(
|
||||
client, objekt_mit_position, materialverantwortlicher_user
|
||||
):
|
||||
"""Nutzer-Fund: ein nie kontrolliertes Objekt darf NICHT als einsatzbereit zählen
|
||||
(unterscheidet "nie geprüft" von "geprüft und in Ordnung")."""
|
||||
objekt, _material = objekt_mit_position
|
||||
token = await login(client, "materialverantwortlicher1")
|
||||
response = await client.get("/api/v1/dashboard/einsatzbereitschaft", headers=auth_header(token))
|
||||
body = response.json()
|
||||
assert body["einsatzbereit"] == 0
|
||||
assert body["unbekannt"] == 1
|
||||
assert body["nicht_einsatzbereit"] == 0
|
||||
assert body["details"][0]["gruende"] == ["noch_nie_kontrolliert"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_offener_fehlbestand_macht_objekt_nicht_einsatzbereit(
|
||||
client, objekt_mit_position, mitarbeiter_user, materialverantwortlicher_user
|
||||
|
||||
@@ -100,8 +100,22 @@ async def test_kritischer_offener_mangel_macht_objekt_nicht_einsatzbereit(
|
||||
async def test_niedrige_prioritaet_blockiert_einsatzbereitschaft_nicht(
|
||||
client, objekt_mit_position, mitarbeiter_user, materialverantwortlicher_user
|
||||
):
|
||||
objekt, _material = objekt_mit_position
|
||||
objekt, material = objekt_mit_position
|
||||
mitarbeiter_token = await login(client, "mitarbeiter1")
|
||||
# kontrolliert (Ist=Soll), damit dieser Test unabhängig vom "nie kontrolliert"-Fall
|
||||
# (siehe test_dashboard.py: test_nie_kontrolliertes_objekt_ist_unbekannt) nur die
|
||||
# Priorität isoliert prüft.
|
||||
start = await client.post(
|
||||
f"/api/v1/objekte/{objekt.id}/kontrollen", json={"uebernehmen": False}, headers=auth_header(mitarbeiter_token)
|
||||
)
|
||||
kontrolle_id = start.json()["id"]
|
||||
await client.put(
|
||||
f"/api/v1/kontrollen/{kontrolle_id}/positionen/{material.id}",
|
||||
json={"istmenge": "10"},
|
||||
headers=auth_header(mitarbeiter_token),
|
||||
)
|
||||
await client.post(f"/api/v1/kontrollen/{kontrolle_id}/abschliessen", headers=auth_header(mitarbeiter_token))
|
||||
|
||||
await client.post(
|
||||
"/api/v1/maengel",
|
||||
json={"objekt_id": objekt.id, "beschreibung": "Kratzer im Lack", "prioritaet": "niedrig"},
|
||||
|
||||
Reference in New Issue
Block a user