test.govlab/context/core/resolvers/template.resolver.test.ts

test.govlab/context/core/resolvers/template.resolver.test.ts is a file in Codebase Testing. 38 lines of code and 0 definitions.

import { resolvePagTemplate, slotIsDangling } from "@govlab/context/core/resolvers/template.resolver.ts";
import assert from "node:assert/strict";
import { test } from "vitest";

const slot = (
    name: string,
    extra: object = {},
): { description: string; kind: string; name: string; required: boolean } => ({
    description: name,
    kind: "text",
    name,
    required: true,
    ...extra,
});

const TEMPLATE = {
    body: "THIS {kind} runs {mode}",
    constraints: [],
    slots: [slot("kind"), slot("mode", { enum: ["fast", "slow"] }), slot("absent", { required: false })],
    title: "t",
    type: "KNOWN",
};

test("resolvePagTemplate fills every supplied slot and reports the ones left open", () => {
    const resolved = resolvePagTemplate(TEMPLATE, { kind: "TASK", mode: "fast" });
    assert.equal(resolved.text, "THIS TASK runs fast");
    assert.deepEqual(resolved.unresolved, []);
    assert.deepEqual(resolved.violations, []);
    const open = resolvePagTemplate(TEMPLATE, { mode: "fast" });
    assert.deepEqual(open.unresolved, ["kind"]);
    assert.equal(open.violations.length, 1);
});

test("resolvePagTemplate reports a value outside a slot's closed set", () => {
    assert.equal(resolvePagTemplate(TEMPLATE, { kind: "TASK", mode: "sideways" }).violations.length, 1);
});

test("slotIsDangling holds for a slot the body never carries", () => {
    const [kind, , absent] = TEMPLATE.slots;
    assert.ok(kind && absent);
    assert.equal(slotIsDangling(TEMPLATE, kind), false);
    assert.equal(slotIsDangling(TEMPLATE, absent), true);
});