From 17d25c5ffa184ccf03e2a1d8973b6a0b734b9dac Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Tue, 29 Sep 2026 08:08:12 +0200 Subject: [PATCH] test(pdf): letters print the sender's header in every template --- .../templates/shared/letter-header.test.tsx | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 packages/pdf/src/templates/shared/letter-header.test.tsx diff --git a/packages/pdf/src/templates/shared/letter-header.test.tsx b/packages/pdf/src/templates/shared/letter-header.test.tsx new file mode 100644 index 000000000..46067c81f --- /dev/null +++ b/packages/pdf/src/templates/shared/letter-header.test.tsx @@ -0,0 +1,41 @@ +import { describe, expect, it } from "vitest"; +import * as forme from "@formepdf/core"; +import { getDocument } from "pdfjs-dist/legacy/build/pdf.mjs"; +import { createCoverLetterResumeData } from "@reactive-resume/resume/cover-letter"; +import { sampleResumeData } from "@reactive-resume/schema/resume/sample"; +import { templateSchema } from "@reactive-resume/schema/templates"; +import { renderResume } from "../../forme/render"; + +const letterIn = (template: (typeof templateSchema.options)[number]) => { + const { notes: _notes, layout: _layout, ...metadata } = { ...sampleResumeData.metadata, template }; + return createCoverLetterResumeData({ + name: "Letter", + recipient: "

Hiring Manager

", + content: "

Dear team, I would like to apply.

", + style: { + basics: sampleResumeData.basics, + picture: { ...sampleResumeData.picture, hidden: true }, + metadata, + sectionId: "letter", + itemId: "letter-item", + }, + }); +}; + +describe("letters", () => { + // A letter's page is full width; templates that keep their header in the sidebar still print it. + it.each(templateSchema.options)("prints the sender's header in %s", { timeout: 60_000 }, async (template) => { + const { pdf } = await renderResume(forme, { + data: letterIn(template), + template, + renderOptions: { includeCoverLetterHeader: true }, + }); + const document = await getDocument({ data: pdf }).promise; + const text = (await (await document.getPage(1)).getTextContent()).items + .map((item) => ("str" in item ? item.str : "")) + .join(" "); + + expect(text).toContain(sampleResumeData.basics.name); + expect(text).toContain("Dear team"); + }); +});