import pytest from tests.conftest import auth_header, login @pytest.mark.asyncio async def test_objekt_verschieben_protokolliert_bewegung( client, objekt_mit_position, standort_factory, materialverantwortlicher_user ): objekt, _material = objekt_mit_position ziel = await standort_factory("Aussenlager") token = await login(client, "materialverantwortlicher1") bewegung = await client.post( f"/api/v1/objekte/{objekt.id}/lagerbewegungen", json={"nach_standort_id": ziel.id, "grund": "Umzug"}, headers=auth_header(token), ) assert bewegung.status_code == 201 body = bewegung.json() assert body["objekt_id"] == objekt.id assert body["von_standort_id"] == objekt.standort_id assert body["nach_standort_id"] == ziel.id assert body["grund"] == "Umzug" objekt_neu = await client.get(f"/api/v1/objekte/{objekt.id}", headers=auth_header(token)) assert objekt_neu.json()["standort_id"] == ziel.id liste = await client.get(f"/api/v1/lagerbewegungen?objekt_id={objekt.id}", headers=auth_header(token)) assert len(liste.json()) == 1 @pytest.mark.asyncio async def test_mitarbeiter_darf_nicht_verschieben( client, objekt_mit_position, standort_factory, mitarbeiter_user ): objekt, _material = objekt_mit_position ziel = await standort_factory("Aussenlager2") token = await login(client, "mitarbeiter1") response = await client.post( f"/api/v1/objekte/{objekt.id}/lagerbewegungen", json={"nach_standort_id": ziel.id}, headers=auth_header(token), ) assert response.status_code == 403 @pytest.mark.asyncio async def test_verschieben_an_gleichen_standort_ist_409(client, objekt_mit_position, materialverantwortlicher_user): objekt, _material = objekt_mit_position token = await login(client, "materialverantwortlicher1") response = await client.post( f"/api/v1/objekte/{objekt.id}/lagerbewegungen", json={"nach_standort_id": objekt.standort_id}, headers=auth_header(token), ) assert response.status_code == 409 @pytest.mark.asyncio async def test_verschieben_zu_unbekanntem_standort_ist_404(client, objekt_mit_position, materialverantwortlicher_user): objekt, _material = objekt_mit_position token = await login(client, "materialverantwortlicher1") response = await client.post( f"/api/v1/objekte/{objekt.id}/lagerbewegungen", json={"nach_standort_id": 999999}, headers=auth_header(token), ) assert response.status_code == 404 @pytest.mark.asyncio async def test_lagerbewegungen_nach_standort_filterbar( client, objekt_mit_position, standort_factory, materialverantwortlicher_user ): objekt, _material = objekt_mit_position ziel = await standort_factory("Aussenlager3") token = await login(client, "materialverantwortlicher1") await client.post( f"/api/v1/objekte/{objekt.id}/lagerbewegungen", json={"nach_standort_id": ziel.id}, headers=auth_header(token), ) gefiltert = await client.get(f"/api/v1/lagerbewegungen?standort_id={ziel.id}", headers=auth_header(token)) assert len(gefiltert.json()) == 1