import assert from "node:assert/strict"; import { test } from "node:test"; import { findDetachedDocumentation } from "../tools/checks/check-heading-help.mjs"; import "./test-heading-translations.mjs"; const inspect = (source) => findDetachedDocumentation([{ path: "/fixture/Page.tsx", source }]).findings; const book = ''; test("heading and text contracts accept contextual help", () => { for (const component of ["PageHeader", "PageLayout", "AdminPageLayout", "Card", "Dialog", "PageActionBar", "WorkspaceActionBar"]) { assert.equal(inspect(`const Page=()=> <${component} title="Topic" titleHelp={${book}} />`).length, 0, component); } assert.equal(inspect(`const Page=()=> Topic`).length, 0); assert.equal(inspect(`const Page=()=> Existing label`).length, 0); }); test("detached action and body links are rejected", () => { for (const source of [``, ``, `
${book}
`, ``]) { assert.equal(inspect(`const Page=()=> ${source}`).length, 1, source); } }); test("aliases, conditional help and simple local references remain checked", () => { assert.equal(inspect(`import {DocumentationHelpLink as Book, Card as Box} from '@govoplan/core-webui'; const Page=()=> } />`).length, 0); assert.equal(inspect(`import {DocumentationHelpLink as Book} from '@govoplan/core-webui'; const Page=()=>
`).length, 1); assert.equal(inspect(`const help=${book}; const Page=()=> `).length, 0); assert.equal(inspect(`const help=${book}; const Page=()=> <>`).length, 1); assert.equal(inspect(`const help=${book}; const again=help; const Page=()=> `).length, 0); }); test("empty anchors, unknown contracts and nested interactive elements fail", () => { for (const source of [``, ``, ` `, ``, `${book}}/>`]) { assert.equal(inspect(`const Page=()=> ${source}`).length, 1, source); } }); test("namespace and explicit component default imports cannot bypass placement", () => { for (const source of [ `import * as UI from '@govoplan/core-webui'; const Page=()=>
`, `import Book from './components/help/DocumentationHelpLink'; const Page=()=>
`, ]) assert.equal(inspect(source).length, 1, source); assert.equal(inspect(`import * as UI from '@govoplan/core-webui'; const Page=()=> }/>`).length, 0); assert.equal(inspect(`import Book from './components/help/DocumentationHelpLink'; import Label from './components/help/TextWithHelp'; const Page=()=> `).length, 0); assert.equal(findDetachedDocumentation([{ path: "/fixture/Page.tsx", source: `import Book from './business/Book'; const Page=()=>
` }]).links, 0); }); test("outer interactive containers and statically absent text are rejected", () => { for (const source of [ ``, ``, ``, ``, `{null}`, `{/* Topic */}`, `{undefined}`, ``, ``, ]) assert.equal(inspect(`const Page=()=> ${source}`).length, 1, source); assert.equal(inspect(`const help=${book}; const Page=()=> `).length, 1); assert.equal(inspect(`const title=null; const Page=()=> `).length, 1); assert.equal(inspect(`const Page=()=> `).length, 0); assert.equal(inspect(`const Page=()=> `).length, 0); assert.equal(inspect(`let title=""; title=translateText(key); const Page=()=> `).length, 0); });