test: 调整 archive 流程测试,新增 finish 命令测试

This commit is contained in:
2026-06-10 17:31:35 +08:00
parent a75652c595
commit 4d206f39cc
2 changed files with 65 additions and 13 deletions

View File

@@ -64,21 +64,12 @@ describe("完整 SDD 流程", () => {
expect(buildPrompt2).toContain("已完成");
const archivePrompt = await assembleArchivePrompt(config, TMP_DIR, changeName);
expect(archivePrompt).toContain("归档");
const today = new Date().toISOString().slice(0, 10);
const src = getChangeDir(TMP_DIR, changeName);
const dest = join(getArchiveDir(TMP_DIR), `${today}-${changeName}`);
await mkdir(join(TMP_DIR, ".rune", "archive"), { recursive: true });
await rename(src, dest);
expect(existsSync(dest)).toBe(true);
expect(existsSync(src)).toBe(false);
const archives = await scanArchives(TMP_DIR);
expect(archives).toContain(`${today}-${changeName}`);
expect(archivePrompt).toContain("归档阶段");
expect(archivePrompt).toContain("user-auth");
expect(archivePrompt).toContain("finish");
const postArchiveChanges = await scanChanges(TMP_DIR, config);
expect(postArchiveChanges).toHaveLength(0);
expect(postArchiveChanges).toHaveLength(1);
});
it("多变更并行", async () => {
@@ -220,3 +211,56 @@ describe("archive 校验", () => {
expect(prompt).not.toContain("警告");
});
});
describe("finish 命令", () => {
it("将变更目录移动到 archive", async () => {
await runInit(TMP_DIR, ["opencode"]);
const config = await loadConfig(TMP_DIR);
const changeName = "finish-test";
await mkdir(getChangeDir(TMP_DIR, changeName), { recursive: true });
await writeFile(join(getChangeDir(TMP_DIR, changeName), "design.md"), "# 设计");
await writeFile(join(getChangeDir(TMP_DIR, changeName), "task.md"), "- [x] 全部完成");
const today = new Date().toISOString().slice(0, 10);
const src = getChangeDir(TMP_DIR, changeName);
const dest = join(getArchiveDir(TMP_DIR), `${today}-${changeName}`);
await mkdir(getArchiveDir(TMP_DIR), { recursive: true });
await rename(src, dest);
expect(existsSync(dest)).toBe(true);
expect(existsSync(src)).toBe(false);
const archives = await scanArchives(TMP_DIR);
expect(archives).toContain(`${today}-${changeName}`);
const changes = await scanChanges(TMP_DIR, config);
expect(changes).toHaveLength(0);
});
it("目标路径已存在时抛出错误", async () => {
await runInit(TMP_DIR, ["opencode"]);
const changeName = "dup-test";
await mkdir(getChangeDir(TMP_DIR, changeName), { recursive: true });
await writeFile(join(getChangeDir(TMP_DIR, changeName), "design.md"), "# 设计");
const today = new Date().toISOString().slice(0, 10);
const dest = join(getArchiveDir(TMP_DIR), `${today}-${changeName}`);
await mkdir(dest, { recursive: true });
await writeFile(join(dest, "existing.md"), "# 已有内容");
await expect(rename(getChangeDir(TMP_DIR, changeName), dest)).rejects.toThrow();
});
it("变更目录不存在时抛出错误", async () => {
await runInit(TMP_DIR, ["opencode"]);
await expect(
rename(
getChangeDir(TMP_DIR, "nonexistent"),
join(getArchiveDir(TMP_DIR), "2024-01-01-nonexistent"),
),
).rejects.toThrow();
});
});