返回 DeepSeek-Reasonix
readiness_test.go
根目录 / internal / evidence / readiness_test.go
1 package evidence
2
3 import "testing"
4
5 func TestHasSuccessfulTodoWriteNilLedger(t *testing.T) {
6 var l *Ledger
7 if l.HasSuccessfulTodoWrite() {
8 t.Fatal("nil ledger must report no todo_write")
9 }
10 }
11
12 func TestHasSuccessfulTodoWriteMatchesOnlySuccessfulTodoWrite(t *testing.T) {
13 cases := []struct {
14 name string
15 receipt Receipt
16 want bool
17 }{
18 {"successful todo_write", Receipt{ToolName: "todo_write", Success: true}, true},
19 {"failed todo_write does not count", Receipt{ToolName: "todo_write", Success: false}, false},
20 {"successful non-todo tool does not count", Receipt{ToolName: "write_file", Success: true, Write: true}, false},
21 }
22 for _, tc := range cases {
23 t.Run(tc.name, func(t *testing.T) {
24 l := NewLedger()
25 l.Record(tc.receipt)
26 if got := l.HasSuccessfulTodoWrite(); got != tc.want {
27 t.Fatalf("HasSuccessfulTodoWrite() = %v, want %v", got, tc.want)
28 }
29 })
30 }
31 }
32
33 func TestHasSuccessfulTodoProgressReceipt(t *testing.T) {
34 cases := []struct {
35 name string
36 receipts []Receipt
37 want bool
38 }{
39 {"nil", nil, false},
40 {"todo only", []Receipt{{ToolName: "todo_write", Success: true}}, false},
41 {"read-only context only", []Receipt{{ToolName: "read_file", Success: true, Read: true}}, false},
42 {"failed execution only", []Receipt{{ToolName: "bash", Success: false}}, false},
43 {"successful command counts", []Receipt{{ToolName: "bash", Success: true}}, true},
44 {"complete_step counts", []Receipt{{ToolName: "complete_step", Success: true, Step: "done"}}, true},
45 {"todo plus read-only context still does not count", []Receipt{{ToolName: "todo_write", Success: true}, {ToolName: "read_file", Success: true, Read: true}}, false},
46 {"todo plus writer counts", []Receipt{{ToolName: "todo_write", Success: true}, {ToolName: "write_file", Success: true, Write: true}}, true},
47 }
48 for _, tc := range cases {
49 t.Run(tc.name, func(t *testing.T) {
50 var l *Ledger
51 if tc.receipts != nil {
52 l = NewLedger()
53 for _, r := range tc.receipts {
54 l.Record(r)
55 }
56 }
57 if got := l.HasSuccessfulTodoProgressReceipt(); got != tc.want {
58 t.Fatalf("HasSuccessfulTodoProgressReceipt() = %v, want %v", got, tc.want)
59 }
60 })
61 }
62 }
63
63 lines GO