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);
});