返回 DeepSeek-Reasonix
history_outline_test.go
根目录 / internal / serve / history_outline_test.go
1 package serve
2
3 import (
4 "encoding/json"
5 "fmt"
6 "net/http"
7 "reasonix/internal/session"
8 "testing"
9 )
10
11 func TestHistoryOutlineHTTPIdentityAndFixedWindow(t *testing.T) {
12 server, _ := newWindowTestServer(t)
13 var window session.HistoryWindowPage
14 getWindow(t, server, "anchor=newest&limit=1", &window)
15 response, err := http.Get(server.URL + "/session-history/outline?sessionId=canonical&startTurn=1&limit=2")
16 if err != nil {
17 t.Fatal(err)
18 }
19 defer response.Body.Close()
20 var page session.HistoryOutlinePage
21 if err := json.NewDecoder(response.Body).Decode(&page); err != nil || response.StatusCode != http.StatusOK || page.Status != "ready" || page.TotalTurns != 8 || len(page.Entries) != 2 || page.Entries[0].MessageID != "m1" {
22 t.Fatalf("outline: %+v %v", page, err)
23 }
24 getWindow(t, server, fmt.Sprintf("anchor=message&messageId=m1&direction=newer&limit=1&generation=%s&snapshotSequence=%d", page.Generation, page.SnapshotSequence), &window)
25 if window.Status != "ready" || window.SnapshotSequence != page.SnapshotSequence || window.Messages[0].MessageID != "m1" {
26 t.Fatalf("window: %+v", window)
27 }
28 getWindow(t, server, "anchor=message&messageId=m1&generation=wrong", &window)
29 if window.Status != "stale_cursor" {
30 t.Fatalf("lost generation: %+v", window)
31 }
32 for _, query := range []string{"sessionId=other", "sessionId=canonical&limit=bad", "sessionId=canonical&snapshotSequence=-1"} {
33 response, err := http.Get(server.URL + "/session-history/outline?" + query)
34 if err != nil {
35 t.Fatal(err)
36 }
37 response.Body.Close()
38 if response.StatusCode == http.StatusOK {
39 t.Fatalf("accepted invalid request: %s", query)
40 }
41 }
42 }
43
43 lines GO