From 1c13b757ed0f979e48b36881c019d5546933c28c Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Fri, 8 May 2026 16:23:32 +0200 Subject: [PATCH] feat(marketing-pages): RecordingMailerService --- .../services/recording-mailer.service.test.ts | 20 +++++++++++++++++++ .../services/recording-mailer.service.ts | 9 +++++++++ 2 files changed, 29 insertions(+) create mode 100644 packages/marketing-pages/src/infrastructure/services/recording-mailer.service.test.ts create mode 100644 packages/marketing-pages/src/infrastructure/services/recording-mailer.service.ts diff --git a/packages/marketing-pages/src/infrastructure/services/recording-mailer.service.test.ts b/packages/marketing-pages/src/infrastructure/services/recording-mailer.service.test.ts new file mode 100644 index 0000000..ef5309a --- /dev/null +++ b/packages/marketing-pages/src/infrastructure/services/recording-mailer.service.test.ts @@ -0,0 +1,20 @@ +import { describe, it, expect } from "vitest"; +import { RecordingMailerService } from "@/infrastructure/services/recording-mailer.service"; + +describe("RecordingMailerService", () => { + it("records welcome calls", async () => { + const mailer = new RecordingMailerService(); + await mailer.sendWelcome("u1", "u1@example.com"); + expect(mailer.sent).toEqual([{ userId: "u1", email: "u1@example.com" }]); + }); + + it("preserves call order across multiple sends", async () => { + const mailer = new RecordingMailerService(); + await mailer.sendWelcome("u1", "a@x"); + await mailer.sendWelcome("u2", "b@x"); + expect(mailer.sent).toEqual([ + { userId: "u1", email: "a@x" }, + { userId: "u2", email: "b@x" }, + ]); + }); +}); diff --git a/packages/marketing-pages/src/infrastructure/services/recording-mailer.service.ts b/packages/marketing-pages/src/infrastructure/services/recording-mailer.service.ts new file mode 100644 index 0000000..18cfdbc --- /dev/null +++ b/packages/marketing-pages/src/infrastructure/services/recording-mailer.service.ts @@ -0,0 +1,9 @@ +import type { IMailerService } from "../../application/services/mailer.service.interface"; + +export class RecordingMailerService implements IMailerService { + readonly sent: { userId: string; email: string }[] = []; + + async sendWelcome(userId: string, email: string): Promise { + this.sent.push({ userId, email }); + } +}