import test from 'node:test'; import assert from 'node:assert/strict'; import { normalizeAvatar, AVATAR_MAX_LENGTH } from '../src/lib/avatar.js'; const PNG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUg=='; test('nimmt Bild-Data-URLs an', () => { for (const typ of ['png', 'jpeg', 'jpg', 'gif', 'webp', 'avif']) { const url = `data:image/${typ};base64,AAAA`; assert.equal(normalizeAvatar(url).value, url, typ); } }); test('leer entfernt das Bild', () => { for (const wert of [null, undefined, '', ' ']) { assert.deepEqual(normalizeAvatar(wert), { value: null }); } }); test('weist alles ab, was kein Bild ist', () => { // SVG kann Skripte tragen, eine externe Adresse verraet die Benutzung nach draussen. for (const wert of [ 'data:image/svg+xml;base64,PHN2Zy8+', 'data:text/html;base64,PGgxPmhpPC9oMT4', 'https://example.com/foto.png', 'javascript:alert(1)', 'hallo', ]) { assert.ok(normalizeAvatar(wert).error, wert); } }); test('begrenzt die Groesse', () => { const zuGross = `data:image/png;base64,${'A'.repeat(AVATAR_MAX_LENGTH)}`; assert.match(normalizeAvatar(zuGross).error, /zu groß/); assert.equal(normalizeAvatar(PNG).error, undefined); });