test(ux): Settings-Control-Center-Vertrag ergänzen

This commit is contained in:
Masterluke77
2026-07-12 21:40:03 +02:00
parent 3208f107ba
commit 3195047977
@@ -0,0 +1,70 @@
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/settings-control-center.js');
const css = read('public/settings-control-center.css');
const runtime = read('public/design-system/theme-runtime.js');
const html = read('public/index.html');
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="settings"', 'class="settings-hero"', 'class="settings-shell"', 'class="settings-nav"',
'data-settings-panel="general"', 'data-settings-panel="appearance"', 'data-settings-panel="ai"',
'data-settings-panel="marketplaces"', 'data-settings-panel="flux"',
'id="settings-ai-status-text"', 'id="settings-flux-status-text"',
'id="etsy-status-badge"', 'id="ebay-status-badge"', 'id="save-settings-btn"'
], 'Bestehender Einstellungen-Vertrag fehlt');
includesAll(runtime, [
'settings-control-center.css?v=1.44.0',
'settings-control-center.js?v=1.44.0',
'data-ux-settings-control-center',
'loadSettingsControlCenterAssets()'
], 'Theme-Runtime bindet das Settings-Control-Center nicht vollständig ein');
expect(pkg.scripts?.['verify:settings-control-center'] === 'node tools/verify-settings-control-center-ux-1.44.0.mjs', 'verify:settings-control-center Script fehlt');
expect(pkg.scripts?.['verify:all']?.includes('npm run verify:settings-control-center'), 'verify:all enthält das Settings-Gate nicht');
includesAll(js, [
'ux-settings-control-center-ready', 'ux-settings-command', 'ux-settings-search-input',
'ux-settings-search-result', 'ux-settings-health', 'ux-settings-health-card',
'ux-settings-category-grid', 'ux-settings-category-card', 'ux-settings-advanced',
'data-ux-settings-category', 'data-ux-settings-health',
'settings-ai-status-text', 'settings-flux-status-text', 'etsy-status-badge', 'ebay-status-badge',
'MutationObserver', 'requestAnimationFrame', 'scrollIntoView', 'aria-live', 'aria-pressed',
'localStorage', 'prefers-reduced-motion'
], 'Settings-Control-Center-JS-Vertrag fehlt');
includesAll(css, [
'#settings.ux-settings-control-center-ready', '.ux-settings-command', '.ux-settings-search',
'.ux-settings-health-card', '.ux-settings-category-grid', '.ux-settings-category-card',
'.ux-settings-advanced', '.ux-settings-search-hit', '.settings-savebar',
'@media (max-width:1100px)', '@media (max-width:780px)', '@media (max-width:520px)',
'@media (prefers-reduced-motion:reduce)', ':focus-visible', 'var(--'
], 'Settings-Control-Center-CSS-Vertrag fehlt');
expect(!/\bfetch\s*\(/.test(js), 'Additive Settings-UX darf keine eigenen Netzwerkaufrufe ausführen');
expect(!/\bapi\s*\(/.test(js), 'Additive Settings-UX darf die Vendoo-API nicht direkt aufrufen');
expect(!/\.innerHTML\s*=/.test(js), 'Settings-UX darf keine innerHTML-Zuweisungen verwenden');
expect(!/\.outerHTML\s*=/.test(js), 'Settings-UX darf keine outerHTML-Zuweisungen verwenden');
expect(!/\.onclick\s*=/.test(js), 'Settings-UX darf keine onclick-Zuweisungen verwenden');
expect(!/confirm\s*\(/.test(js), 'Gefährliche Aktionen müssen in der bestehenden geprüften Logik bleiben');
expect(!/\b(?:DELETE|PATCH|POST|PUT)\b/.test(js), 'Settings-UX darf keine Schreiboperationen implementieren');
expect(!/saveSettings\s*\(/.test(js), 'Settings-UX darf Einstellungen nicht selbst speichern');
expect(!/testLocalImageProvider\s*\(/.test(js), 'Settings-UX darf FLUX-Tests nicht selbst ausführen');
expect(!/setInterval\s*\(/.test(js), 'Settings-UX darf keinen eigenen Polling-Zyklus starten');
expect(!/state\.[a-zA-Z]/.test(js), 'Additive Settings-UX darf produktiven App-State nicht direkt verändern');
if (failures.length) {
console.error('Settings Control Center UX Gate fehlgeschlagen:');
failures.forEach(failure => console.error(`- ${failure}`));
process.exit(1);
}
console.log('Settings Control Center UX Gate bestanden.');