test.govlab/docs/core/coordinators/template.coordinator.test.ts
test.govlab/docs/core/coordinators/template.coordinator.test.ts is a file in Codebase Testing. 56 lines of code and 0 definitions.
import { ACTIVITY_VERBS, DOC_CONCERNS } from "@govlab/docs/configuration/constants/concern.constants.ts";
import { afterAll, afterEach, describe, expect, it, vi } from "vitest";
import { existsSync, mkdtempSync, rmSync } from "node:fs";
import { DOC_FORMS } from "@govlab/docs/configuration/constants/form.constants.ts";
import { DOC_VERBS } from "@govlab/docs/configuration/constants/verb.constants.ts";
import { captureOutput } from "./output.fixture.ts";
import { join } from "node:path";
import { runNew } from "@govlab/docs/core/coordinators/template.coordinator.ts";
import { tmpdir } from "node:os";
const root = mkdtempSync(join(tmpdir(), "doc-new-"));
const CONTEXT = {
locationOptions: { rootPrefix: "docs/" },
registries: { concerns: DOC_CONCERNS, forms: DOC_FORMS, owners: ["govlab"] },
root,
userReg: { activityVerbs: ACTIVITY_VERBS, concerns: DOC_CONCERNS, forms: DOC_FORMS, refVerbs: DOC_VERBS },
};
const ARGS = {
concern: "scaling",
form: "guide",
member: "govlab",
name: "",
status: "",
subject: "thing",
summary: "",
};
afterEach(() => {
vi.restoreAllMocks();
});
afterAll(() => {
rmSync(root, { force: true, recursive: true });
});
describe("runNew", () => {
it("scaffolds a directive document at its computed path and refuses to overwrite it", () => {
const output = captureOutput();
runNew(CONTEXT, ARGS);
expect(existsSync(join(root, "docs", "guides", "scale-thing.govlab.guide.md"))).toBe(true);
expect(output.out).toStrictEqual(["✓ docs:new — created docs/guides/scale-thing.govlab.guide.md\n"]);
expect(() => {
runNew(CONTEXT, ARGS);
}).toThrow("already exists");
});
it("refuses an unknown form, a missing subject, a non-activity concern and an unplaceable member", () => {
expect(() => {
runNew(CONTEXT, { ...ARGS, form: "memo" });
}).toThrow("unknown form");
expect(() => {
runNew(CONTEXT, { ...ARGS, subject: "" });
}).toThrow("provide --subject");
expect(() => {
runNew(CONTEXT, { ...ARGS, concern: "quality" });
}).toThrow("must be an activity");
expect(() => {
runNew(CONTEXT, { ...ARGS, member: "ghost", subject: "other" });
}).toThrow("--member");
});
});