test.govlab/patterns/core/classifiers/schema.classifier.test.ts

test.govlab/patterns/core/classifiers/schema.classifier.test.ts is a file in Codebase Testing. 36 lines of code and 0 definitions.

import {
    DataLoadError,
    isBlank,
    kindOf,
    primitiveOf,
    resolvePrimitive,
} from "@govlab/patterns/core/classifiers/schema.classifier.ts";
import { describe, expect, it } from "vitest";

const FLOAT = 1.5;
const BOOLEAN_VALUE = true;

describe("the schema classifier", () => {
    it("kindOf tells lists, lists of objects, objects and scalars apart", () => {
        expect(kindOf([1])).toBe("list");
        expect(kindOf([{ a: 1 }])).toBe("list-of-objects");
        expect(kindOf({ a: 1 })).toBe("object");
        expect(kindOf("x")).toBe("scalar");
        expect(() => kindOf(() => 1)).toThrow(DataLoadError);
    });

    it("primitiveOf reads a float hint and a fractional number as float", () => {
        expect(primitiveOf(1, true)).toBe("float");
        expect(primitiveOf(FLOAT, false)).toBe("float");
        expect(primitiveOf(1, false)).toBe("integer");
        expect(primitiveOf(BOOLEAN_VALUE, false)).toBe("boolean");
    });

    it("resolvePrimitive widens integer and float to float and refuses a real mix", () => {
        expect(resolvePrimitive("n", new Set(["integer", "float"]))).toBe("float");
        expect(resolvePrimitive("s", new Set(["string"]))).toBe("string");
        expect(() => resolvePrimitive("m", new Set(["string", "boolean"]))).toThrow(DataLoadError);
    });

    it("isBlank treats null and undefined as absent", () => {
        expect(isBlank(null)).toBe(true);
        const record: Record<string, unknown> = {};
        expect(isBlank(record["missing"])).toBe(true);
        expect(isBlank(0)).toBe(false);
    });
});