fable-agent/src/fable5/autowiki.test.ts

42 lines
1.4 KiB
TypeScript

import * as fs from "node:fs";
import * as os from "node:os";
import * as path from "node:path";
import { afterEach, describe, expect, it } from "vitest";
import { generateAutoWiki, surveyFiles } from "./autowiki.js";
const roots: string[] = [];
afterEach(() => {
for (const root of roots.splice(0)) fs.rmSync(root, { recursive: true, force: true });
});
function tmpRoot(): string {
const root = fs.mkdtempSync(path.join(os.tmpdir(), "fable-autowiki-"));
roots.push(root);
return root;
}
describe("autowiki", () => {
it("surveys source files without generated dirs", () => {
const root = tmpRoot();
fs.writeFileSync(path.join(root, "README.md"), "# Demo");
fs.mkdirSync(path.join(root, "dist"));
fs.writeFileSync(path.join(root, "dist", "skip.js"), "bad");
expect(surveyFiles(root)).toEqual(["README.md"]);
});
it("generates index and architecture pages", () => {
const root = tmpRoot();
fs.writeFileSync(path.join(root, "README.md"), "# Demo");
fs.mkdirSync(path.join(root, "src"));
fs.writeFileSync(path.join(root, "src", "index.ts"), "export {}");
const receipt = generateAutoWiki({ repo: root, maxFiles: 10 });
expect(receipt.filesSurveyed).toBe(2);
expect(receipt.pages.map((p) => path.basename(p))).toEqual(["index.md", "architecture.md"]);
expect(fs.readFileSync(path.join(root, ".fable", "wiki", "index.md"), "utf-8")).toContain("Treat source files as evidence");
});
});