test(ux): add module extension workspace gate
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
|
||||
const root = process.cwd();
|
||||
const read = relative => fs.readFileSync(path.join(root, relative), 'utf8');
|
||||
const js = read('public/module-extension-workspace.js');
|
||||
const css = read('public/module-extension-workspace.css');
|
||||
const runtime = read('public/design-system/theme-runtime.js');
|
||||
const html = read('public/index.html');
|
||||
const manager = read('public/modules/module-manager/module-manager.js');
|
||||
const pkg = JSON.parse(read('package.json'));
|
||||
const failures = [];
|
||||
const expect = (condition, message) => { if (!condition) failures.push(message); };
|
||||
const includesAll = (source, values, label) => values.forEach(value => expect(source.includes(value), `${label}: ${value}`));
|
||||
|
||||
includesAll(html, ['id="extensions"','id="extensions-grid"','id="extensions-active-browser"','id="extensions-prepare-active"','id="admin-modules-panel"','id="module-manager-summary"','id="module-manager-list"','id="module-manager-search"','id="module-manager-file"','id="module-manager-install"'], 'Bestehender Modul-/Extension-DOM-Vertrag fehlt');
|
||||
includesAll(manager, ['VendooModuleManager','/api/admin/modules','data.moduleAction','module-card','module-dependencies','module-error'], 'Produktiver Modulmanager-Vertrag fehlt');
|
||||
includesAll(runtime, ['module-extension-workspace.css?v=1.44.0','module-extension-workspace.js?v=1.44.0','data-ux-module-extension-workspace','loadModuleExtensionWorkspaceAssets()'], 'Runtime-Einbindung fehlt');
|
||||
includesAll(js, ['uxModuleExtensionReady','ux-module-command','ux-module-health','ux-module-filterbar','ux-module-install','ux-extension-board','ux-extension-status','MutationObserver','requestAnimationFrame','localStorage','aria-pressed','module-manager-list','extensions-grid'], 'Workspace-JS-Vertrag fehlt');
|
||||
includesAll(css, ['.ux-module-command','.ux-module-health','.ux-module-filterbar','.ux-module-install','.ux-extension-board','#module-manager-list','#extensions-grid','@media (max-width:1100px)','@media (max-width:780px)','@media (max-width:520px)','@media (prefers-reduced-motion:reduce)',':focus-visible','var(--'], 'Workspace-CSS-Vertrag fehlt');
|
||||
expect(pkg.scripts?.['verify:module-extension-workspace'] === 'node tools/verify-module-extension-workspace-ux-1.44.0.mjs', 'verify:module-extension-workspace fehlt');
|
||||
expect(pkg.scripts?.['verify:all']?.includes('npm run verify:module-extension-workspace'), 'verify:all enthält Workspace-Gate nicht');
|
||||
expect(!/\bfetch\s*\(/.test(js), 'UX-Layer darf keine Netzwerkaufrufe ausführen');
|
||||
expect(!/\b(?:POST|PUT|PATCH|DELETE)\b/.test(js), 'UX-Layer darf keine Schreiboperationen implementieren');
|
||||
expect(!/\.innerHTML\s*=/.test(js), 'UX-Layer darf innerHTML nicht setzen');
|
||||
expect(!/confirm\s*\(/.test(js), 'Kritische Bestätigungen bleiben im produktiven Modulmanager');
|
||||
expect(!/VendooModuleManager\.(?:load|install|enable|disable)/.test(js), 'UX-Layer darf produktive Modulaktionen nicht direkt ausführen');
|
||||
expect(!/setInterval\s*\(/.test(js), 'UX-Layer darf kein Polling starten');
|
||||
|
||||
if (failures.length) {
|
||||
console.error('Module & Extension Workspace UX Gate fehlgeschlagen:');
|
||||
failures.forEach(failure => console.error(`- ${failure}`));
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('Module & Extension Workspace UX Gate bestanden.');
|
||||
Reference in New Issue
Block a user