返回 DeepSeek-Reasonix
history_slice_navigation_test.go
根目录 / desktop / history_slice_navigation_test.go
1 package main
2
3 import (
4 "fmt"
5 "reflect"
6 "testing"
7
8 "reasonix/internal/provider"
9 )
10
11 func TestColdHistoryPagesRemainReachableInBothDirections(t *testing.T) {
12 a := historySliceTestApp(t)
13 tab := newColdHistoryTab(t, a)
14 dir := tabSessionDir(tab)
15 var messages []provider.Message
16 for i := range 20 {
17 messages = append(messages, historySliceUser(i, fmt.Sprintf("question %d", i)), historySliceAssistant(i, fmt.Sprintf("answer %d", i)))
18 }
19 _, tab.SessionPath = saveHistorySliceSession(t, dir, "directions.jsonl", messages)
20 h, err := a.BeginSessionHistoryReadForTab(tab.ID)
21 if err != nil {
22 t.Fatal(err)
23 }
24 defer a.ReleaseSessionHistoryRead(h.ID)
25 request := HistorySliceRequest{Turns: 2, Entries: 4, Bytes: 1 << 20}
26 newest, err := a.ReadSessionHistorySlice(h.ID, request)
27 if err != nil || newest.Status != "ready" || !newest.Page.HasOlder {
28 t.Fatalf("newest: %+v %v", newest, err)
29 }
30 request.Cursor = newest.Page.NextCursor
31 older, err := a.ReadSessionHistorySlice(h.ID, request)
32 if err != nil || older.Status != "ready" || !older.Page.HasNewer {
33 t.Fatalf("older: %+v %v", older, err)
34 }
35 request.Cursor, request.Newer = older.Page.NewerCursor, true
36 back, err := a.ReadSessionHistorySlice(h.ID, request)
37 if err != nil || back.Status != "ready" {
38 t.Fatalf("return newer: %+v %v", back, err)
39 }
40 if !reflect.DeepEqual(back.Page.Entries, newest.Page.Entries) {
41 t.Fatal("reclaimed newer page cannot be reached exactly")
42 }
43 }
44
45 func TestColdHistoryCursorBindsStorageSourceBeyondDisplayRevision(t *testing.T) {
46 a := historySliceTestApp(t)
47 messages := []provider.Message{historySliceUser(0, "one"), historySliceAssistant(0, "answer"), historySliceUser(1, "two"), historySliceAssistant(1, "answer")}
48 _, one := saveHistorySliceSession(t, t.TempDir(), "same-name.jsonl", messages)
49 _, two := saveHistorySliceSession(t, t.TempDir(), "same-name.jsonl", messages)
50 req := normalizeHistorySliceRequest(HistorySliceRequest{Turns: 1, Entries: 2})
51 page, ready, err := a.pagedColdHistorySlice(t.Context(), "", one, req)
52 if err != nil || !ready || !page.HasOlder {
53 t.Fatalf("first: %+v %v", page, err)
54 }
55 target, ready, err := a.pagedColdHistorySlice(t.Context(), "", two, req)
56 if err != nil || !ready {
57 t.Fatal(err)
58 }
59 cursor, err := decodeHistorySliceCursor(page.NextCursor)
60 if err != nil {
61 t.Fatal(err)
62 }
63 // Matching content/revision never authorizes a cursor from another root.
64 cursor.Digest, cursor.Revision, cursor.RevKnown = target.Digest, target.Revision, target.RevisionKnown
65 req.Cursor = encodeHistorySliceCursor(cursor)
66 result, ready, err := a.pagedColdHistorySlice(t.Context(), "", two, req)
67 if err != nil || !ready || !result.Stale {
68 t.Fatalf("cross-root cursor: %+v %v", result, err)
69 }
70 }
71
71 lines GO