Runner: Analyse null erlaubt, Adresse optional (R10)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-01 10:03:24 +00:00
1 parent 7de9f1aaa3
commit 18d37d1e01
4 files changed
+20 -4

No files matched your search

+15 -1
View File
@@ -107,11 +107,17 @@ test('validateJob: analytics streng, Weiterreichen in den Job', () => {
assert.equal(ok.ok, true);
assert.deepEqual(ok.job.analytics, A());
assert.equal(validateJob(base).job.analytics, undefined);
const nul = validateJob({ ...base, analytics: null });
assert.equal(nul.ok, true); assert.equal(nul.job.analytics, undefined);
const noAddr = validateJob({ ...base, analytics: A({ privacy: { company: 'F', email: 'e@x.de' } }) });
assert.equal(noAddr.ok, true); assert.equal(noAddr.job.analytics.privacy.address, '');
assert.equal(validateJob({ ...base, analytics: A({ privacy: { company: 'F', email: '' } }) }).ok, false);
assert.equal(validateJob({ ...base, analytics: A({ privacy: { email: 'e@x.de' } }) }).ok, false);
const bad = [
A({ siteKey: 'kurz' }), A({ siteKey: 'A'.repeat(20) }), A({ color: '#ABCDEF' }), A({ color: '#abc' }),
A({ privacy: undefined }), A({ privacy: { ...A().privacy, company: 'x'.repeat(201) } }),
A({ privacy: { ...A().privacy, address: 'x'.repeat(301) } }), A({ privacy: { ...A().privacy, email: 'x'.repeat(201) } }),
A({ privacy: { ...A().privacy, company: 'a\nb' } }), A({ privacy: { ...A().privacy, email: 5 } }), 'x', [], null,
A({ privacy: { ...A().privacy, company: 'a\nb' } }), A({ privacy: { ...A().privacy, email: 5 } }), 'x', [],
];
for (const a of bad) { const r = validateJob({ ...base, analytics: a }); assert.equal(r.ok, false, JSON.stringify(a)); assert.match(r.error, /Analyse/); }
});
@@ -171,3 +177,11 @@ test('Dev-Modus (prepareWorkspace) fasst Dateien nicht an', async () => {
assert.equal(get(workDir, 'index.html'), '<html><head></head><body>NEU</body></html>');
assert.ok(!existsSync(join(workDir, 'datenschutz-analyse.html')));
});
test('leere Adresse: keine leere Zeile, kein Platzhalterrest', async () => {
const d = dir(); put(d, 'index.html', '<head></head>');
await injectAnalytics(d, A({ privacy: { company: 'Muster GmbH', address: '', email: 'info@muster.de' } }), { baseUrl: BASE });
const p = get(d, 'datenschutz-analyse.html');
assert.ok(p.includes('Muster GmbH<br>E-Mail:'));
assert.ok(!p.includes('{{') && !p.includes('<br><br>'));
});