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.'); });