Verified with the coordinated workspace changes by devkit full run 2026-09-08T225814-186389-0000-3e3ed7cd (all seven phases passed). This shared UI pass does not mark the individual module reviews complete.
81 lines
4.2 KiB
JavaScript
Executable File
81 lines
4.2 KiB
JavaScript
Executable File
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
import { createRequire } from "node:module";
|
|
import { resolve } from "node:path";
|
|
import { test } from "node:test";
|
|
|
|
const root = resolve(import.meta.dirname, "../..");
|
|
const require = createRequire(resolve(root, "govoplan-core/webui/package.json"));
|
|
const { buildSync } = require("esbuild");
|
|
const labels = {
|
|
approvals: { "Approval requests": "Genehmigungsanträge" },
|
|
forms: { "Form meaning": "Formularbedeutung" },
|
|
"forms-runtime": { "Form instance": "Formularinstanz", "Forms runtime": "Formularlaufzeit" },
|
|
helpdesk: { "Helpdesk profiles": "Helpdesk-Profile" },
|
|
portal: { "Service directory": "Leistungsverzeichnis" },
|
|
projects: { Projects: "Projekte" },
|
|
reporting: { Reporting: "Reporting" },
|
|
"risk-compliance": { "Risk Compliance": "Risiko und Compliance" },
|
|
scheduling: { Scheduling: "Terminplanung" },
|
|
tickets: { Tickets: "Tickets" },
|
|
voting: { Ballots: "Abstimmungen" },
|
|
wiki: { Wiki: "Wiki" },
|
|
workflow: { Workflows: "Workflows", Workflow: "Workflow" },
|
|
idm: {
|
|
"Direct changes to this governed function are": "Direkte Änderungen an dieser gesteuerten Funktion sind",
|
|
"emergency overrides": "Notfallübersteuerungen",
|
|
". Use a request or grant above for the normal process.": ". Verwenden Sie für den regulären Prozess einen Antrag oder eine Vergabe.",
|
|
},
|
|
};
|
|
|
|
// Render the actual Core heading/locale contract with one owning module at a
|
|
// time. The in-memory bundle creates no shared component-build artifacts.
|
|
const names = Object.keys(labels);
|
|
const imports = names.map((name, index) => `import { generatedTranslations as t${index} } from ${JSON.stringify(resolve(root, `govoplan-${name}/webui/src/i18n/generatedTranslations.ts`))};`).join("\n");
|
|
const { outputFiles } = buildSync({
|
|
stdin: {
|
|
contents: `${imports}
|
|
import { renderToStaticMarkup } from 'react-dom/server';
|
|
import { PlatformLanguageProvider } from ${JSON.stringify(resolve(root, "govoplan-core/webui/src/i18n/LanguageContext.tsx"))};
|
|
import PageTitle from ${JSON.stringify(resolve(root, "govoplan-core/webui/src/components/PageTitle.tsx"))};
|
|
import DocumentationHelpLink from ${JSON.stringify(resolve(root, "govoplan-core/webui/src/components/help/DocumentationHelpLink.tsx"))};
|
|
export const catalogs = [${names.map((_, index) => `t${index}`).join(",")}];
|
|
export function heading(index, language, label) {
|
|
return renderToStaticMarkup(<PlatformLanguageProvider preferredLanguageCode={language} moduleTranslations={[catalogs[index]]}>
|
|
<PageTitle titleHelp={<DocumentationHelpLink reference={{ contextId: "heading-test" }} />}>{label}</PageTitle>
|
|
</PlatformLanguageProvider>);
|
|
}`,
|
|
loader: "tsx",
|
|
resolveDir: resolve(root, "govoplan-core/webui"),
|
|
},
|
|
bundle: true,
|
|
write: false,
|
|
platform: "node",
|
|
format: "cjs",
|
|
jsx: "automatic",
|
|
external: ["react", "react-dom/server"],
|
|
logLevel: "silent",
|
|
});
|
|
const compiled = { exports: {} };
|
|
new Function("require", "module", "exports", outputFiles[0].text)(require, compiled, compiled.exports);
|
|
const { catalogs, heading } = compiled.exports;
|
|
|
|
test("new contextual labels render from their owning EN/DE catalogues", async (context) => {
|
|
for (const [index, name] of names.entries()) {
|
|
await context.test(name, () => {
|
|
const moduleSource = readFileSync(resolve(root, `govoplan-${name}/webui/src/module.ts`), "utf8");
|
|
assert.match(moduleSource, /import\s*\{\s*generatedTranslations\s*\}\s*from\s*["']\.\/i18n\/generatedTranslations["']/);
|
|
assert.match(moduleSource, /\btranslations(?:\s*:\s*generatedTranslations)?\s*,/);
|
|
for (const [english, german] of Object.entries(labels[name])) {
|
|
assert.equal(catalogs[index].en[english], english);
|
|
assert.equal(catalogs[index].de[english], german);
|
|
for (const [language, expected] of [["en", english], ["de", german]]) {
|
|
const markup = heading(index, language, english);
|
|
assert(markup.includes(`<h1>${expected}</h1>`), `${name}: ${language} contextual heading`);
|
|
assert(markup.includes(language === "de" ? "Benutzerdokumentation öffnen" : "Open user documentation"));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|