38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
import { test } from 'node:test';
|
|
|
|
const homeTemplate = readFileSync(new URL('../src/app/pages/home/home.component.html', import.meta.url), 'utf8');
|
|
const homeStyles = readFileSync(new URL('../src/app/pages/home/home.component.scss', import.meta.url), 'utf8');
|
|
const styles = readFileSync(new URL('../src/styles.scss', import.meta.url), 'utf8');
|
|
|
|
test('home page avoids common AI-generated visual patterns', () => {
|
|
const bannedPatterns = [
|
|
/Gradient orbs/i,
|
|
/gradient-text/,
|
|
/from-purple-600\s+to-violet-600/,
|
|
/lg:grid-cols-3/,
|
|
/blur-\[128px\]/
|
|
];
|
|
|
|
for (const pattern of bannedPatterns) {
|
|
assert.doesNotMatch(homeTemplate, pattern);
|
|
}
|
|
});
|
|
|
|
test('global palette uses a restrained product-led brand system', () => {
|
|
assert.doesNotMatch(styles, /Inter:wght/);
|
|
assert.doesNotMatch(styles, /hsl\(280\s+90%\s+70%\)/);
|
|
assert.match(styles, /--primary:\s*\d+\s+\d+%\s+\d+%/);
|
|
});
|
|
|
|
test('hero screenshot does not add duplicate app chrome', () => {
|
|
assert.doesNotMatch(homeTemplate, /window-bar/);
|
|
assert.doesNotMatch(homeStyles, /\.window-bar/);
|
|
});
|
|
|
|
test('self-hostable section keeps title and copy in separate readable columns', () => {
|
|
assert.doesNotMatch(homeStyles, /\.host-section\s*{[^}]*align-items:\s*end/s);
|
|
assert.match(homeStyles, /\.host-section\s*{[^}]*align-items:\s*start/s);
|
|
assert.match(homeStyles, /\.host-section-copy/);
|
|
}); |