31 lines
1.4 KiB
TypeScript
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");
|
|
});
|