test.coordination/core/runners/role.runner.test.ts

test.coordination/core/runners/role.runner.test.ts is a file in Codebase Testing. 35 lines of code and 0 definitions.

import {
    CONCERN_MISSING,
    ROLE_EXISTS,
    TEMPLATE_WITHOUT_SECTIONS,
    roleRaised,
} from "coordination-surface/tools/core/strings/role.strings.ts";
import { describe, it } from "vitest";
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
import assert from "node:assert/strict";
import { join } from "node:path";
import { runRole } from "coordination-surface/tools/core/runners/role.runner.ts";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";

const TEMPLATE = ["---", "letter: <LETTER>", "type: ROLE", "---", "# IDENTITY", "## Measured errors"].join("\n");

describe("runRole", () => {
    it("raises a role from the template's fields and sections, and refuses an empty concern, a taken file or a sectionless template", () => {
        const root = mkdtempSync(join(tmpdir(), "coordination-role-"));
        try {
            const absolute = join(root, "review.b.role.txt");
            const template = join(root, "role.template.txt");
            const request = { absolute, concern: "review", letter: "B", template };
            assert.deepEqual(runRole({ ...request, concern: " " }), { code: 2, message: CONCERN_MISSING });
            writeVerbatim(template, "---\n---\n");
            assert.deepEqual(runRole(request), { code: 2, message: TEMPLATE_WITHOUT_SECTIONS });
            writeVerbatim(template, TEMPLATE);
            assert.deepEqual(runRole(request), { code: 0, message: roleRaised("B", "review") });
            const raised = readFileSync(absolute, "utf8").split("\n");
            assert.deepEqual(raised.slice(0, 4), ["---", "letter: B", "type: ROLE", "---"]);
            assert.ok(raised.includes("# IDENTITY"));
            assert.deepEqual(runRole(request), { code: 2, message: ROLE_EXISTS });
        } finally {
            rmSync(root, { force: true, recursive: true });
        }
    });
});