Files
2026-08-17 16:35:14 -04:00

60 lines
1.8 KiB
TypeScript

import { afterEach, describe, expect, test } from "bun:test";
import { getEmailReadiness } from "../src";
const originalEnv = {
EMAIL_FROM: process.env.EMAIL_FROM,
EMAIL_PROVIDER: process.env.EMAIL_PROVIDER,
NODE_ENV: process.env.NODE_ENV,
RESEND_API_KEY: process.env.RESEND_API_KEY,
SMTP_HOST: process.env.SMTP_HOST,
SMTP_PORT: process.env.SMTP_PORT,
};
afterEach(() => {
for (const [key, value] of Object.entries(originalEnv)) {
if (value === undefined) delete process.env[key];
else process.env[key] = value;
}
});
describe("email provider readiness", () => {
test("accepts a configured Mailpit transport in development", () => {
process.env.NODE_ENV = "development";
process.env.EMAIL_PROVIDER = "mailpit";
process.env.EMAIL_FROM = "beenvoice <noreply@beenvoice.test>";
process.env.SMTP_HOST = "127.0.0.1";
process.env.SMTP_PORT = "1028";
expect(getEmailReadiness()).toEqual({
provider: "mailpit",
configured: true,
missing: [],
});
});
test("rejects Mailpit in production", () => {
process.env.NODE_ENV = "production";
process.env.EMAIL_PROVIDER = "mailpit";
process.env.EMAIL_FROM = "beenvoice <noreply@beenvoice.test>";
process.env.SMTP_HOST = "mailpit";
process.env.SMTP_PORT = "1025";
expect(getEmailReadiness().configured).toBe(false);
expect(getEmailReadiness().missing).toContain(
"EMAIL_PROVIDER (mailpit is development-only)",
);
});
test("accepts a per-business Resend key", () => {
process.env.NODE_ENV = "production";
process.env.EMAIL_PROVIDER = "resend";
process.env.EMAIL_FROM = "beenvoice <noreply@beenvoice.app>";
delete process.env.RESEND_API_KEY;
expect(getEmailReadiness({ resendApiKey: "re_business" }).configured).toBe(
true,
);
});
});