From c361b3cd45a50f29cd8da93cf4dbfaa6bf74ab8a Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 1 Jun 2026 20:12:23 +0200 Subject: [PATCH] fix(document): localize PdfViewer render-error message and download link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The error state showed a hardcoded German string ("Fehler beim Laden der PDF" / "Direkt öffnen") to all users regardless of locale. Use the localized doc_render_failed and doc_download_link messages so the recovery path (message + working download link) is honest in de/en/es. Refs #708 Co-Authored-By: Claude Opus 4.8 --- .../src/lib/document/viewer/PdfViewer.svelte | 4 +-- .../document/viewer/PdfViewer.svelte.test.ts | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/document/viewer/PdfViewer.svelte b/frontend/src/lib/document/viewer/PdfViewer.svelte index e9169c5d..603dd8b5 100644 --- a/frontend/src/lib/document/viewer/PdfViewer.svelte +++ b/frontend/src/lib/document/viewer/PdfViewer.svelte @@ -171,14 +171,14 @@ function handleAnnotationClick(id: string) { {:else if renderer.error}
-

Fehler beim Laden der PDF

+

{m.doc_render_failed()}

- Direkt öffnen + {m.doc_download_link()}
{:else} diff --git a/frontend/src/lib/document/viewer/PdfViewer.svelte.test.ts b/frontend/src/lib/document/viewer/PdfViewer.svelte.test.ts index e528b443..f4d2eab9 100644 --- a/frontend/src/lib/document/viewer/PdfViewer.svelte.test.ts +++ b/frontend/src/lib/document/viewer/PdfViewer.svelte.test.ts @@ -3,9 +3,39 @@ import { cleanup, render } from 'vitest-browser-svelte'; import { page } from 'vitest/browser'; import PdfViewer from './PdfViewer.svelte'; import { makeFakeLibLoader } from './testHelpers'; +import { m } from '$lib/paraglide/messages.js'; afterEach(cleanup); +function makeFailingLibLoader() { + const lib = { + GlobalWorkerOptions: { workerSrc: '' }, + getDocument: vi.fn().mockReturnValue({ + promise: Promise.reject(new Error('JBig2 failed to initialize')) + }), + TextLayer: class { + render() { + return Promise.resolve(); + } + cancel() {} + } + } as unknown as typeof import('pdfjs-dist'); + return vi.fn().mockResolvedValue([lib, { default: '' }] as const); +} + +describe('PdfViewer — render failure', () => { + it('shows the localized failure message and a download link, not a blank canvas', async () => { + render(PdfViewer, { + url: '/api/documents/test/file', + documentId: 'test', + libLoader: makeFailingLibLoader() + }); + + await expect.element(page.getByText(m.doc_render_failed())).toBeVisible(); + await expect.element(page.getByRole('link', { name: m.doc_download_link() })).toBeVisible(); + }); +}); + describe('PdfViewer — empty / error states', () => { it('renders the no-file placeholder when url is empty', async () => { render(PdfViewer, { url: '', libLoader: makeFakeLibLoader() });