init
This commit is contained in:
116
state/progress_test.go
Normal file
116
state/progress_test.go
Normal file
@@ -0,0 +1,116 @@
|
||||
package state
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/voocel/ainovel-cli/domain"
|
||||
)
|
||||
|
||||
func TestSetFlow(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
store := NewStore(dir)
|
||||
_ = store.InitProgress("test", 10)
|
||||
|
||||
if err := store.SetFlow(domain.FlowRewriting); err != nil {
|
||||
t.Fatalf("SetFlow: %v", err)
|
||||
}
|
||||
|
||||
p, _ := store.LoadProgress()
|
||||
if p.Flow != domain.FlowRewriting {
|
||||
t.Errorf("expected FlowRewriting, got %s", p.Flow)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetPendingRewrites(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
store := NewStore(dir)
|
||||
_ = store.InitProgress("test", 10)
|
||||
|
||||
chapters := []int{3, 5, 7}
|
||||
if err := store.SetPendingRewrites(chapters, "角色动机不连贯"); err != nil {
|
||||
t.Fatalf("SetPendingRewrites: %v", err)
|
||||
}
|
||||
|
||||
p, _ := store.LoadProgress()
|
||||
if len(p.PendingRewrites) != 3 {
|
||||
t.Fatalf("expected 3 pending, got %d", len(p.PendingRewrites))
|
||||
}
|
||||
if p.RewriteReason != "角色动机不连贯" {
|
||||
t.Errorf("reason mismatch: %s", p.RewriteReason)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCompleteRewrite(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
store := NewStore(dir)
|
||||
_ = store.InitProgress("test", 10)
|
||||
_ = store.SetPendingRewrites([]int{3, 5, 7}, "测试重写")
|
||||
_ = store.SetFlow(domain.FlowRewriting)
|
||||
|
||||
// 完成第 5 章
|
||||
if err := store.CompleteRewrite(5); err != nil {
|
||||
t.Fatalf("CompleteRewrite(5): %v", err)
|
||||
}
|
||||
p, _ := store.LoadProgress()
|
||||
if len(p.PendingRewrites) != 2 {
|
||||
t.Fatalf("expected 2 pending after removing 5, got %d", len(p.PendingRewrites))
|
||||
}
|
||||
if p.Flow != domain.FlowRewriting {
|
||||
t.Errorf("flow should still be rewriting, got %s", p.Flow)
|
||||
}
|
||||
|
||||
// 完成第 3 章
|
||||
_ = store.CompleteRewrite(3)
|
||||
p, _ = store.LoadProgress()
|
||||
if len(p.PendingRewrites) != 1 {
|
||||
t.Fatalf("expected 1 pending, got %d", len(p.PendingRewrites))
|
||||
}
|
||||
|
||||
// 完成最后一章 → 自动重置 Flow
|
||||
_ = store.CompleteRewrite(7)
|
||||
p, _ = store.LoadProgress()
|
||||
if len(p.PendingRewrites) != 0 {
|
||||
t.Fatalf("expected 0 pending, got %d", len(p.PendingRewrites))
|
||||
}
|
||||
if p.Flow != domain.FlowWriting {
|
||||
t.Errorf("flow should reset to writing, got %s", p.Flow)
|
||||
}
|
||||
if p.RewriteReason != "" {
|
||||
t.Errorf("reason should be cleared, got %s", p.RewriteReason)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCompleteRewrite_NotInQueue(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
store := NewStore(dir)
|
||||
_ = store.InitProgress("test", 10)
|
||||
_ = store.SetPendingRewrites([]int{3, 5}, "测试")
|
||||
|
||||
// 完成不在队列中的章节不应报错
|
||||
if err := store.CompleteRewrite(99); err != nil {
|
||||
t.Fatalf("CompleteRewrite(99): %v", err)
|
||||
}
|
||||
p, _ := store.LoadProgress()
|
||||
if len(p.PendingRewrites) != 2 {
|
||||
t.Errorf("queue should be unchanged, got %d", len(p.PendingRewrites))
|
||||
}
|
||||
}
|
||||
|
||||
func TestClearPendingRewrites(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
store := NewStore(dir)
|
||||
_ = store.InitProgress("test", 10)
|
||||
_ = store.SetPendingRewrites([]int{1, 2, 3}, "测试")
|
||||
_ = store.SetFlow(domain.FlowRewriting)
|
||||
|
||||
if err := store.ClearPendingRewrites(); err != nil {
|
||||
t.Fatalf("ClearPendingRewrites: %v", err)
|
||||
}
|
||||
p, _ := store.LoadProgress()
|
||||
if len(p.PendingRewrites) != 0 {
|
||||
t.Errorf("expected empty, got %d", len(p.PendingRewrites))
|
||||
}
|
||||
if p.Flow != domain.FlowWriting {
|
||||
t.Errorf("flow should be writing, got %s", p.Flow)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user