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}`,
`Topic`,
`Topic`,
]) 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);
});