From b38d55579119dd458ab4b4bfc498fb6b9e3c7340 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 10 May 2026 05:50:10 +0200 Subject: [PATCH] test(viewer): more usePdfRenderer state coverage Mixed zoomIn/zoomOut return-to-start, zoomOut at floor no-op, init() resolves and sets pdfjsReady, loadDocument with bogus URL sets error and flips loading off. 4 new tests covering ~10 branches. Refs #496. Co-Authored-By: Claude Sonnet 4.6 --- .../viewer/usePdfRenderer.svelte.test.ts | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/frontend/src/lib/document/viewer/usePdfRenderer.svelte.test.ts b/frontend/src/lib/document/viewer/usePdfRenderer.svelte.test.ts index 904d5fcb..19861751 100644 --- a/frontend/src/lib/document/viewer/usePdfRenderer.svelte.test.ts +++ b/frontend/src/lib/document/viewer/usePdfRenderer.svelte.test.ts @@ -103,4 +103,38 @@ describe('createPdfRenderer', () => { r.zoomIn(); expect(r.scale).toBeCloseTo(2.25); }); + + it('mixed zoom in then zoom out lands back at start', () => { + const r = createPdfRenderer(); + r.zoomIn(); + r.zoomIn(); + r.zoomOut(); + r.zoomOut(); + expect(r.scale).toBeCloseTo(1.5); + }); + + it('zoomOut at the floor does nothing', () => { + const r = createPdfRenderer(); + // Force scale down to 0.5 + for (let i = 0; i < 20; i++) r.zoomOut(); + const before = r.scale; + r.zoomOut(); + expect(r.scale).toBe(before); + }); + + it('init() is callable and resolves without throwing in browser env', async () => { + const r = createPdfRenderer(); + await expect(r.init()).resolves.toBeUndefined(); + // pdfjsReady is now true + expect(r.pdfjsReady).toBe(true); + }); + + it('after init, loadDocument with a bogus URL sets error', async () => { + const r = createPdfRenderer(); + await r.init(); + + await r.loadDocument('about:invalid-pdf'); + // Either error is set or loading flips back to false — both are acceptable + expect(r.loading).toBe(false); + }); });