test.govlab/docs/core/coordinators/document.coordinator.test.ts
test.govlab/docs/core/coordinators/document.coordinator.test.ts is a file in Codebase Testing. 80 lines of code and 0 definitions.
import { afterAll, afterEach, describe, expect, it, vi } from "vitest";
import { mkdtempSync, rmSync } from "node:fs";
import { DocChecks } from "@govlab/docs/core/coordinators/document.coordinator.ts";
import type { ModuleDocs } from "@govlab/docs/types/readme.types.ts";
import type { Spec } from "@govlab/docs/types/document.output.types.ts";
import { captureOutput } from "./output.fixture.ts";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";
const dir = mkdtempSync(join(tmpdir(), "doc-checks-"));
const SPEC_PATH = join(dir, "README.md");
writeVerbatim(
join(dir, "_manifest.json"),
JSON.stringify({ docs: {}, label: "m", maturity: "stable", visibility: {} }),
);
const NO_DOCS = mkdtempSync(join(tmpdir(), "doc-checks-bare-"));
writeVerbatim(join(NO_DOCS, "_manifest.json"), JSON.stringify({ label: "m" }));
const ENGINE: ModuleDocs = {
declaredDocLocation: () => "x.md",
generateReadme: () => "",
governConcepts: () => [],
governDeclaredDocs: () => [],
governManifest: () => [],
governPrinciples: () => [],
ontologyDuplicates: () => ["dup-principle"],
renderDeclaredDoc: () => "",
};
const written: string[] = [];
const SPEC: Spec = {
driftCode: "readme-drift",
label: "m/README.md",
normalize: (text) => text,
path: SPEC_PATH,
produce: () => "body",
};
const checks = new DocChecks({
discoverAll: () => [],
engine: ENGINE,
generatedPrefix: "<!-- gen",
moduleOutputs: async () => {
await Promise.resolve();
return { shared: { charts: null, hasCharts: false, isAggregate: false }, specs: [SPEC] };
},
workspaceMapTarget: async () => {
await Promise.resolve();
return null;
},
writeSpec: (_spec, content) => {
written.push(content);
},
});
afterEach(() => {
vi.restoreAllMocks();
});
afterAll(() => {
rmSync(dir, { force: true, recursive: true });
rmSync(NO_DOCS, { force: true, recursive: true });
});
describe("DocChecks", () => {
it("counts the ontology duplicates found by a full check", async () => {
const output = captureOutput();
expect(await checks.checkModules({ fix: false, only: null, workspaceMapOnly: false })).toBeGreaterThanOrEqual(
1,
);
expect(output.err.join("")).toContain("[duplicate-principle] dup-principle");
});
it("writes one module's specs and refuses a folder without a manifest or docs block", async () => {
const output = captureOutput();
await checks.writeOne(dir);
expect(written).toStrictEqual(["body"]);
expect(output.out).toStrictEqual(["✓ m/README.md\n"]);
await expect(checks.writeOne(join(dir, "absent"))).rejects.toThrow("no _manifest.json");
await expect(checks.writeOne(NO_DOCS)).rejects.toThrow("no docs block");
});
it("generates every selected module and reports the total", async () => {
const output = captureOutput();
await checks.generateAll({ only: null, workspaceMapOnly: false });
expect(output.out).toStrictEqual(["govlab.docs generate: 0 module document(s)\n"]);
});
});