/* Unit tests for faq covering buildFaqPageNode; buildFaqNodes. It also guards the documented public contract and regression-sensitive edge cases. Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only. RFC-1311: Compass header sweep — declares the faq suite's contract for test-file scaffold coverage. */ import { describe, expect, it } from "vitest"; import { buildFaqNodes, buildFaqPageNode } from "../faq.ts"; import { createJsonLdContext } from "../context.ts"; import { makePage } from "../../tests/helpers.ts"; describe("buildFaqPageNode", () => { it("returns null when no faqEntries", () => { const page = makePage(); const ctx = createJsonLdContext(page); expect(buildFaqPageNode(ctx)).toBeNull(); }); it("returns null when faqEntries is empty", () => { const page = makePage({ faqEntries: [] }); const ctx = createJsonLdContext(page); expect(buildFaqPageNode(ctx)).toBeNull(); }); it("builds FAQPage with Question nodes", () => { const page = makePage({ faqEntries: [ { id: "q1", question: "What is this?", answer: "A test." }, { id: "q2", question: "How much?", answer: "Free." }, ], }); const ctx = createJsonLdContext(page); const node = buildFaqPageNode(ctx); expect(node).not.toBeNull(); expect(node!["@type"]).toBe("FAQPage"); expect(node!.mainEntity).toHaveLength(2); const entities = (node as Record).mainEntity as Record[]; expect(entities[0]).toEqual({ "@type": "Question", name: "What is this?", acceptedAnswer: { "@type": "Answer", text: "A test." }, }); }); }); describe("buildFaqNodes", () => { it("suppresses FAQPage on ratgeber depth-1 article pages", () => { const page = makePage({ surfaceId: "ratgeber", depth: 1, faqEntries: [{ id: "q1", question: "Q?", answer: "A." }], }); const ctx = createJsonLdContext(page); expect(buildFaqNodes(ctx)).toEqual([]); }); it("emits FAQPage for non-ratgeber pages with FAQ entries", () => { const page = makePage({ faqEntries: [{ id: "q1", question: "Q?", answer: "A." }], }); const ctx = createJsonLdContext(page); const nodes = buildFaqNodes(ctx); expect(nodes).toHaveLength(1); expect(nodes[0]["@type"]).toBe("FAQPage"); }); });