60 lines
1.8 KiB
TypeScript
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,
|
|
);
|
|
});
|
|
});
|