from datetime import date, timedelta import pytest from tests.conftest import auth_header, login @pytest.mark.asyncio async def test_fahrzeugdetails_upsert(client, objekt_mit_position, admin_user): objekt, _material = objekt_mit_position token = await login(client, "admin1") fehlend = await client.get(f"/api/v1/objekte/{objekt.id}/fahrzeugdetails", headers=auth_header(token)) assert fehlend.status_code == 404 gesetzt = await client.put( f"/api/v1/objekte/{objekt.id}/fahrzeugdetails", json={ "kennzeichen": "XX-YY 123", "kilometerstand": 42315, "naechste_hu": "2027-05-01", "funkkenner": "OPTA-12345", }, headers=auth_header(token), ) assert gesetzt.status_code == 200 assert gesetzt.json()["kennzeichen"] == "XX-YY 123" assert gesetzt.json()["kilometerstand"] == 42315 assert gesetzt.json()["funkkenner"] == "OPTA-12345" aktualisiert = await client.put( f"/api/v1/objekte/{objekt.id}/fahrzeugdetails", json={"kilometerstand": 42500}, headers=auth_header(token), ) assert aktualisiert.json()["kilometerstand"] == 42500 assert aktualisiert.json()["kennzeichen"] is None # PUT ersetzt komplett, kein Merge @pytest.mark.asyncio async def test_mitarbeiter_darf_fahrzeugdetails_nicht_setzen(client, objekt_mit_position, mitarbeiter_user): objekt, _material = objekt_mit_position token = await login(client, "mitarbeiter1") response = await client.put( f"/api/v1/objekte/{objekt.id}/fahrzeugdetails", json={"kennzeichen": "X"}, headers=auth_header(token) ) assert response.status_code == 403 @pytest.mark.asyncio async def test_ausser_dienst_objekt_zaehlt_nicht_in_einsatzbereitschaft( client, objekt_mit_position, admin_user, materialverantwortlicher_user ): objekt, _material = objekt_mit_position token = await login(client, "admin1") await client.patch(f"/api/v1/objekte/{objekt.id}", json={"status": "ausser_dienst"}, headers=auth_header(token)) verantwortlicher_token = await login(client, "materialverantwortlicher1") response = await client.get( "/api/v1/dashboard/einsatzbereitschaft", headers=auth_header(verantwortlicher_token) ) body = response.json() assert body["gesamt"] == 0 @pytest.mark.asyncio async def test_in_wartung_macht_objekt_nicht_einsatzbereit( client, objekt_mit_position, admin_user, materialverantwortlicher_user ): objekt, _material = objekt_mit_position token = await login(client, "admin1") await client.patch(f"/api/v1/objekte/{objekt.id}", json={"status": "in_wartung"}, headers=auth_header(token)) verantwortlicher_token = await login(client, "materialverantwortlicher1") response = await client.get( "/api/v1/dashboard/einsatzbereitschaft", headers=auth_header(verantwortlicher_token) ) body = response.json() assert body["nicht_einsatzbereit"] == 1 assert body["details"][0]["gruende"] == ["in_wartung"] @pytest.mark.asyncio async def test_ueberfaellige_hu_macht_objekt_nicht_einsatzbereit_und_erscheint_in_prueftermine( client, objekt_mit_position, admin_user, materialverantwortlicher_user ): objekt, _material = objekt_mit_position token = await login(client, "admin1") await client.put( f"/api/v1/objekte/{objekt.id}/fahrzeugdetails", json={"naechste_hu": (date.today() - timedelta(days=10)).isoformat()}, headers=auth_header(token), ) verantwortlicher_token = await login(client, "materialverantwortlicher1") bereitschaft = await client.get( "/api/v1/dashboard/einsatzbereitschaft", headers=auth_header(verantwortlicher_token) ) assert bereitschaft.json()["details"][0]["gruende"] == ["hu_uvv_ueberfaellig"] prueftermine = await client.get("/api/v1/dashboard/prueftermine", headers=auth_header(verantwortlicher_token)) body = prueftermine.json() assert len(body) == 1 assert body[0]["typ"] == "fahrzeug_hu" assert body[0]["status"] == "abgelaufen" @pytest.mark.asyncio async def test_objekt_status_aenderung_steht_in_historie(client, objekt_mit_position, admin_user): objekt, _material = objekt_mit_position token = await login(client, "admin1") await client.patch(f"/api/v1/objekte/{objekt.id}", json={"status": "in_wartung"}, headers=auth_header(token)) historie = await client.get( f"/api/v1/historie?entitaet_typ=objekt&entitaet_id={objekt.id}", headers=auth_header(token) ) body = historie.json() assert len(body) == 1 assert body[0]["ereignistyp"] == "objekt_geaendert" assert body[0]["neuer_wert"]["status"] == "in_wartung"