Files
ainovel-clients/tools/commit_chapter_test.go
voocel 27bd85ef90 init
2026-03-07 21:25:55 +08:00

111 lines
3.0 KiB
Go

package tools
import (
"context"
"encoding/json"
"os"
"testing"
"github.com/voocel/ainovel-cli/domain"
"github.com/voocel/ainovel-cli/state"
)
func TestCommitChapterRejectsNonPendingRewrite(t *testing.T) {
dir := t.TempDir()
store := state.NewStore(dir)
if err := store.Init(); err != nil {
t.Fatalf("Init: %v", err)
}
if err := store.InitProgress("test", 10); err != nil {
t.Fatalf("InitProgress: %v", err)
}
if err := store.SetPendingRewrites([]int{2}, "测试重写"); err != nil {
t.Fatalf("SetPendingRewrites: %v", err)
}
if err := store.SetFlow(domain.FlowRewriting); err != nil {
t.Fatalf("SetFlow: %v", err)
}
if err := store.SavePolished(3, "这是错误章节的正文。"); err != nil {
t.Fatalf("SavePolished: %v", err)
}
tool := NewCommitChapterTool(store)
args, err := json.Marshal(map[string]any{
"chapter": 3,
"summary": "错误提交",
"characters": []string{"主角"},
"key_events": []string{"误提交"},
"timeline_events": []any{},
})
if err != nil {
t.Fatalf("Marshal: %v", err)
}
if _, err := tool.Execute(context.Background(), args); err == nil {
t.Fatal("expected commit to be rejected during rewrite flow")
}
if _, err := os.Stat(dir + "/chapters/03.md"); !os.IsNotExist(err) {
t.Fatalf("chapter should not be persisted, stat err=%v", err)
}
progress, err := store.LoadProgress()
if err != nil {
t.Fatalf("LoadProgress: %v", err)
}
if len(progress.CompletedChapters) != 0 {
t.Fatalf("completed chapters should stay empty, got %v", progress.CompletedChapters)
}
if progress.CurrentChapter != 0 {
t.Fatalf("current chapter should not advance, got %d", progress.CurrentChapter)
}
}
func TestCommitChapterAllowsPendingRewrite(t *testing.T) {
dir := t.TempDir()
store := state.NewStore(dir)
if err := store.Init(); err != nil {
t.Fatalf("Init: %v", err)
}
if err := store.InitProgress("test", 10); err != nil {
t.Fatalf("InitProgress: %v", err)
}
if err := store.SetPendingRewrites([]int{2}, "测试重写"); err != nil {
t.Fatalf("SetPendingRewrites: %v", err)
}
if err := store.SetFlow(domain.FlowRewriting); err != nil {
t.Fatalf("SetFlow: %v", err)
}
if err := store.SavePolished(2, "这是正确待重写章节的正文。"); err != nil {
t.Fatalf("SavePolished: %v", err)
}
tool := NewCommitChapterTool(store)
args, err := json.Marshal(map[string]any{
"chapter": 2,
"summary": "正确提交",
"characters": []string{"主角"},
"key_events": []string{"完成重写"},
"timeline_events": []any{},
})
if err != nil {
t.Fatalf("Marshal: %v", err)
}
if _, err := tool.Execute(context.Background(), args); err != nil {
t.Fatalf("Execute: %v", err)
}
if _, err := os.Stat(dir + "/chapters/02.md"); err != nil {
t.Fatalf("chapter should be persisted: %v", err)
}
progress, err := store.LoadProgress()
if err != nil {
t.Fatalf("LoadProgress: %v", err)
}
if len(progress.CompletedChapters) != 1 || progress.CompletedChapters[0] != 2 {
t.Fatalf("unexpected completed chapters: %v", progress.CompletedChapters)
}
}