import { PDFDocument, StandardFonts } from 'pdf-lib'; import { kennzahlenAusPdf, zaehleWoerter } from './vergleich-kennzahlen.util'; describe('zaehleWoerter', () => { it('zählt nur Wörter mit Buchstaben oder Ziffern', () => { // „–“ und „€“ zählen nicht expect(zaehleWoerter('Rechnung Nr. 123 – Betrag 4,50 €')).toBe(5); }); it('ignoriert Seitenmarker von pdf-parse', () => { expect(zaehleWoerter('-- 1 of 2 --')).toBeNull(); }); it('liefert null für leeren oder fehlenden Text', () => { expect(zaehleWoerter('')).toBeNull(); expect(zaehleWoerter(null)).toBeNull(); }); }); describe('kennzahlenAusPdf', () => { it('ermittelt Seiten und Wörter eines PDFs mit Textebene', async () => { const pdf = await PDFDocument.create(); const font = await pdf.embedFont(StandardFonts.Helvetica); pdf.addPage().drawText('Hallo Welt', { x: 50, y: 700, font, size: 14 }); pdf.addPage(); const buffer = Buffer.from(await pdf.save()); expect(await kennzahlenAusPdf(buffer)).toEqual({ seiten: 2, woerter: 2 }); }); it('meldet bei PDFs ohne Text die Wortzahl als nicht ermittelbar', async () => { const pdf = await PDFDocument.create(); pdf.addPage(); const buffer = Buffer.from(await pdf.save()); expect(await kennzahlenAusPdf(buffer)).toEqual({ seiten: 1, woerter: null, }); }); it('liefert für unlesbare Dateien keine Kennzahlen', async () => { expect(await kennzahlenAusPdf(Buffer.from('kaputt'))).toEqual({ seiten: null, woerter: null, }); }); });