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"]