feat(akte): FILE-009 Freitext-Notizen an beliebiger Ressource
CI / backend-tests (push) Successful in 2m39s
CI / frontend-build (push) Successful in 20s

Polymorphes akte_notiz-Modell (gleiches entitaet_typ/entitaet_id-Muster wie
Dokument/Historie/Mangel), CRUD-Endpunkte, NotizenPanel im Akte-Grid. Löschen
nur durch Autor oder Administrator.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-10 00:49:47 +02:00
co-authored by Claude Sonnet 5
parent 9c6426190e
commit 1e8d66f636
13 changed files with 366 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
import pytest
from tests.conftest import auth_header, login
@pytest.mark.asyncio
async def test_notiz_anlegen_und_lesen(client, objekt_mit_position, mitarbeiter_user):
objekt, _material = objekt_mit_position
token = await login(client, "mitarbeiter1")
angelegt = await client.post(
"/api/v1/notizen",
json={"entitaet_typ": "objekt", "entitaet_id": str(objekt.id), "text": "Funkgerät klemmt manchmal"},
headers=auth_header(token),
)
assert angelegt.status_code == 201
zweite = await client.post(
"/api/v1/notizen",
json={"entitaet_typ": "objekt", "entitaet_id": str(objekt.id), "text": "Rücksprache Hersteller 12.03."},
headers=auth_header(token),
)
assert zweite.status_code == 201
liste = await client.get(
f"/api/v1/notizen?entitaet_typ=objekt&entitaet_id={objekt.id}", headers=auth_header(token)
)
assert liste.status_code == 200
daten = liste.json()
assert len(daten) == 2
# neueste zuerst
assert daten[0]["text"] == "Rücksprache Hersteller 12.03."
@pytest.mark.asyncio
async def test_fremde_notiz_nicht_loeschbar_ausser_admin(client, objekt_mit_position, mitarbeiter_user, admin_user):
objekt, _material = objekt_mit_position
token_mitarbeiter = await login(client, "mitarbeiter1")
angelegt = await client.post(
"/api/v1/notizen",
json={"entitaet_typ": "objekt", "entitaet_id": str(objekt.id), "text": "Testnotiz"},
headers=auth_header(token_mitarbeiter),
)
notiz_id = angelegt.json()["id"]
token_admin = await login(client, "admin1")
abgelehnt = await client.delete(f"/api/v1/notizen/{notiz_id}", headers=auth_header(token_mitarbeiter))
# eigene Notiz darf der Autor selbst löschen
assert abgelehnt.status_code == 204
zweite = await client.post(
"/api/v1/notizen",
json={"entitaet_typ": "objekt", "entitaet_id": str(objekt.id), "text": "Zweite Notiz"},
headers=auth_header(token_mitarbeiter),
)
zweite_id = zweite.json()["id"]
erlaubt = await client.delete(f"/api/v1/notizen/{zweite_id}", headers=auth_header(token_admin))
assert erlaubt.status_code == 204