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"); }); });