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") } }