fix(review round 1): daemon PAT-header auth, job pruning, session-split batches, streaming tars, seed cleanup, ping/pong, byte caps, branch switch, slug --, ctx cancel, Init:true, pagination, latest/before events; web newest-window history + load-older, offline busy gate, staleness guards, memo store, auth probe, scroll key, focus-visible, draft restore, poll dedup; 106+181 tests, coverage 96.2%/95.1%+
This commit is contained in:
@@ -85,6 +85,9 @@ func TestStoreCorruptRows(t *testing.T) {
|
||||
if _, err := store.EventsAfter("s1", 0, 10); err == nil {
|
||||
t.Fatal("EventsAfter with text seq must scan-error")
|
||||
}
|
||||
if _, err := store.EventsLatest("s1", 10); err == nil {
|
||||
t.Fatal("EventsLatest with text seq must scan-error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestStoreAppendEventDefaultPayload(t *testing.T) {
|
||||
@@ -100,3 +103,54 @@ func TestStoreAppendEventDefaultPayload(t *testing.T) {
|
||||
t.Fatalf("payload = %q, want {}", events[0].Payload)
|
||||
}
|
||||
}
|
||||
|
||||
func seedEvents(t *testing.T, store *Store, sessionID string, seqs ...int64) {
|
||||
t.Helper()
|
||||
for _, seq := range seqs {
|
||||
if err := store.AppendEvent(Event{SessionID: sessionID, Seq: seq, TS: seq, Type: evAgentSettled, Payload: []byte(`{}`)}); err != nil {
|
||||
t.Fatalf("append %d: %v", seq, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestStoreEventsLatestAndBefore(t *testing.T) {
|
||||
store := openTestStore(t)
|
||||
seedEvents(t, store, "s1", 1, 2, 3, 4, 5)
|
||||
|
||||
latest, err := store.EventsLatest("s1", 3)
|
||||
if err != nil {
|
||||
t.Fatalf("EventsLatest: %v", err)
|
||||
}
|
||||
if len(latest) != 3 {
|
||||
t.Fatalf("latest = %d events, want 3", len(latest))
|
||||
}
|
||||
for i, want := range []int64{3, 4, 5} {
|
||||
if latest[i].Seq != want {
|
||||
t.Fatalf("latest[%d].Seq = %d, want %d (newest window, ascending)", i, latest[i].Seq, want)
|
||||
}
|
||||
}
|
||||
|
||||
before, err := store.EventsBefore("s1", 4, 2)
|
||||
if err != nil {
|
||||
t.Fatalf("EventsBefore: %v", err)
|
||||
}
|
||||
if len(before) != 2 {
|
||||
t.Fatalf("before = %d events, want 2", len(before))
|
||||
}
|
||||
for i, want := range []int64{2, 3} {
|
||||
if before[i].Seq != want {
|
||||
t.Fatalf("before[%d].Seq = %d, want %d (newest below 4, ascending)", i, before[i].Seq, want)
|
||||
}
|
||||
}
|
||||
|
||||
// windows past the boundaries degrade cleanly
|
||||
if all, _ := store.EventsLatest("s1", 100); len(all) != 5 {
|
||||
t.Fatalf("latest over count = %d, want 5", len(all))
|
||||
}
|
||||
if none, _ := store.EventsBefore("s1", 1, 10); len(none) != 0 {
|
||||
t.Fatalf("before 1 = %d events, want 0", len(none))
|
||||
}
|
||||
if missing, _ := store.EventsLatest("nope", 10); len(missing) != 0 {
|
||||
t.Fatalf("latest unknown session = %d events, want 0", len(missing))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user