test.build/core/coordinators/catalog.index.coordinator.test.ts

test.build/core/coordinators/catalog.index.coordinator.test.ts is a file in Codebase Testing. 69 lines of code and 0 definitions.

import { describe, expect, it } from "vitest";
import { DISCOVERY } from "../converters/site.fixture.ts";
import { closeCatalog } from "@banes-lab/build-scripts/core/coordinators/catalog.index.coordinator.ts";
import { createStore } from "@banes-lab/build-scripts/core/stores/catalog.store.ts";
import { instanceDefects } from "@banes-lab/build-scripts/core/validators/schema.validator.ts";
import { isObjectValue } from "@banes-lab/build-scripts/core/converters/schema.converter.ts";
import { renderDataLeaf } from "@banes-lab/build-scripts/core/formatters/data.formatter.ts";

const fieldOf = function fieldOf(value: unknown, key: string): unknown {
    return typeof value === "object" && value !== null ? Reflect.get(value, key) : undefined;
};

const EMPTY_PLANS = {
    collections: [],
    facetCollections: [],
    facetFields: [],
    facets: [],
    folders: [],
    levels: [],
    pages: [],
    tabs: [],
    trees: [],
};

describe("closeCatalog", () => {
    it("writes a schema for every kind it publishes, then the id manifest and the root that names them", () => {
        const store = createStore(DISCOVERY.site, renderDataLeaf);
        store.add([
            {
                data: { ref: "architecture:dry", title: "DRY" },
                identity: {
                    address: { json: "/json/records/architecture/dry", markdown: null },
                    href: null,
                    kind: "principle",
                    ref: "architecture:dry",
                    summary: null,
                    title: "DRY",
                },
                markdown: null,
            },
        ]);
        const journal = closeCatalog(store, {
            discovery: DISCOVERY,
            indexes: EMPTY_PLANS,
            journal: {
                moved: {},
                refs: { "architecture:gone": { fingerprint: "f", json: "/json/x", kind: "k", title: "T" } },
            },
            queries: [],
        });
        expect(Object.keys(journal.refs)).toContain("architecture:dry");
        expect(journal.moved).toStrictEqual({ "architecture:gone": { json: "/json/x", to: null } });
        const addresses = [...store.files.keys()];
        expect(addresses).toContain("/json/api/moved");
        expect(addresses).toContain("/json/api/schema/record");
        expect(addresses).toContain("/json/api/schema/ids");
        expect(addresses).toContain("/json/api/schema/site");
        expect(addresses).toContain("/json/api/ids");
        expect(addresses).toContain("/api/ids.md");
        expect(addresses).toContain("/api/moved.md");
        expect(addresses).toContain("/api/schema/record.md");
        const root: unknown = JSON.parse(store.files.get("/json/api") ?? "{}");
        const grammar = fieldOf(root, "grammar");
        const record: unknown = Array.isArray(grammar)
            ? grammar.find((row: unknown) => fieldOf(row, "kind") === "record")
            : undefined;
        expect(fieldOf(record, "schema")).toBe("/json/api/schema/record");
        expect(addresses).not.toContain("/json/api/schema/schema");
        const siteSchema: unknown = JSON.parse(store.files.get("/json/api/schema/site") ?? "{}");
        expect(isObjectValue(siteSchema) ? instanceDefects(root, siteSchema, "$") : ["no schema"]).toStrictEqual([]);
    });
});