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
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
102 lines
2.5 KiB
Go
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")
|
|
}
|
|
}
|