Files
reverse-engineering-anything/tests/boundary/cli/markdownNestedFacts.test.ts
T

113 lines
4.0 KiB
TypeScript

import { join } from "node:path";
import { Writable } from "node:stream";
import { Cli } from "incur";
import { expect, it } from "vitest";
import {
parseCliOutputArguments,
renderCliDocument,
} from "../../../src/cliOutput.js";
import {
createCliResultOutput,
streamCliCommandResults,
} from "../../../src/cli/cliResultOutput.js";
import { writeOrderedZip } from "../../fixtures/artifactEntryOrder.js";
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
import { workspaceCliTest } from "../../support/cli/workspaceCliFixture.js";
it("keeps source keys literal in Markdown headings through CLI result output", async () => {
const value = Object.freeze({
"<schema>&amp;": 0,
"[link](target)": Object.freeze([Object.freeze({ retained: true })]),
"*bundle*": Object.freeze({ leaf: "seen" }),
_under_: Object.freeze({ leaf: "literal underscores" }),
plain_field: 0,
"parent\\": Object.freeze({
"`code`\r\n\r## fake": Object.freeze({ leaf: "retained" }),
}),
plain: Object.freeze({ nested: Object.freeze({ value: false }) }),
});
const original = JSON.stringify(value);
const cli = Cli.create("heading-facts-test", { sync: false });
cli.command("facts", { run: () => value });
const args = ["facts", "--format", "md"];
const chunks: Buffer[] = [];
const output = createCliResultOutput(
parseCliOutputArguments(args),
new Writable({
write(chunk: Buffer, _encoding, callback) {
chunks.push(chunk);
callback();
},
}),
);
if (output === undefined) throw new Error("Missing CLI result output owner");
streamCliCommandResults(cli, output);
let fallback = "";
await cli.serve(args, {
exit: (code) => expect(code).toBe(0),
stdout: (text) => {
if (!output.handled) fallback += text;
},
});
expect(fallback).toBe("");
expect(output.handled).toBe(true);
expect(output.failed).toBe(false);
const markdown = Buffer.concat(chunks).toString("utf8");
expect(markdown.match(/^## .+$/gmu)).toEqual([
"## &lt;schema&gt;&amp;amp;",
"## \\[link\\](target)",
"## \\*bundle\\*",
"## \\_under\\_",
"## plain_field",
"## parent\\\\.\\`code\\`<br><br>\\#\\# fake",
"## plain.nested",
]);
expect(markdown).toContain("| retained |\n|----------|\n| true |");
expect(markdown).toContain("| leaf | seen |");
expect(markdown).toContain("| value | false |");
expect(JSON.parse(renderCliDocument(value, "json", false))).toEqual(value);
expect(JSON.stringify(value)).toBe(original);
});
it("retains nested facts in standalone Markdown table cells and mixed arrays", () => {
const value = [
{
details: { path: "alpha.txt" },
entries: [{ path: "sub/beta.txt" }],
mixed: ["selected", { nested: "caller|value" }],
},
];
const markdown = renderCliDocument(value, "md", false);
expect(markdown).toContain('{"path":"alpha.txt"}');
expect(markdown).toContain('\\[{"path":"sub/beta.txt"}\\]');
expect(markdown).toContain("caller\\|value");
expect(markdown).not.toContain("[object Object]");
expect(
renderCliDocument({ mixed: [1, { path: "retained" }] }, "md", false),
).toContain('{"path":"retained"}');
expect(JSON.parse(renderCliDocument(value, "json", false))).toEqual(value);
});
workspaceCliTest(
"preserves archive inventory facts through public Markdown and JSON output",
async ({ cli }) => {
const root = await createTestTempDirectory("rea-markdown-archive-facts-");
const archive = join(root, "fixture.zip");
await writeOrderedZip(archive, ["alpha.txt", "sub/beta.txt"]);
const markdown = await cli.run({
arguments: ["inspect-artifact", archive, "--format", "md"],
});
const json = await cli.run({
arguments: ["inspect-artifact", archive, "--json"],
});
expect(markdown.exitCode).toBe(0);
expect(json.exitCode).toBe(0);
for (const entry of ["alpha.txt", "sub/beta.txt"]) {
expect(markdown.stdout).toContain(entry);
expect(json.stdout).toContain(entry);
}
expect(markdown.stdout).not.toContain("[object Object]");
},
);