test.govlab/docs/core/validators/metadata.validator.test.ts

test.govlab/docs/core/validators/metadata.validator.test.ts is a file in Codebase Testing. 35 lines of code and 0 definitions.

import { describe, expect, it } from "vitest";
import { frontmatterSchema } from "@govlab/docs/core/validators/metadata.validator.ts";

const SCHEMA = {
    fields: {
        draft: { kind: "boolean" as const },
        name: { kind: "kebab" as const },
        order: { kind: "integer" as const },
        status: { enum: ["current", "planned"] },
        validates: { items: ["paths", "rules"] },
    },
    required: ["name", "status"],
};

const codesOf = function codesOf(frontmatter: string): string[] {
    return frontmatterSchema(`---\n${frontmatter}\n---\n# T\n`, SCHEMA).map(
        (defect) => `${defect.field}:${defect.code}`,
    );
};

describe("frontmatterSchema", () => {
    it("passes a conforming header", () => {
        expect(codesOf("name: a-b\nstatus: current\norder: 3\ndraft: true\nvalidates: [paths]")).toStrictEqual([]);
    });

    it("reports a missing field, an off-enum value, a wrong type and an unknown list entry", () => {
        expect(codesOf("name: A_b\nstatus: old\norder: x\ndraft: maybe\nvalidates: [odd]")).toStrictEqual([
            "name:invalid-type",
            "status:invalid-enum",
            "order:invalid-type",
            "draft:invalid-type",
            "validates:invalid-enum",
        ]);
        expect(codesOf("status: current\nvalidates: paths")).toStrictEqual([
            "name:missing-required",
            "validates:invalid-type",
        ]);
    });
});