返回 DeepSeek-Reasonix
ops_pause_test.go
根目录 / internal / sessioninbox / ops_pause_test.go
1 package sessioninbox
2
3 import (
4 "path/filepath"
5 "testing"
6 )
7
8 func TestPauseIfPendingLeavesEmptyInboxUnpaused(t *testing.T) {
9 s, err := Open(filepath.Join(t.TempDir(), "s.jsonl"), Limits{})
10 if err != nil {
11 t.Fatal(err)
12 }
13 defer s.Close()
14 if err := s.PauseIfPending(); err != nil {
15 t.Fatal(err)
16 }
17 if snap := s.Snapshot(); snap.Paused {
18 t.Fatalf("empty inbox paused during internal rebind: %+v", snap)
19 }
20 }
21
22 func TestPauseIfPendingPausesQueuedWork(t *testing.T) {
23 s, err := Open(filepath.Join(t.TempDir(), "s.jsonl"), Limits{})
24 if err != nil {
25 t.Fatal(err)
26 }
27 defer s.Close()
28 if _, err := s.Enqueue(EnqueueRequest{Envelope: PromptEnvelope{SubmitText: "work"}}); err != nil {
29 t.Fatal(err)
30 }
31 if err := s.PauseIfPending(); err != nil {
32 t.Fatal(err)
33 }
34 if snap := s.Snapshot(); !snap.Paused || len(snap.Items) != 1 {
35 t.Fatalf("queued work was not preserved paused: %+v", snap)
36 }
37 }
38
39 func TestPauseIfPendingKeepsAlreadyPausedInbox(t *testing.T) {
40 s, err := Open(filepath.Join(t.TempDir(), "s.jsonl"), Limits{})
41 if err != nil {
42 t.Fatal(err)
43 }
44 defer s.Close()
45 if err := s.SetPaused(true); err != nil {
46 t.Fatal(err)
47 }
48 if err := s.PauseIfPending(); err != nil {
49 t.Fatal(err)
50 }
51 if snap := s.Snapshot(); !snap.Paused {
52 t.Fatal("explicit pause was cleared")
53 }
54 }
55
56 func TestDeleteLastItemClearsLeftoverPause(t *testing.T) {
57 s, err := Open(filepath.Join(t.TempDir(), "s.jsonl"), Limits{})
58 if err != nil {
59 t.Fatal(err)
60 }
61 defer s.Close()
62 rec, err := s.Enqueue(EnqueueRequest{Envelope: PromptEnvelope{SubmitText: "only"}})
63 if err != nil {
64 t.Fatal(err)
65 }
66 if err := s.SetPaused(true); err != nil {
67 t.Fatal(err)
68 }
69 if err := s.SetState(rec.ItemID, StateUncertain, "in-flight owner is no longer active"); err != nil {
70 t.Fatal(err)
71 }
72 if err := s.DeleteItem(rec.ItemID); err != nil {
73 t.Fatal(err)
74 }
75 if snap := s.Snapshot(); snap.Paused || snap.Recovered || len(snap.Items) != 0 {
76 t.Fatalf("deleting the last item left a paused empty inbox: %+v", snap)
77 }
78 }
79
80 func TestDiscardLastPendingItemClearsLeftoverPause(t *testing.T) {
81 s, err := Open(filepath.Join(t.TempDir(), "s.jsonl"), Limits{})
82 if err != nil {
83 t.Fatal(err)
84 }
85 defer s.Close()
86 rec, err := s.Enqueue(EnqueueRequest{Envelope: PromptEnvelope{SubmitText: "only"}})
87 if err != nil {
88 t.Fatal(err)
89 }
90 if err := s.SetPaused(true); err != nil {
91 t.Fatal(err)
92 }
93 if err := s.DiscardPendingItems([]string{rec.ItemID}); err != nil {
94 t.Fatal(err)
95 }
96 if snap := s.Snapshot(); snap.Paused || snap.Recovered || len(snap.Items) != 0 {
97 t.Fatalf("discarding the last pending item left a paused empty inbox: %+v", snap)
98 }
99 }
100
100 lines GO