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

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

import { describe, expect, it } from "vitest";
import { placedOf, placementsOf } from "@banes-lab/build-scripts/core/converters/location.converter.ts";
import type { Identity } from "@banes-lab/build-scripts/types/catalog.types.ts";

const SITE = "https://example.test";

const identity = function identity(ref: string, title: string): Identity {
    return {
        address: { json: `/json/${ref}`, markdown: `/${ref}.md` },
        href: null,
        kind: "record",
        ref,
        summary: null,
        title,
    };
};

const PARENT = identity("api:records/x", "Records");
const FIRST = identity("x:a", "A");
const SECOND = identity("x:b", "B");
const THIRD = identity("x:c", "C");

describe("placementsOf", () => {
    it("gives each member its index and the members listed before and after it", () => {
        const placements = placementsOf(
            [
                {
                    data: { ref: PARENT.ref, title: PARENT.title },
                    identity: PARENT,
                    refs: ["x:a", "x:missing", "x:b", "x:c"],
                },
            ],
            [FIRST, SECOND, THIRD],
            SITE,
        );
        expect(placements.get("x:a")).toStrictEqual({
            siblings: {
                next: { href: null, json: `${SITE}/json/x:b`, label: "B", markdown: `${SITE}/x:b.md`, ref: "x:b" },
                previous: null,
            },
            up: {
                href: null,
                json: `${SITE}/json/api:records/x`,
                label: "Records",
                markdown: `${SITE}/api:records/x.md`,
                ref: "api:records/x",
            },
        });
        expect(placements.get("x:b")?.siblings.previous?.ref).toBe("x:a");
        expect(placements.get("x:c")?.siblings.next).toBeNull();
        expect(placements.has("x:missing")).toBe(false);
    });

    it("keeps the first index that lists a member", () => {
        const other = identity("api:facets/x", "Facet");
        const placements = placementsOf(
            [
                { data: { ref: PARENT.ref, title: PARENT.title }, identity: PARENT, refs: ["x:a"] },
                { data: { ref: other.ref, title: other.title }, identity: other, refs: ["x:a"] },
            ],
            [FIRST],
            SITE,
        );
        expect(placements.get("x:a")?.up.ref).toBe("api:records/x");
    });
});

describe("placedOf", () => {
    it("writes an absent placement as null fields", () => {
        expect(placedOf(null)).toStrictEqual({ siblings: null, up: null });
    });
});