Files
ainovel-clients/app/run_test.go
2026-03-11 19:03:33 +08:00

125 lines
3.1 KiB
Go

package app
import (
"encoding/json"
"testing"
"github.com/voocel/agentcore"
"github.com/voocel/ainovel-cli/domain"
"github.com/voocel/ainovel-cli/state"
)
func TestFinalizeSteerIfIdleClearsPendingState(t *testing.T) {
dir := t.TempDir()
store := state.NewStore(dir)
if err := store.InitProgress("test", 3); err != nil {
t.Fatalf("InitProgress: %v", err)
}
if err := store.SetFlow(domain.FlowSteering); err != nil {
t.Fatalf("SetFlow: %v", err)
}
if err := store.SetPendingSteer("主角改成女性"); err != nil {
t.Fatalf("SetPendingSteer: %v", err)
}
finalizeSteerIfIdle(store)
progress, err := store.LoadProgress()
if err != nil {
t.Fatalf("LoadProgress: %v", err)
}
if progress.Flow != domain.FlowWriting {
t.Fatalf("expected flow writing, got %s", progress.Flow)
}
runMeta, err := store.LoadRunMeta()
if err != nil {
t.Fatalf("LoadRunMeta: %v", err)
}
if runMeta.PendingSteer != "" {
t.Fatalf("expected pending steer cleared, got %q", runMeta.PendingSteer)
}
}
func TestFinalizeSteerIfIdleKeepsActiveFlow(t *testing.T) {
dir := t.TempDir()
store := state.NewStore(dir)
if err := store.InitProgress("test", 3); err != nil {
t.Fatalf("InitProgress: %v", err)
}
if err := store.SetFlow(domain.FlowRewriting); err != nil {
t.Fatalf("SetFlow: %v", err)
}
if err := store.SetPendingSteer("加入反转"); err != nil {
t.Fatalf("SetPendingSteer: %v", err)
}
finalizeSteerIfIdle(store)
progress, err := store.LoadProgress()
if err != nil {
t.Fatalf("LoadProgress: %v", err)
}
if progress.Flow != domain.FlowRewriting {
t.Fatalf("expected flow rewriting, got %s", progress.Flow)
}
runMeta, err := store.LoadRunMeta()
if err != nil {
t.Fatalf("LoadRunMeta: %v", err)
}
if runMeta.PendingSteer != "加入反转" {
t.Fatalf("expected pending steer preserved, got %q", runMeta.PendingSteer)
}
}
func TestParseProgressSummaryIgnoresThinkingUpdate(t *testing.T) {
result, err := json.Marshal(map[string]any{
"agent": "architect",
"thinking": "好的,我已经获得了模板。",
})
if err != nil {
t.Fatalf("Marshal: %v", err)
}
summary := parseProgressSummary(agentcore.Event{Result: result})
if summary != "" {
t.Fatalf("expected thinking update to be ignored, got %q", summary)
}
}
func TestParseProgressSummaryKeepsToolProgress(t *testing.T) {
result, err := json.Marshal(map[string]any{
"agent": "writer",
"tool": "plan_chapter",
})
if err != nil {
t.Fatalf("Marshal: %v", err)
}
summary := parseProgressSummary(agentcore.Event{Result: result})
if summary != "writer → plan_chapter" {
t.Fatalf("unexpected summary: %q", summary)
}
}
func TestCreateModelUsesOpenRouterProvider(t *testing.T) {
model, err := createModel(Config{
Provider: "openrouter",
ModelName: "stepfun/step-3.5-flash:free",
APIKey: "test-key",
BaseURL: "https://openrouter.ai/api/v1",
})
if err != nil {
t.Fatalf("createModel: %v", err)
}
providerModel, ok := model.(interface{ ProviderName() string })
if !ok {
t.Fatalf("model does not expose provider name")
}
if provider := providerModel.ProviderName(); provider != "openrouter" {
t.Fatalf("expected provider openrouter, got %q", provider)
}
}