import { describe, it, expect } from 'vitest'; import { readFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { extractRecipeFromHtml } from '../../src/lib/server/parsers/json-ld-recipe'; const here = dirname(fileURLToPath(import.meta.url)); function load(name: string): string { return readFileSync(join(here, '../fixtures', name), 'utf8'); } describe('extractRecipeFromHtml', () => { it('extracts a recipe from Chefkoch HTML', () => { const html = load('chefkoch-schupfnudeln.html'); const r = extractRecipeFromHtml(html); expect(r).not.toBeNull(); expect(r!.title.toLowerCase()).toContain('schupfnudel'); expect(r!.ingredients.length).toBeGreaterThan(2); expect(r!.steps.length).toBeGreaterThan(0); }); it('extracts a recipe from Emmi kocht einfach HTML', () => { const html = load('emmi-bolognese.html'); const r = extractRecipeFromHtml(html); expect(r).not.toBeNull(); expect(r!.title.toLowerCase()).toContain('bolognese'); expect(r!.ingredients.length).toBeGreaterThan(0); expect(r!.steps.length).toBeGreaterThan(0); }); it('returns null when no Recipe JSON-LD present', () => { const html = '

no recipe

'; expect(extractRecipeFromHtml(html)).toBeNull(); }); it('returns null when JSON-LD has only non-Recipe types', () => { const html = ` `; expect(extractRecipeFromHtml(html)).toBeNull(); }); });