Files
kochwas/tests/integration/whitelist.test.ts
hsiegeln 2807dd1cab
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 1m14s
feat(import): manuelle URL-Importe von allen Domains zulassen
Der User pastet bewusst eine URL und erwartet, dass der Import
klappt — die Whitelist-Prüfung (DOMAIN_BLOCKED) im previewRecipe
war da nur Reibung. Die Whitelist bleibt für die Web-Suche relevant
(dort muss das Crawl-Feld eingeschränkt werden), für Imports nicht
mehr.

Dropped: isDomainAllowed + whitelist.ts, DOMAIN_BLOCKED-Code in
ImporterError, die zugehörige Branch in mapImporterError. Tests
entsprechend angepasst: statt "DOMAIN_BLOCKED wenn nicht whitelisted"
prüft der Preview-Test jetzt "klappt auch ohne Whitelist-Eintrag".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 15:18:46 +02:00

65 lines
2.2 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { openInMemoryForTest } from '../../src/lib/server/db';
import {
addDomain,
listDomains,
removeDomain,
setDomainFavicon,
updateDomain,
getDomainById
} from '../../src/lib/server/domains/repository';
describe('allowed domains', () => {
it('round-trips domains', () => {
const db = openInMemoryForTest();
addDomain(db, 'chefkoch.de', 'Chefkoch');
addDomain(db, 'emmikochteinfach.de', 'Emmi kocht einfach');
const all = listDomains(db);
expect(all.map((d) => d.domain).sort()).toEqual(['chefkoch.de', 'emmikochteinfach.de']);
});
it('normalizes www. and case via addDomain', () => {
const db = openInMemoryForTest();
addDomain(db, 'WWW.Chefkoch.DE');
expect(listDomains(db)[0].domain).toBe('chefkoch.de');
});
it('removes domains', () => {
const db = openInMemoryForTest();
const d = addDomain(db, 'chefkoch.de');
removeDomain(db, d.id);
expect(listDomains(db)).toEqual([]);
});
it('updateDomain changes label without touching favicon', () => {
const db = openInMemoryForTest();
const d = addDomain(db, 'chefkoch.de', 'Chefkoch');
setDomainFavicon(db, d.id, 'favicon-abc.png');
const updated = updateDomain(db, d.id, { display_name: 'Chefkoch.de' });
expect(updated?.domain).toBe('chefkoch.de');
expect(updated?.display_name).toBe('Chefkoch.de');
expect(updated?.favicon_path).toBe('favicon-abc.png');
});
it('updateDomain resets favicon when the domain itself changes', () => {
const db = openInMemoryForTest();
const d = addDomain(db, 'chefkoch.de');
setDomainFavicon(db, d.id, 'favicon-abc.png');
const updated = updateDomain(db, d.id, { domain: 'rezeptwelt.de' });
expect(updated?.domain).toBe('rezeptwelt.de');
expect(updated?.favicon_path).toBe(null);
});
it('updateDomain returns null for missing id', () => {
const db = openInMemoryForTest();
expect(updateDomain(db, 999, { domain: 'x.com' })).toBe(null);
});
it('getDomainById fetches single row', () => {
const db = openInMemoryForTest();
const d = addDomain(db, 'chefkoch.de');
expect(getDomainById(db, d.id)?.domain).toBe('chefkoch.de');
expect(getDomainById(db, 999)).toBe(null);
});
});