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

> 35 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-govlab-docs-core-validators-metadata-validator-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/docs/core/validators/metadata.validator.test.ts.txt

Listed in [test.govlab/docs/core/validators](https://banes-lab.com/api/source/testing/test.govlab/docs/core/validators.md), after [test.govlab/docs/core/validators/manifest.validator.test.ts](https://banes-lab.com/source/testing/test.govlab/docs/core/validators/manifest.validator.test.ts.md) and before [test.govlab/docs/core/validators/package.validator.test.ts](https://banes-lab.com/source/testing/test.govlab/docs/core/validators/package.validator.test.ts.md).

## Contained in

- [test.govlab/docs/core/validators](https://banes-lab.com/anatomy/testing/folder-testing-test-govlab-docs-core-validators.md)

## Source

```typescript
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",
        ]);
    });
});
```
