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