import { describe, test } from 'node:test'; import assert from 'node:assert/strict'; import { resolveWeasyprint as resolvePdf } from '../build-pdf.mjs'; import { resolveWeasyprint as resolveCarousel } from '../build-carousel.mjs'; // S1 (correction #3): when weasyprint is not resolvable on PATH, the degradation // helper must return a skip-signal (NOT throw) and emit an install hint, so the // render scripts can skip the PDF step gracefully instead of crashing. for (const [name, resolveWeasyprint] of [ ['build-pdf', resolvePdf], ['build-carousel', resolveCarousel], ]) { describe(`resolveWeasyprint — ${name}`, () => { test('returns a skip-signal (not a throw) when weasyprint is absent', () => { let result; assert.doesNotThrow(() => { result = resolveWeasyprint(() => false); }); assert.equal(result.available, false); }); test('emits an install hint when absent', () => { const result = resolveWeasyprint(() => false); assert.ok(typeof result.hint === 'string' && result.hint.length > 0); assert.match(result.hint, /weasyprint/i); assert.match(result.hint, /install/i); }); test('reports available when the probe succeeds', () => { const result = resolveWeasyprint(() => true); assert.equal(result.available, true); assert.equal(result.hint, undefined); }); }); }