Fix: PDF-Bericht -- CJS-Interop, Leerseiten und sichtbare Fehler
Deploy App / deploy (push) Successful in 1m10s

1) pdfkit wird als externes CJS-Modul geladen. Je nach Interop kommt der
Konstruktor direkt oder unter .default an -- trifft man die falsche Form,
gelingt der Import, aber `new PDFDocument()` scheitert erst zur Laufzeit
(passt zum gemeldeten 500: unauth. Aufruf gab 401, die Erzeugung 500).
Beide Formen werden jetzt akzeptiert.

2) Die Fusszeile stand unterhalb des Satzspiegels -- pdfkit haengt dafuer
automatisch Seiten an. Ein Bericht mit 6 Inhaltsseiten wurde so auf 18
aufgeblaeht. Unterer Rand wird fuers Schreiben auf 0 gesetzt; ein Test
prueft jetzt die Seitenzahl im FERTIGEN PDF, nicht davor.

3) Rendern und Speichern melden ihre Ursache statt eines nackten 500.

Spezifikation unveraendert, 1 Test ergaenzt (221 -> 222).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 09:15:01 +02:00
parent d9ef980edf
commit e22f2cfa2b
3 changed files with 69 additions and 23 deletions
+12
View File
@@ -185,6 +185,18 @@ describe("renderReportPdf", () => {
expect(pdf.length).toBeGreaterThan(5000);
}, 30000);
it("hängt keine leeren Seiten an", async () => {
// Die Fusszeile steht unterhalb des Satzspiegels; ohne Vorkehrung fügt pdfkit dafür je
// Seite neue Seiten an und der Bericht füllt sich mit Leerseiten.
const m = buildReport(input());
const pdf = await renderReportPdf(m);
const s = pdf.toString("latin1");
const pages = (s.match(/\/Type\s*\/Page[^s]/g) ?? []).length;
// Ein Einzelszenario ergibt Deckblatt + Szenario + Hinweise.
expect(pages).toBeGreaterThanOrEqual(3);
expect(pages).toBeLessThanOrEqual(5);
}, 30000);
it("kommt auch mit einem leeren Plan zurecht, statt zu werfen", async () => {
// Robustheit: Ein Plan ohne Phasen darf keinen Absturz erzeugen.
const leer = { ...plan("Leer"), phases: [], elements: [] } as unknown as PlanInput;