Harden bulk retries, parallelize guest uploads, and move guest map below gallery

This commit is contained in:
2026-09-11 18:54:46 -04:00
parent 4bc48db656
commit 1e299a9914
25 changed files with 376 additions and 62 deletions
+14 -2
View File
@@ -1,5 +1,6 @@
import { expect, test } from "bun:test";
import { renderAlbumReadyEmail, emailBrowserPreview } from "./index";
import { EMAIL_LOGO_CID } from "./logo";
test("gallery email escapes content and includes a plain-text alternative", () => {
const message = renderAlbumReadyEmail({ to: "test@example.test", eventTitle: '<script>alert("x")</script>', galleryUrl: "https://manyangles.test/e/demo" });
@@ -9,8 +10,19 @@ test("gallery email escapes content and includes a plain-text alternative", () =
expect(message.html).toContain("Manyangles");
expect(message.text).toContain("https://manyangles.test/e/demo");
expect(message.html).toContain("Arial,Helvetica,sans-serif");
expect(message.html).toContain("cid:manyangles-mark-v1");
expect(message.attachments[0]?.contentId).toBe("manyangles-mark-v1");
expect(message.html).toContain(`cid:${EMAIL_LOGO_CID}`);
expect(message.attachments[0]?.contentId).toBe(EMAIL_LOGO_CID);
expect(Buffer.from(message.attachments[0]!.content, "base64").subarray(1, 4).toString()).toBe("PNG");
expect(emailBrowserPreview(message.html)).toContain("data:image/png;base64,");
});
test("logo stays inline in email and becomes a data URI only in browser previews", () => {
const message = renderAlbumReadyEmail({ to: "test@example.test", eventTitle: "Wedding", galleryUrl: "https://manyangles.test/e/demo" });
const preview = emailBrowserPreview(message.html);
expect(message.attachments).toHaveLength(1);
expect(message.html).not.toContain("data:image");
expect(preview).not.toContain(`cid:${EMAIL_LOGO_CID}`);
expect(preview).toContain(message.attachments[0]!.content);
expect(emailBrowserPreview(preview)).toBe(preview);
expect(message.html).toContain(`cid:${EMAIL_LOGO_CID}`);
});