Files
MABEA/backend/tests/test_akte.py
T
patrickandClaude Sonnet 5 2a4d391711
CI / backend-tests (push) Failing after 2m4s
CI / frontend-build (push) Successful in 18s
feat(maintenance): MAINT-Epic (Wartungspläne/-aufträge, Werkstatt) + Akte-Redesign
Neues Wartungskonzept: Wartungsplan+Position+Intervall (zeit/km/
Betriebsstunden, kombinierbar - fällig sobald ein Kriterium erreicht
ist), Wartungsauftrag mit intern/externer Werkstatt, Status offen/
in_arbeit/erledigt, Kosten, Historie, Dokument-Anhang. Ad-hoc-Aufträge
ohne Plan möglich (z.B. kleinere Reparatur). Admin-Tab "Wartungspläne".

Objektakte-Redesign (Epic 21, Nutzer-Feedback "wirkt nicht modern"):
CSS-Grid statt Karten-Stapel, einspaltig mobil, zweispaltig ab 900px;
Fahrzeug-Objekte zeigen Wartung/Fahrzeugdaten prominent, Geräte/
Rucksäcke die Beladung. Dabei gefundene Lücke: Beladung (Soll/Ist je
Position) fehlte in der Akte komplett, nur über eine laufende
Kontrolle sichtbar - jetzt eigene Karte.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-06 23:17:39 +02:00

77 lines
3.0 KiB
Python

import pytest
from tests.conftest import auth_header, login
@pytest.mark.asyncio
async def test_akte_buendelt_teilbereiche(client, db_session, objekt_mit_position, admin_user, hauptserver_id):
"""FILE-001: Aggregations-Endpunkt liefert Stammdaten + mind. zwei weitere
Teilbereiche (Historie, Mängel) für ein Objekt in einem Aufruf."""
from app.models.mangel import Mangel, MangelPrioritaet, MangelStatus
from app.models.historie import Historie
from datetime import datetime, timezone
import uuid
objekt, _material = objekt_mit_position
db_session.add(
Mangel(
objekt_id=objekt.id,
beschreibung="Riss im Gurt",
prioritaet=MangelPrioritaet.hoch,
status=MangelStatus.neu,
gemeldet_von=admin_user.id,
gemeldet_am=datetime.now(timezone.utc),
)
)
db_session.add(
Historie(
id=uuid.uuid4(),
erzeugt_von_server_id=hauptserver_id,
zeitpunkt=datetime.now(timezone.utc),
benutzer_id=admin_user.id,
ereignistyp="objekt_geaendert",
entitaet_typ="objekt",
entitaet_id=str(objekt.id),
begruendung=None,
)
)
await db_session.flush()
token = await login(client, "admin1")
antwort = await client.get(f"/api/v1/akte/objekt/{objekt.id}", headers=auth_header(token))
assert antwort.status_code == 200
body = antwort.json()
assert body["objekt"]["id"] == objekt.id
assert body["objekttyp_name"] == "Rucksack-KT"
assert body["standort_name"] == "Wache-KT"
assert len(body["maengel"]) == 1
assert body["maengel"][0]["beschreibung"] == "Riss im Gurt"
assert len(body["historie"]) == 1
assert body["historie"][0]["entitaet_typ"] == "objekt"
assert body["einsatzbereitschaft_status"] == "not-ready"
assert "mangel_kritisch_offen" in body["einsatzbereitschaft_gruende"]
assert len(body["beladung"]) == 1
assert body["beladung"][0]["material_id"] == _material.id
assert body["beladung"][0]["sollmenge"] == "10"
assert body["beladung"][0]["istmenge"] == "0"
@pytest.mark.asyncio
async def test_akte_readiness_unbekannt_bei_nie_kontrolliert(client, objekt_mit_position, admin_user):
"""UI-005: ein Objekt ohne jede Auffälligkeit, aber noch nie kontrolliert,
gilt als "unbekannt" - NIE als "einsatzbereit" (Akzeptanzkriterium)."""
objekt, _material = objekt_mit_position
token = await login(client, "admin1")
antwort = await client.get(f"/api/v1/akte/objekt/{objekt.id}", headers=auth_header(token))
assert antwort.status_code == 200
body = antwort.json()
assert body["einsatzbereitschaft_status"] == "unknown"
assert body["einsatzbereitschaft_status"] != "ready"
@pytest.mark.asyncio
async def test_akte_unbekanntes_objekt_ist_404(client, admin_user):
token = await login(client, "admin1")
antwort = await client.get("/api/v1/akte/objekt/999999", headers=auth_header(token))
assert antwort.status_code == 404