Files
bea-edit/tests/unit/pdf-errors.spec.ts
2026-10-28 16:09:53 +01:00

41 lines
1.6 KiB
TypeScript

import { expect, test } from '@playwright/test';
import {
ENCRYPTED_PDF_MESSAGE,
TextOverlayError,
classifyPdfError,
pdfLoadErrorMessage,
pdfProcessingErrorMessage
} from '../../src/lib/pdf-errors';
const encryptedError = () =>
new Error(
'Input document to `PDFDocument.load` is encrypted. You can use `PDFDocument.load(..., { ignoreEncryption: true })`'
);
test('overlay failures keep their own copy', () => {
const error = new TextOverlayError('Der Text ist zu lang.');
expect(classifyPdfError(error)).toBe('text-overlay');
expect(pdfProcessingErrorMessage(error, 'Fallback')).toBe('Der Text ist zu lang.');
expect(pdfLoadErrorMessage(error)).toBe('Der Text ist zu lang.');
});
test('encrypted PDFs map to the shared password hint', () => {
expect(classifyPdfError(encryptedError())).toBe('encrypted');
expect(pdfProcessingErrorMessage(encryptedError(), 'Fallback')).toBe(ENCRYPTED_PDF_MESSAGE);
expect(pdfLoadErrorMessage(encryptedError())).toBe(ENCRYPTED_PDF_MESSAGE);
});
test('unknown failures fall back to the caller copy', () => {
const error = new Error('Invalid PDF structure');
expect(classifyPdfError(error)).toBe('unknown');
expect(pdfProcessingErrorMessage(error, 'Fehler beim Drehen der Seiten.')).toBe(
'Fehler beim Drehen der Seiten.'
);
expect(pdfLoadErrorMessage(error, 'Eigene Meldung.')).toBe('Eigene Meldung.');
expect(pdfLoadErrorMessage(error)).toContain('PDF konnte nicht geladen werden');
// Tool-specific copy must never be overridden by the classification.
expect(pdfProcessingErrorMessage('boom', 'Eigene Meldung.')).toBe('Eigene Meldung.');
});