feat(warehouse): WH-005 Umlagerung zwischen Lagerplätzen
Atomare Aus+Ein-Buchung in einer Materialbewegung-Zeile statt zwei Einzelschritten. NOTIF-001 war bereits produktiv umgesetzt, Backlog war nur veraltet - korrigiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -82,3 +82,58 @@ async def test_ein_und_auslagerung_veraendert_bestand_korrekt(client, admin_user
|
||||
f"/api/v1/materialbewegungen?lagerplatz_id={platz_id}", headers=auth_header(token)
|
||||
)
|
||||
assert len(bewegungen.json()) == 2
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_umlagerung_verschiebt_bestand_atomar(client, admin_user, material_factory):
|
||||
token = await login(client, "admin1")
|
||||
material = await material_factory("Beatmungsbeutel")
|
||||
|
||||
lagerort = await client.post(
|
||||
"/api/v1/lagerorte", json={"name": "Lager Y", "typ": "lager"}, headers=auth_header(token)
|
||||
)
|
||||
quelle = await client.post(
|
||||
"/api/v1/lagerplaetze",
|
||||
json={"lagerort_id": lagerort.json()["id"], "code": "QUELLE-1"},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
ziel = await client.post(
|
||||
"/api/v1/lagerplaetze",
|
||||
json={"lagerort_id": lagerort.json()["id"], "code": "ZIEL-1"},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
quelle_id, ziel_id = quelle.json()["id"], ziel.json()["id"]
|
||||
|
||||
await client.post(
|
||||
f"/api/v1/lagerplaetze/{quelle_id}/einlagern",
|
||||
json={"material_id": material.id, "menge": "10"},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
|
||||
um = await client.post(
|
||||
f"/api/v1/lagerplaetze/{quelle_id}/umlagern",
|
||||
json={"nach_lagerplatz_id": ziel_id, "material_id": material.id, "menge": "4"},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
assert um.status_code == 201
|
||||
assert um.json()["von_lagerplatz_id"] == quelle_id
|
||||
assert um.json()["nach_lagerplatz_id"] == ziel_id
|
||||
|
||||
bestand_quelle = await client.get(f"/api/v1/lagerplaetze/{quelle_id}/bestand", headers=auth_header(token))
|
||||
assert bestand_quelle.json()[0]["menge"] == "6"
|
||||
bestand_ziel = await client.get(f"/api/v1/lagerplaetze/{ziel_id}/bestand", headers=auth_header(token))
|
||||
assert bestand_ziel.json()[0]["menge"] == "4"
|
||||
|
||||
gleich = await client.post(
|
||||
f"/api/v1/lagerplaetze/{quelle_id}/umlagern",
|
||||
json={"nach_lagerplatz_id": quelle_id, "material_id": material.id, "menge": "1"},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
assert gleich.status_code == 409
|
||||
|
||||
zu_viel = await client.post(
|
||||
f"/api/v1/lagerplaetze/{quelle_id}/umlagern",
|
||||
json={"nach_lagerplatz_id": ziel_id, "material_id": material.id, "menge": "999"},
|
||||
headers=auth_header(token),
|
||||
)
|
||||
assert zu_viel.status_code == 409
|
||||
|
||||
Reference in New Issue
Block a user