Files
pikasTech-HWLAB/internal/tasktree/mdtodo-import.test.ts
T

31 lines
1.4 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "bun:test";
import { parseMdtodoImport } from "./mdtodo-import.ts";
test("MDTODO import preserves status, flattens deep Rxx tasks, and attaches reports", () => {
const plan = parseMdtodoImport({
sourcePath: "/tmp/demo/MDTODO.md",
markdown: `# Demo\n\n## R1 Root [in_progress]\n\nSee [任务报告](./details/R1_Task_Report.md).\n\n### R1.1 Child [completed]\n\n#### R1.1.1 Deep child [blocked]\n`,
reports: [{ href: "./details/R1_Task_Report.md", sourcePath: "/tmp/demo/details/R1_Task_Report.md", body: "# R1 report\n\nPassed." }]
});
assert.equal(plan.groupName, "Demo");
assert.deepEqual(plan.summary, { taskCount: 1, subtaskCount: 2, reportCount: 1, missingReportCount: 0, flattenedTaskCount: 1, warningCount: 1 });
assert.equal(plan.tasks[0]?.status, "in_progress");
assert.equal(plan.tasks[1]?.status, "completed");
assert.equal(plan.tasks[2]?.status, "blocked");
assert.equal(plan.tasks[2]?.parentSourceId, "R1");
assert.equal(plan.tasks[0]?.reports[0]?.body, "# R1 report\n\nPassed.");
});
test("MDTODO import reports missing linked report files", () => {
const plan = parseMdtodoImport({
sourcePath: "/tmp/demo/MDTODO.md",
markdown: "# Demo\n\n## R1 Root\n\n[Task report](./R1_Task_Report.md)\n",
reports: []
});
assert.equal(plan.summary.missingReportCount, 1);
assert.equal(plan.warnings[0]?.code, "report_file_missing");
});