test.build/core/converters/index.page.converter.test.ts
test.build/core/converters/index.page.converter.test.ts is a file in Codebase Testing. 44 lines of code and 0 definitions.
import { DISCOVERY, METHOD, SITE, entry } from "./index.fixture.ts";
import { describe, expect, it } from "vitest";
import { pageIndexPlans, tabIndexPlans } from "@banes-lab/build-scripts/core/converters/index.page.converter.ts";
import { indexLeaves } from "@banes-lab/build-scripts/core/converters/index.converter.ts";
import { sectionPlans } from "@banes-lab/build-scripts/core/converters/section.converter.ts";
describe("tabIndexPlans and pageIndexPlans", () => {
it("lists a tab's sections under the tab and the tabs under a tabbed page", () => {
const plans = sectionPlans(DISCOVERY, () => null);
const entries = new Map([
["chapter:/method#loop", entry("chapter:/method#loop", "loop")],
["chapter:/method/build#gate", entry("chapter:/method/build#gate", "gate")],
["api:/method/start", entry("api:/method/start", "start")],
["api:/method/build", entry("api:/method/build", "build")],
]);
const tabs = indexLeaves(tabIndexPlans(DISCOVERY, plans), entries, SITE);
expect(tabs.map((leaf) => leaf.identity.address.json)).toStrictEqual([
"/json/api/pages/method/start",
"/json/api/pages/method/build",
]);
expect(tabs[1]?.data).toMatchObject({
entries: [{ ref: "chapter:/method/build#gate" }],
title: "Method · Build",
});
const [page] = indexLeaves(pageIndexPlans(DISCOVERY, plans), entries, SITE);
expect(page?.data).toMatchObject({
entries: [{ ref: "api:/method/start" }, { ref: "api:/method/build" }],
tabbed: true,
});
expect(page?.markdown).toContain(`Page as Markdown: ${SITE}/method.md`);
});
it("lists every other page under the home page, and refuses an index that lists nothing", () => {
const home = { ...METHOD, content: {}, id: "home", label: "Home", page: "home", path: "/" };
const discovery = { ...DISCOVERY, pages: [home, METHOD], routes: [home, ...DISCOVERY.routes] };
const plans = pageIndexPlans(
discovery,
sectionPlans(discovery, () => null),
);
expect(plans.find((plan) => plan.identity.ref === "api:/home")?.refs).toStrictEqual(["api:/method"]);
const homePlan = plans.filter((plan) => plan.identity.ref === "api:/home");
expect(() => indexLeaves(homePlan, new Map(), SITE)).toThrow("api:/home");
const listed = indexLeaves(homePlan, new Map([["api:/method", entry("api:/method", "method")]]), SITE);
expect(listed[0]?.data).toMatchObject({ entries: [{ ref: "api:/method" }] });
});
});