diff --git a/tests/integration/flow.test.ts b/tests/integration/flow.test.ts index c77958b..3c8380b 100644 --- a/tests/integration/flow.test.ts +++ b/tests/integration/flow.test.ts @@ -41,10 +41,13 @@ describe("完整 SDD 流程", () => { await writeFile(join(changeDir, "design.md"), "# 用户认证设计\n\n## 背景\n需要用户登录功能"); await writeFile(join(changeDir, "task.md"), "- [ ] 实现登录 API\n- [ ] 编写登录测试"); - const changes = await scanChanges(TMP_DIR); + const changes = await scanChanges(TMP_DIR, config); expect(changes).toHaveLength(1); expect(changes[0].name).toBe("user-auth"); expect(changes[0].taskProgress).toEqual({ completed: 0, total: 2 }); + expect(changes[0].planCompleted).toBe(true); + expect(changes[0].buildUnlocked).toBe(true); + expect(changes[0].documents.length).toBeGreaterThan(0); const buildPrompt = await assembleBuildPrompt(config, TMP_DIR, changeName); expect(buildPrompt).toContain("实现登录 API"); @@ -52,8 +55,10 @@ describe("完整 SDD 流程", () => { await writeFile(join(changeDir, "task.md"), "- [x] 实现登录 API\n- [x] 编写登录测试"); - const updatedChanges = await scanChanges(TMP_DIR); + const updatedChanges = await scanChanges(TMP_DIR, config); expect(updatedChanges[0].taskProgress).toEqual({ completed: 2, total: 2 }); + expect(updatedChanges[0].planCompleted).toBe(true); + expect(updatedChanges[0].buildUnlocked).toBe(true); const buildPrompt2 = await assembleBuildPrompt(config, TMP_DIR, changeName); expect(buildPrompt2).toContain("已完成"); @@ -72,7 +77,7 @@ describe("完整 SDD 流程", () => { const archives = await scanArchives(TMP_DIR); expect(archives).toContain(`${today}-${changeName}`); - const postArchiveChanges = await scanChanges(TMP_DIR); + const postArchiveChanges = await scanChanges(TMP_DIR, config); expect(postArchiveChanges).toHaveLength(0); }); @@ -86,7 +91,7 @@ describe("完整 SDD 流程", () => { await writeFile(join(changeDir, "task.md"), `- [ ] ${name} 任务`); } - const changes = await scanChanges(TMP_DIR); + const changes = await scanChanges(TMP_DIR, config); expect(changes).toHaveLength(2); const authPrompt = await assembleBuildPrompt(config, TMP_DIR, "auth"); @@ -126,4 +131,25 @@ describe("完整 SDD 流程", () => { expect(config.stages.build).toBeDefined(); expect(config.stages.archive).toBeDefined(); }); + + it("scanChanges 返回文档依赖状态", async () => { + await runInit(TMP_DIR, ["opencode"]); + const config = await loadConfig(TMP_DIR); + + const changeDir = getChangeDir(TMP_DIR, "dep-test"); + await mkdir(changeDir, { recursive: true }); + await writeFile(join(changeDir, "design.md"), "# 设计文档"); + + const changes = await scanChanges(TMP_DIR, config); + expect(changes).toHaveLength(1); + + const designDoc = changes[0].documents.find((d) => d.name === "design"); + expect(designDoc).toBeDefined(); + expect(designDoc!.completed).toBe(true); + + const taskDoc = changes[0].documents.find((d) => d.name === "task"); + expect(taskDoc).toBeDefined(); + expect(taskDoc!.completed).toBe(false); + expect(taskDoc!.dependMet).toBe(true); + }); });