Files
WRNexusJS/packages/mail/test/mail.test.ts
T
Clintchiz a9670c2a1c
Quality / quality (ubuntu-latest) (push) Failing after 9m54s
Quality / quality (windows-latest) (push) Canceled after 0s
fix: close durable queue and runtime gaps
2026-08-23 20:47:00 +05:30

48 lines
1.5 KiB
TypeScript

import { expect, test } from "bun:test";
import { defineMail, defineMailTemplate, sealedMailDriver } from "../src/index.ts";
test("mail templates render and sandbox blocks accidental recipients", async () => {
const sent: unknown[] = [];
const mail = defineMail({
from: "hello@example.com",
sandbox: { enabled: true, allowlist: ["dev@example.com"] },
driver: { send: async (message) => void sent.push(message) },
});
const welcome = defineMailTemplate<{ name: string }>({
subject: ({ name }) => `Hello ${name}`,
html: ({ name }) => `<b>${name}</b>`,
});
await mail.send(await mail.render(welcome, { name: "Ada" }, "dev@example.com"));
expect(sent).toHaveLength(1);
await expect(mail.send({ to: "real@example.com", subject: "no" })).rejects.toThrow("SANDBOX");
});
test("sealed drivers decrypt lazily once and delegate send/test", async () => {
let opens = 0;
const sent: string[] = [];
const driver = sealedMailDriver({
sealedCredential: "ciphertext",
async unseal(value) {
opens++;
expect(value).toBe("ciphertext");
return "plaintext-secret";
},
create(credential) {
expect(credential).toBe("plaintext-secret");
return {
async send(message) {
sent.push(message.subject);
},
async test() {
return { ok: true };
},
};
},
});
expect(opens).toBe(0);
await driver.send({ to: "safe@example.test", subject: "one" });
expect(await driver.test?.()).toEqual({ ok: true });
expect(opens).toBe(1);
expect(sent).toEqual(["one"]);
});