test: 适配集成测试到新 plan/status API 签名,验证文档依赖状态

This commit is contained in:
2026-06-09 11:00:09 +08:00
parent 4ef172ff2f
commit 5d5d5cdc92

View File

@@ -41,10 +41,13 @@ describe("完整 SDD 流程", () => {
await writeFile(join(changeDir, "design.md"), "# 用户认证设计\n\n## 背景\n需要用户登录功能"); await writeFile(join(changeDir, "design.md"), "# 用户认证设计\n\n## 背景\n需要用户登录功能");
await writeFile(join(changeDir, "task.md"), "- [ ] 实现登录 API\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).toHaveLength(1);
expect(changes[0].name).toBe("user-auth"); expect(changes[0].name).toBe("user-auth");
expect(changes[0].taskProgress).toEqual({ completed: 0, total: 2 }); 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); const buildPrompt = await assembleBuildPrompt(config, TMP_DIR, changeName);
expect(buildPrompt).toContain("实现登录 API"); expect(buildPrompt).toContain("实现登录 API");
@@ -52,8 +55,10 @@ describe("完整 SDD 流程", () => {
await writeFile(join(changeDir, "task.md"), "- [x] 实现登录 API\n- [x] 编写登录测试"); 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].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); const buildPrompt2 = await assembleBuildPrompt(config, TMP_DIR, changeName);
expect(buildPrompt2).toContain("已完成"); expect(buildPrompt2).toContain("已完成");
@@ -72,7 +77,7 @@ describe("完整 SDD 流程", () => {
const archives = await scanArchives(TMP_DIR); const archives = await scanArchives(TMP_DIR);
expect(archives).toContain(`${today}-${changeName}`); expect(archives).toContain(`${today}-${changeName}`);
const postArchiveChanges = await scanChanges(TMP_DIR); const postArchiveChanges = await scanChanges(TMP_DIR, config);
expect(postArchiveChanges).toHaveLength(0); expect(postArchiveChanges).toHaveLength(0);
}); });
@@ -86,7 +91,7 @@ describe("完整 SDD 流程", () => {
await writeFile(join(changeDir, "task.md"), `- [ ] ${name} 任务`); await writeFile(join(changeDir, "task.md"), `- [ ] ${name} 任务`);
} }
const changes = await scanChanges(TMP_DIR); const changes = await scanChanges(TMP_DIR, config);
expect(changes).toHaveLength(2); expect(changes).toHaveLength(2);
const authPrompt = await assembleBuildPrompt(config, TMP_DIR, "auth"); const authPrompt = await assembleBuildPrompt(config, TMP_DIR, "auth");
@@ -126,4 +131,25 @@ describe("完整 SDD 流程", () => {
expect(config.stages.build).toBeDefined(); expect(config.stages.build).toBeDefined();
expect(config.stages.archive).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);
});
}); });