test.build/core/converters/section.segment.converter.test.ts

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

import { describe, expect, it } from "vitest";
import type { Leaf } from "@banes-lab/build-scripts/types/catalog.types.ts";
import { partedSection } from "@banes-lab/build-scripts/core/converters/section.segment.converter.ts";

const SITE = "https://example.test";
const PART_ONE = "/json/method/start/big/_1";

const subsections = Array.from({ length: 700 }, (_unused, at) => ({
    body: "x".repeat(900),
    id: `s${String(at)}`,
    title: `Part ${String(at)}`,
}));

const section = { id: "big", subsections, title: "Big" };

const identity = {
    address: { json: "/json/method/start/big", markdown: "/method/start/big.md" },
    href: "/method#big",
    kind: "section",
    ref: "chapter:/method#big",
    summary: null,
    title: "Big",
};

const heldSubsections = function heldSubsections(part: Leaf): readonly unknown[] {
    const held: unknown = Reflect.get(part.data, "subsections");
    return Array.isArray(held) ? held.map((item: unknown) => item) : [];
};

describe("partedSection", () => {
    it("keeps a section that fits the file budget as one leaf", () => {
        const leaf = { data: { content: { id: "small", title: "Small" } }, identity, markdown: "# Small\n" };
        expect(partedSection(leaf, { id: "small", title: "Small" }, SITE)).toStrictEqual([leaf]);
    });

    it("moves the subsections of a section over the budget into ordered parts that its head names", () => {
        const leaves = partedSection({ data: { content: section }, identity, markdown: "# Big\n" }, section, SITE);
        const head = leaves.at(-1);
        const parts = leaves.slice(0, -1);
        expect(parts.length).toBeGreaterThan(1);
        expect(parts.every((part) => part.identity.kind === "index-part" && typeof part.markdown === "string")).toBe(
            true,
        );
        expect(parts[0]?.identity.address).toStrictEqual({ json: PART_ONE, markdown: "/method/start/big/_1.md" });
        expect(parts[0]?.markdown).toContain(SITE + PART_ONE);
        expect(parts.flatMap(heldSubsections)).toStrictEqual(subsections);
        expect(head?.markdown).toBe("# Big\n");
        expect(Reflect.get(head?.data ?? {}, "content")).toStrictEqual({ id: "big", title: "Big" });
        const listed: unknown = Reflect.get(head?.data ?? {}, "parts");
        expect(Array.isArray(listed) ? listed.at(0) : null).toMatchObject({ first: "Part 0", json: SITE + PART_ONE });
    });
});