test.build/core/converters/view.converter.test.ts

test.build/core/converters/view.converter.test.ts is a file in Codebase Testing. 44 lines of code and 0 definitions.

import { type Exemplar, createGovlabContext } from "@govlab/context";
import { describe, expect, it } from "vitest";
import {
    distinctsOf,
    exemplarOf,
    groupBy,
    layerRef,
    orNull,
} from "@banes-lab/build-scripts/core/converters/view.converter.ts";
import { createResolver } from "@banes-lab/build-scripts/core/resolvers/ontology.resolver.ts";
import { createReverseIndex } from "@banes-lab/build-scripts/core/converters/ontology.index.converter.ts";
import { forceNames } from "@banes-lab/build-scripts/core/converters/layer.converter.ts";

const context = createGovlabContext();
const resolve = createResolver(context);
const sources = { context, forces: forceNames(context), index: createReverseIndex(context, resolve), resolve };

describe("the view helpers", () => {
    it("turns an empty or missing text into null and keeps any other", () => {
        expect(orNull()).toBeNull();
        expect(orNull("")).toBeNull();
        expect(orNull("held")).toBe("held");
    });

    it("copies an exemplar and answers null for a record without one", () => {
        const exemplar: Exemplar = { after: "b", before: "a", lang: "flow", medium: "composite" };
        expect(exemplarOf()).toBeNull();
        expect(exemplarOf(exemplar)).toStrictEqual(exemplar);
        expect(exemplarOf(exemplar)).not.toBe(exemplar);
    });

    it("groups items by key in first-seen order", () => {
        expect(groupBy(["ab", "b", "ac"], (item) => item.charAt(0))).toStrictEqual([
            ["a", ["ab", "ac"]],
            ["b", ["b"]],
        ]);
    });

    it("places a principle in its layer and answers null for an id no layer holds", () => {
        expect(layerRef(sources, "stated-invariant")?.ref?.startsWith("layer:")).toBe(true);
        expect(layerRef(sources, "no-such-record")).toBeNull();
    });

    it("resolves each distinct declaration through the resolver it is given and keeps its reason", () => {
        const found = distinctsOf([{ id: "architecture:determinism", reason: "one differs" }], resolve.target);
        expect(found).toStrictEqual([{ reason: "one differs", record: resolve.target("architecture:determinism") }]);
        expect(found[0]?.record.ref).toBe("architecture:determinism");
        expect(distinctsOf(undefined, resolve.target)).toStrictEqual([]);
    });
});