daemon: integrate QoL slices 1-5 (model/rename/catalog, history deletes, stats, repo prepare+imageUsed+built) — 95.3% cover green

This commit is contained in:
Raphael Westphal
2026-08-19 10:07:52 +02:00
parent 7287b831e4
commit 698b742cb3
16 changed files with 1506 additions and 36 deletions
+82
View File
@@ -166,3 +166,85 @@ func TestStoreEventsLatestAndBefore(t *testing.T) {
t.Fatalf("latest unknown session = %d events, want 0", len(missing))
}
}
func TestStoreDeleteSessionEvents(t *testing.T) {
store := openTestStore(t)
for _, e := range []Event{
{SessionID: "s1", Seq: 1, TS: 10, Type: evMessageStart, Payload: []byte(`{}`)},
{SessionID: "s1", Seq: 2, TS: 11, Type: evMessageEnd, Payload: []byte(`{}`)},
{SessionID: "s2", Seq: 1, TS: 12, Type: evAgentSettled, Payload: []byte(`{}`)},
} {
if err := store.AppendEvent(e); err != nil {
t.Fatalf("append %s#%d: %v", e.SessionID, e.Seq, err)
}
}
deleted, err := store.DeleteSessionEvents("s1")
if err != nil || deleted != 2 {
t.Fatalf("delete s1 events = %d %v, want 2 nil", deleted, err)
}
if evts, _ := store.EventsAfter("s1", 0, 100); len(evts) != 0 {
t.Fatalf("s1 events after delete = %d, want 0", len(evts))
}
if last, _ := store.LastSeq("s1"); last != 0 {
t.Fatalf("s1 lastSeq after delete = %d, want 0", last)
}
// other sessions untouched
evts, err := store.EventsAfter("s2", 0, 100)
if err != nil || len(evts) != 1 || evts[0].Seq != 1 {
t.Fatalf("s2 events = %v %v, want seq 1 only", evts, err)
}
// unknown / already-cleared session: 0 rows, no error
if deleted, err := store.DeleteSessionEvents("s1"); err != nil || deleted != 0 {
t.Fatalf("second delete = %d %v, want 0 nil", deleted, err)
}
if deleted, err := store.DeleteSessionEvents("ghost"); err != nil || deleted != 0 {
t.Fatalf("unknown session = %d %v, want 0 nil", deleted, err)
}
}
func TestStoreDeleteSession(t *testing.T) {
store := openTestStore(t)
name := "gone"
if err := store.UpsertSession(SessionInfo{ID: "s1", Name: &name, Cwd: "/w", Model: "glm-5.3", Provider: "zai-renaud", StartedAt: 1}); err != nil {
t.Fatalf("upsert s1: %v", err)
}
if err := store.UpsertSession(SessionInfo{ID: "s2", Cwd: "/w2", Model: "glm-5.3", Provider: "zai-renaud", StartedAt: 2}); err != nil {
t.Fatalf("upsert s2: %v", err)
}
if err := store.UpsertContainer("s1", "cid", "group/proj"); err != nil {
t.Fatalf("upsert container: %v", err)
}
for _, e := range []Event{
{SessionID: "s1", Seq: 1, TS: 10, Type: evMessageStart, Payload: []byte(`{}`)},
{SessionID: "s2", Seq: 1, TS: 10, Type: evMessageStart, Payload: []byte(`{}`)},
} {
if err := store.AppendEvent(e); err != nil {
t.Fatalf("append: %v", err)
}
}
if err := store.DeleteSession("s1"); err != nil {
t.Fatalf("delete session: %v", err)
}
rows, err := store.Sessions()
if err != nil || len(rows) != 1 || rows[0].ID != "s2" {
t.Fatalf("sessions after delete = %v %v, want only s2", rows, err)
}
if evts, _ := store.EventsAfter("s1", 0, 100); len(evts) != 0 {
t.Fatalf("s1 events after delete = %d, want 0", len(evts))
}
if _, ok, _ := store.GetContainer("s1"); ok {
t.Fatal("s1 container row should be gone")
}
// s2 untouched
if evts, _ := store.EventsAfter("s2", 0, 100); len(evts) != 1 {
t.Fatalf("s2 events after delete = %d, want 1", len(evts))
}
// idempotent: unknown session deletes cleanly
if err := store.DeleteSession("ghost"); err != nil {
t.Fatalf("delete unknown session: %v", err)
}
}