perf: 拆分规划策略
This commit is contained in:
67
tools/novel_context_test.go
Normal file
67
tools/novel_context_test.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/voocel/ainovel-cli/state"
|
||||
)
|
||||
|
||||
func TestContextToolReportsWarningsForCorruptedState(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
store := state.NewStore(dir)
|
||||
if err := store.Init(); err != nil {
|
||||
t.Fatalf("Init: %v", err)
|
||||
}
|
||||
|
||||
if err := os.WriteFile(filepath.Join(dir, "outline.json"), []byte("{invalid"), 0o644); err != nil {
|
||||
t.Fatalf("write outline.json: %v", err)
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(dir, "meta", "progress.json"), []byte("{invalid"), 0o644); err != nil {
|
||||
t.Fatalf("write progress.json: %v", err)
|
||||
}
|
||||
|
||||
tool := NewContextTool(store, References{}, "default")
|
||||
args, err := json.Marshal(map[string]any{"chapter": 2})
|
||||
if err != nil {
|
||||
t.Fatalf("Marshal: %v", err)
|
||||
}
|
||||
|
||||
result, err := tool.Execute(context.Background(), args)
|
||||
if err != nil {
|
||||
t.Fatalf("Execute: %v", err)
|
||||
}
|
||||
|
||||
var payload struct {
|
||||
Warnings []string `json:"_warnings"`
|
||||
Summary string `json:"_loading_summary"`
|
||||
}
|
||||
if err := json.Unmarshal(result, &payload); err != nil {
|
||||
t.Fatalf("Unmarshal: %v", err)
|
||||
}
|
||||
if len(payload.Warnings) == 0 {
|
||||
t.Fatal("expected context warnings for corrupted files")
|
||||
}
|
||||
if !containsWarning(payload.Warnings, "outline") {
|
||||
t.Fatalf("expected outline warning, got %v", payload.Warnings)
|
||||
}
|
||||
if !containsWarning(payload.Warnings, "progress") {
|
||||
t.Fatalf("expected progress warning, got %v", payload.Warnings)
|
||||
}
|
||||
if !strings.Contains(payload.Summary, "告警:") {
|
||||
t.Fatalf("expected loading summary to contain warning count, got %q", payload.Summary)
|
||||
}
|
||||
}
|
||||
|
||||
func containsWarning(warnings []string, key string) bool {
|
||||
for _, warning := range warnings {
|
||||
if strings.Contains(warning, key) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user