nub/internal/tool/builtin/todo_test.go
Tom a97013d876 initial commit
- v 0.1.0 siehe CHANGELOG.md
2026-07-25 11:08:01 +02:00

81 lines
2.1 KiB
Go

package builtin
import (
"context"
"encoding/json"
"testing"
)
func TestTodoTool_ReplacesListAndRendersStatus(t *testing.T) {
tt := &TodoTool{}
env := testEnv(t)
in, _ := json.Marshal(map[string]any{
"items": []map[string]string{
{"content": "read file", "status": "completed"},
{"content": "write fix", "status": "in_progress"},
{"content": "run tests", "status": "pending"},
},
})
res, err := tt.Run(context.Background(), in, env)
if err != nil {
t.Fatal(err)
}
if res.IsError {
t.Fatalf("unexpected error: %s", res.ForModel)
}
if !contains(res.ForModel, "[x] read file") {
t.Errorf("expected completed marker, got: %q", res.ForModel)
}
if !contains(res.ForModel, "[~] write fix") {
t.Errorf("expected in_progress marker, got: %q", res.ForModel)
}
if !contains(res.ForModel, "[ ] run tests") {
t.Errorf("expected pending marker, got: %q", res.ForModel)
}
ui, ok := res.ForUI.(TodoResult)
if !ok || len(ui.Items) != 3 {
t.Errorf("ForUI = %+v, want TodoResult with 3 items", res.ForUI)
}
}
func TestTodoTool_RejectsInvalidStatus(t *testing.T) {
tt := &TodoTool{}
env := testEnv(t)
in, _ := json.Marshal(map[string]any{
"items": []map[string]string{{"content": "x", "status": "bogus"}},
})
res, err := tt.Run(context.Background(), in, env)
if err != nil {
t.Fatal(err)
}
if !res.IsError {
t.Fatal("expected error for invalid status")
}
}
func TestTodoTool_SecondCallReplacesFirst(t *testing.T) {
tt := &TodoTool{}
env := testEnv(t)
first, _ := json.Marshal(map[string]any{
"items": []map[string]string{{"content": "a", "status": "pending"}, {"content": "b", "status": "pending"}},
})
if _, err := tt.Run(context.Background(), first, env); err != nil {
t.Fatal(err)
}
second, _ := json.Marshal(map[string]any{
"items": []map[string]string{{"content": "c", "status": "pending"}},
})
res, err := tt.Run(context.Background(), second, env)
if err != nil {
t.Fatal(err)
}
ui := res.ForUI.(TodoResult)
if len(ui.Items) != 1 || ui.Items[0].Content != "c" {
t.Errorf("expected list replaced with single item 'c', got: %+v", ui.Items)
}
}