111 lines
3.0 KiB
Go
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)
|
|
}
|
|
}
|