CI / backend-tests (push) Failing after 0s
- ORM-Modelle: Bereich, Kategorie, Standort, Objekttyp, Material (Prompt 06/07),
minimales Objekt-Modell (voll ausgebaut erst Sprint 2), Zustaendigkeit/
Kontrollverantwortung
- Admin-API 7a: GET/POST Stammdaten-Endpunkte, PATCH Material, Benutzerverwaltung
(anlegen/Rollen ändern), Zuständigkeits-/Kontrollverantwortungs-CRUD
- Vererbungslogik E2 als eigener Service (app/services/zustaendigkeit.py):
Standort-Zuordnung vererbt sich auf alle Objekte, Objekt-Zeile ist Vereinigung
statt Ersatz - GET /zustaendigkeiten/benutzer/{id}/objekte exponiert das
- Tests: Stammdaten-CRUD + Rollenrechte, Benutzerverwaltung (inkl. 409 bei
Login-Duplikat), E2-Vererbungslogik (Standort-only, Standort+Objekt-Vereinigung,
End-to-End über den Endpunkt)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
import pytest
|
|
|
|
from tests.conftest import auth_header, login
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_admin_can_create_bereich(client, admin_user):
|
|
token = await login(client, "admin1")
|
|
response = await client.post(
|
|
"/api/v1/bereiche", json={"name": "Rettungsdienst"}, headers=auth_header(token)
|
|
)
|
|
assert response.status_code == 201
|
|
assert response.json()["name"] == "Rettungsdienst"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_mitarbeiter_cannot_create_bereich(client, mitarbeiter_user):
|
|
token = await login(client, "mitarbeiter1")
|
|
response = await client.post(
|
|
"/api/v1/bereiche", json={"name": "Rettungsdienst"}, headers=auth_header(token)
|
|
)
|
|
assert response.status_code == 403
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_mitarbeiter_can_list_bereiche(client, mitarbeiter_user, admin_user, db_session):
|
|
from app.models.stammdaten import Bereich
|
|
|
|
db_session.add(Bereich(name="KatS"))
|
|
await db_session.flush()
|
|
|
|
token = await login(client, "mitarbeiter1")
|
|
response = await client.get("/api/v1/bereiche", headers=auth_header(token))
|
|
assert response.status_code == 200
|
|
assert any(b["name"] == "KatS" for b in response.json())
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_material_lifecycle(client, admin_user):
|
|
token = await login(client, "admin1")
|
|
create_response = await client.post(
|
|
"/api/v1/materialien",
|
|
json={"name": "Kompresse steril", "einheit": "Stück", "materialtyp": "standard"},
|
|
headers=auth_header(token),
|
|
)
|
|
assert create_response.status_code == 201
|
|
material_id = create_response.json()["id"]
|
|
|
|
patch_response = await client.patch(
|
|
f"/api/v1/materialien/{material_id}",
|
|
json={"aktiv": False},
|
|
headers=auth_header(token),
|
|
)
|
|
assert patch_response.status_code == 200
|
|
assert patch_response.json()["aktiv"] is False
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_material_not_found(client, admin_user):
|
|
token = await login(client, "admin1")
|
|
response = await client.get("/api/v1/materialien/999999", headers=auth_header(token))
|
|
assert response.status_code == 404
|