Files
patrickandClaude Sonnet 5 da6cfd8535
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
VOR-02: vermerke notizen an akte vorgang
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 09:31:02 +02:00

102 lines
2.5 KiB
Go

package caseobj
import (
"context"
"testing"
)
func TestAddNote_ChangeAttemptIsRejected(t *testing.T) {
s := newTestService(t)
ctx := context.Background()
c, err := s.Create(ctx, "", "alice", "alice", nil)
if err != nil {
t.Fatal(err)
}
n, err := s.AddNote(ctx, c.ID, "alice", "erster vermerk")
if err != nil {
t.Fatal(err)
}
if _, err := s.pool.Exec(ctx, `UPDATE case_notes SET body = $1 WHERE id = $2`, "geaendert", n.ID); err == nil {
t.Fatal("update haette abgelehnt werden muessen")
}
if _, err := s.pool.Exec(ctx, `DELETE FROM case_notes WHERE id = $1`, n.ID); err == nil {
t.Fatal("delete haette abgelehnt werden muessen")
}
notes, err := s.Notes(ctx, c.ID)
if err != nil {
t.Fatal(err)
}
if len(notes) != 1 || notes[0].Body != "erster vermerk" {
t.Fatalf("vermerk unveraendert erwartet, got %+v", notes)
}
}
func TestAddNote_AuthorAndBodyAreRequired(t *testing.T) {
s := newTestService(t)
ctx := context.Background()
c, err := s.Create(ctx, "", "alice", "alice", nil)
if err != nil {
t.Fatal(err)
}
if _, err := s.AddNote(ctx, c.ID, "", "text ohne autor"); err == nil {
t.Fatal("erwartet fehler bei fehlendem autor")
}
if _, err := s.AddNote(ctx, c.ID, "alice", ""); err == nil {
t.Fatal("erwartet fehler bei fehlendem text")
}
notes, err := s.Notes(ctx, c.ID)
if err != nil {
t.Fatal(err)
}
if len(notes) != 0 {
t.Fatalf("keine vermerke erwartet, got %d", len(notes))
}
}
func TestNotes_ReturnedInChronologicalOrder(t *testing.T) {
s := newTestService(t)
ctx := context.Background()
c, err := s.Create(ctx, "", "alice", "alice", nil)
if err != nil {
t.Fatal(err)
}
bodies := []string{"erster", "zweiter", "dritter"}
for _, b := range bodies {
if _, err := s.AddNote(ctx, c.ID, "alice", b); err != nil {
t.Fatal(err)
}
}
notes, err := s.Notes(ctx, c.ID)
if err != nil {
t.Fatal(err)
}
if len(notes) != len(bodies) {
t.Fatalf("erwartet %d vermerke, got %d", len(bodies), len(notes))
}
for i, b := range bodies {
if notes[i].Body != b {
t.Fatalf("position %d: erwartet %q, got %q", i, b, notes[i].Body)
}
if notes[i].Author != "alice" {
t.Fatalf("position %d: autor fehlt", i)
}
if notes[i].CreatedAt.IsZero() {
t.Fatalf("position %d: zeitstempel fehlt", i)
}
}
}
func TestAddNote_UnknownCaseIsRejected(t *testing.T) {
s := newTestService(t)
ctx := context.Background()
if _, err := s.AddNote(ctx, "00000000-0000-0000-0000-000000000000", "alice", "text"); err == nil {
t.Fatal("erwartet fehler bei unbekannter akte")
}
}