init
This commit is contained in:
110
tools/commit_chapter_test.go
Normal file
110
tools/commit_chapter_test.go
Normal file
@@ -0,0 +1,110 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user