1
0

Front-end fixes

This commit is contained in:
2026-03-24 11:49:05 +01:00
parent b620d8eee6
commit 2a87ec67af
6 changed files with 125 additions and 43 deletions

View File

@@ -1150,3 +1150,57 @@ test.describe('Custom patches', () => {
await expect(page.locator('#step-connect')).not.toBeHidden();
});
});
// ============================================================
// Build output
// ============================================================
test.describe('Build output', () => {
const path = require('path');
const distDir = path.join(__dirname, '..', '..', 'web', 'dist');
test('CSS cache-bust hash is present on style.css link', async () => {
const html = fs.readFileSync(path.join(distDir, 'index.html'), 'utf-8');
expect(html).toMatch(/css\/style\.css\?h=[0-9a-f]{8}/);
});
test('JS cache-bust hash is present on bundle.js script', async () => {
const html = fs.readFileSync(path.join(distDir, 'index.html'), 'utf-8');
expect(html).toMatch(/bundle\.js\?h=[0-9a-f]{8}/);
});
test('critical CSS is inlined with :root tokens', async () => {
const html = fs.readFileSync(path.join(distDir, 'index.html'), 'utf-8');
// :root block should be inside an inline <style> tag, not in a <link>
expect(html).toMatch(/<style>[^<]*:root\{[^}]*--primary:/);
// var() references should be used (not hardcoded hex colors for themed values)
expect(html).toMatch(/<style>[^<]*var\(--primary\)/);
});
test('style.css does not contain a :root block', async () => {
const css = fs.readFileSync(path.join(distDir, 'css', 'style.css'), 'utf-8');
expect(css).not.toContain(':root');
});
test('--primary-hover differs from --primary', async () => {
const critical = fs.readFileSync(
path.join(__dirname, '..', '..', 'web', 'src', 'css', 'critical.css'), 'utf-8'
);
const primary = critical.match(/--primary:\s*([^;]+);/);
const hover = critical.match(/--primary-hover:\s*([^;]+);/);
expect(primary).not.toBeNull();
expect(hover).not.toBeNull();
expect(primary[1].trim()).not.toBe(hover[1].trim());
});
test('no jszip script tag in built HTML', async () => {
const html = fs.readFileSync(path.join(distDir, 'index.html'), 'utf-8');
expect(html).not.toContain('jszip');
});
test('no unreplaced template placeholders in built HTML', async () => {
const html = fs.readFileSync(path.join(distDir, 'index.html'), 'utf-8');
expect(html).not.toMatch(/\{\{[\w-]+\}\}/);
expect(html).not.toContain('@critical-css');
});
});