Sprint 1: Stammdaten-Modelle/-Endpunkte, Admin-Benutzerverwaltung, Zuständigkeits-Vererbung (E2)
CI / backend-tests (push) Failing after 0s
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
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import pytest
|
||||
|
||||
from tests.conftest import auth_header, login
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_admin_can_create_benutzer_with_rollen(client, admin_user):
|
||||
token = await login(client, "admin1")
|
||||
response = await client.post(
|
||||
"/api/v1/benutzer",
|
||||
json={
|
||||
"name": "Neue Kollegin",
|
||||
"login": "neu1",
|
||||
"passwort": "sicheres-passwort",
|
||||
"rollen": ["mitarbeiter", "materialverantwortlicher"],
|
||||
},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
assert response.status_code == 201
|
||||
body = response.json()
|
||||
assert body["login"] == "neu1"
|
||||
assert set(body["rollen"]) == {"mitarbeiter", "materialverantwortlicher"}
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_duplicate_login_conflict(client, admin_user):
|
||||
token = await login(client, "admin1")
|
||||
payload = {
|
||||
"name": "Doppelt",
|
||||
"login": "doppelt1",
|
||||
"passwort": "sicheres-passwort",
|
||||
"rollen": [],
|
||||
}
|
||||
first = await client.post("/api/v1/benutzer", json=payload, headers=auth_header(token))
|
||||
assert first.status_code == 201
|
||||
second = await client.post("/api/v1/benutzer", json=payload, headers=auth_header(token))
|
||||
assert second.status_code == 409
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_mitarbeiter_cannot_manage_benutzer(client, mitarbeiter_user):
|
||||
token = await login(client, "mitarbeiter1")
|
||||
response = await client.get("/api/v1/benutzer", headers=auth_header(token))
|
||||
assert response.status_code == 403
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_admin_can_update_rollen(client, admin_user, mitarbeiter_user):
|
||||
token = await login(client, "admin1")
|
||||
response = await client.patch(
|
||||
f"/api/v1/benutzer/{mitarbeiter_user.id}",
|
||||
json={"rollen": ["leitungsverantwortlicher"]},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json()["rollen"] == ["leitungsverantwortlicher"]
|
||||
Reference in New Issue
Block a user