test(ux): add publish center contract gate
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { resolve } from 'node:path';
|
||||
|
||||
const root = resolve(import.meta.dirname, '..');
|
||||
const read = path => readFileSync(resolve(root, path), 'utf8');
|
||||
const failures = [];
|
||||
|
||||
function requireText(content, needle, label) {
|
||||
if (!content.includes(needle)) failures.push(`${label}: ${needle}`);
|
||||
}
|
||||
|
||||
function forbidText(content, needle, label) {
|
||||
if (content.includes(needle)) failures.push(`${label}: ${needle}`);
|
||||
}
|
||||
|
||||
const loader = read('public/ux-foundation.js');
|
||||
const script = read('public/publish-center-ux.js');
|
||||
const style = read('public/publish-center-ux.css');
|
||||
const pkg = JSON.parse(read('package.json'));
|
||||
|
||||
requireText(loader, '/publish-center-ux.css?v=1.44.0', 'Publish-CSS wird nicht geladen');
|
||||
requireText(loader, '/publish-center-ux.js?v=1.44.0', 'Publish-JavaScript wird nicht geladen');
|
||||
requireText(loader, 'loadPublishCenterAssets();', 'Publish-Assets fehlen in der UX-Initialisierung');
|
||||
|
||||
if (pkg.scripts?.['verify:publish-center'] !== 'node tools/verify-publish-center-ux-1.44.0.mjs') {
|
||||
failures.push('package.json: verify:publish-center fehlt oder zeigt auf die falsche Datei');
|
||||
}
|
||||
requireText(pkg.scripts?.['verify:all'] || '', 'npm run verify:publish-center', 'Publish-Gate fehlt in verify:all');
|
||||
|
||||
for (const token of [
|
||||
'OPERATIONAL_VIEWS',
|
||||
'VIEW_META',
|
||||
'ux-publish-view-groups',
|
||||
'ux-publish-status-drawer',
|
||||
'data-publish-operational',
|
||||
'data-has-publish-selection',
|
||||
'MutationObserver',
|
||||
"button.setAttribute('role', 'tab')",
|
||||
"button.setAttribute('aria-selected'",
|
||||
'publish-filter-platform',
|
||||
'publish-filter-status',
|
||||
'publish-list-card',
|
||||
]) requireText(script, token, 'Publish-UX-Vertrag unvollständig');
|
||||
|
||||
for (const forbidden of ['fetch(', 'api(', 'XMLHttpRequest', '.innerHTML', 'outerHTML', 'onclick=', 'localStorage.clear']) {
|
||||
forbidText(script, forbidden, 'Publish-UX darf keine Daten-, API- oder unsichere DOM-Logik enthalten');
|
||||
}
|
||||
|
||||
for (const token of [
|
||||
'.ux-publish-guide',
|
||||
'.ux-publish-view-groups',
|
||||
'.ux-publish-status-drawer',
|
||||
'[data-publish-operational]',
|
||||
'[data-has-publish-selection]',
|
||||
'.ux-publish-active-filters',
|
||||
'.ux-publish-batch-more',
|
||||
':focus-visible',
|
||||
'@media (max-width: 900px)',
|
||||
'@media (prefers-reduced-motion: reduce)',
|
||||
'var(--vd-',
|
||||
]) requireText(style, token, 'Publish-CSS-Vertrag unvollständig');
|
||||
|
||||
for (const forbidden of ['position: fixed', 'z-index: 9999', '#ff0000', '!important']) {
|
||||
forbidText(style, forbidden, 'Publish-CSS verletzt Design- oder Layoutgrenzen');
|
||||
}
|
||||
|
||||
if (failures.length) {
|
||||
console.error('Publish-Center-UX 1.44.0 Gate fehlgeschlagen:');
|
||||
for (const failure of failures) console.error(`- ${failure}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log('Publish-Center-UX 1.44.0 Gate bestanden.');
|
||||
Reference in New Issue
Block a user