feat(inventory): INV-007 Ausgabe/Rückgabe von Material und Leihgeräten
Personenbezogene Ausgabe ergänzt die reine Standort-/Lagerplatz-Sicht
um "wer hat das Ding gerade": neues Modell ausgabe (Material +
optional geraet_instanz_id), POST /ausgaben, GET /ausgaben (Filter
status/empfaenger), POST /ausgaben/{id}/rueckgabe mit Schutz vor
Doppel-Rueckgabe. Frontend als Admin-Tab "Ausgabe/Rückgabe" +
Command-Palette-Eintrag.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import pytest
|
||||
|
||||
from tests.conftest import auth_header, login
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_ausgabe_rueckgabe_zyklus(client, admin_user, materialverantwortlicher_user, material_factory):
|
||||
token = await login(client, "admin1")
|
||||
material = await material_factory("Funkgerät")
|
||||
|
||||
ausgabe = await client.post(
|
||||
"/api/v1/ausgaben",
|
||||
json={
|
||||
"material_id": material.id,
|
||||
"menge": "1",
|
||||
"empfaenger_id": materialverantwortlicher_user.id,
|
||||
"zweck": "Übung",
|
||||
},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
assert ausgabe.status_code == 201
|
||||
daten = ausgabe.json()
|
||||
assert daten["status"] == "offen"
|
||||
assert daten["rueckgabe_am"] is None
|
||||
assert daten["ausgegeben_von"] == admin_user.id
|
||||
|
||||
offene = await client.get("/api/v1/ausgaben?status_filter=offen", headers=auth_header(token))
|
||||
assert len(offene.json()) == 1
|
||||
|
||||
rueckgabe = await client.post(
|
||||
f"/api/v1/ausgaben/{daten['id']}/rueckgabe", headers=auth_header(token)
|
||||
)
|
||||
assert rueckgabe.status_code == 200
|
||||
assert rueckgabe.json()["status"] == "zurueck"
|
||||
assert rueckgabe.json()["rueckgabe_am"] is not None
|
||||
|
||||
doppelt = await client.post(
|
||||
f"/api/v1/ausgaben/{daten['id']}/rueckgabe", headers=auth_header(token)
|
||||
)
|
||||
assert doppelt.status_code == 409
|
||||
|
||||
offene2 = await client.get("/api/v1/ausgaben?status_filter=offen", headers=auth_header(token))
|
||||
assert len(offene2.json()) == 0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_rueckgabe_unbekannte_ausgabe_404(client, admin_user):
|
||||
token = await login(client, "admin1")
|
||||
response = await client.post(
|
||||
"/api/v1/ausgaben/00000000-0000-0000-0000-000000000000/rueckgabe",
|
||||
headers=auth_header(token),
|
||||
)
|
||||
assert response.status_code == 404
|
||||
Reference in New Issue
Block a user