import { describe, expect, it } from "vitest"; import type { TFunction } from "i18next"; import { SUPPORT_MAIL_ADDRESS } from "@calcom/lib/constants"; import AdminOAuthClientNotification from "./admin-oauth-client-notification"; class TestAdminOAuthClientNotification extends AdminOAuthClientNotification { public async getPayload() { return await this.getNodeMailerPayload(); } } describe("AdminOAuthClientNotification", () => { it("renders a node mailer payload containing the submitted client information", async () => { const t = ((key: string, vars?: Record) => { if (key === "admin_oauth_notification_email_subject") { return `New OAuth Client: ${String(vars?.clientName ?? "")}`; } if (key === "admin_oauth_notification_email_title") { return `New OAuth Client: ${String(vars?.clientName ?? "")}`; } if (key === "hi_admin") return "Hi Administrator"; if (key === "admin_oauth_notification_email_body") { return `A new OAuth client has been submitted by ${String(vars?.submitterEmail ?? "")} and is awaiting your review.`; } if (key === "admin_oauth_notification_email_cta") return "Review OAuth Clients"; if (key === "admin_oauth_notification_email_footer") { return "Please review this submission and approve or reject it in the admin dashboard."; } if (key === "client_name") return "Name"; if (key === "purpose") return "Purpose"; if (key === "client_id") return "Client ID"; if (key === "redirect_uri") return "Redirect URI"; if (key === "submitted_by") return "Submitted By"; return key; }) as unknown as TFunction; const input = { t, clientName: "My Client", purpose: "My Purpose", clientId: "client_123", redirectUri: "https://example.com/callback", submitterEmail: "submitter@example.com", submitterName: "Submitter Name", }; const email = new TestAdminOAuthClientNotification(input); const payload = await email.getPayload(); expect(payload).toEqual( expect.objectContaining({ to: SUPPORT_MAIL_ADDRESS, subject: `New OAuth Client: ${input.clientName}`, }) ); const html = "html" in payload ? (payload.html as string) : ""; expect(html).toContain(`New OAuth Client: ${input.clientName}`); expect(html).toContain("Hi Administrator"); expect(html).toContain( `A new OAuth client has been submitted by ${input.submitterEmail} and is awaiting your review.` ); expect(html).toContain("Review OAuth Clients"); expect(html).toContain("Please review this submission and approve or reject it in the admin dashboard."); expect(html).toContain(">Name<"); expect(html).toContain(input.clientName); expect(html).toContain(">Purpose<"); expect(html).toContain(input.purpose); expect(html).toContain(">Client ID<"); expect(html).toContain(input.clientId); expect(html).toContain(">Redirect URI<"); expect(html).toContain(input.redirectUri); expect(html).toContain(">Submitted By<"); expect(html).toContain(`${input.submitterName} (${input.submitterEmail})`); }); });