feat : more clear no reply mail

This commit is contained in:
2026-10-07 17:14:54 +07:00 Unverified
parent 5d195968ec
commit 012b1e11b1
3 changed files with 62 additions and 8 deletions
+22 -2
View File
@@ -81,19 +81,39 @@ describe("actual administrator session boundary", () => {
(await import("./server")).getAuth();
const options = mocks.auth.mock.calls.at(-1)![0];
expect(options.emailAndPassword.requireEmailVerification).toBe(true);
expect(options.emailAndPassword.resetPasswordTokenExpiresIn).toBe(3600);
expect(options.emailVerification).toMatchObject({
sendOnSignUp: false, autoSignInAfterVerification: true,
sendOnSignUp: false, autoSignInAfterVerification: true, expiresIn: 3600,
});
expect(options.user.changeEmail.enabled).toBe(true);
const otp = options.plugins.find((plugin: { id?: string }) => plugin.id === "email-otp");
expect(otp.options).toMatchObject({ sendVerificationOnSignUp: true, storeOTP: "hashed" });
expect(otp.options).toMatchObject({ sendVerificationOnSignUp: true, storeOTP: "hashed", expiresIn: 300 });
const user = { email: "[email protected]" };
await otp.options.sendVerificationOTP({ email: user.email, otp: "123456", type: "email-verification" });
const otpEmail = JSON.parse(String(fetchMock.mock.calls[0][1]?.body));
expect(otpEmail.subject).toContain("รหัส OTP");
expect(otpEmail.text).toContain("รหัส OTP: 123456");
expect(otpEmail.text).toContain("หมดอายุใน 5 นาที");
expect(otpEmail.text).toContain("อย่าแชร์รหัสนี้กับผู้อื่น");
expect(otpEmail.text).toContain("กรุณาอย่าตอบกลับ");
await options.emailVerification.sendVerificationEmail({ user, url: "https://guide.example.test/verify-email?token=abc" });
await options.user.changeEmail.sendChangeEmailConfirmation({ user, newEmail: "[email protected]",
url: "https://guide.example.test/verify-email?token=change" });
await options.emailAndPassword.sendResetPassword({ user, url: "https://guide.example.test/reset-password/abc" });
expect(fetchMock).toHaveBeenCalledTimes(4);
const emails = fetchMock.mock.calls.map((call) => JSON.parse(String(call[1]?.body)));
expect(emails[1].text).toContain(user.email);
expect(emails[1].text).toContain("ยืนยันอีเมลใหม่");
expect(emails[2].text).toContain(`อีเมลปัจจุบัน: ${user.email}\nอีเมลใหม่: [email protected]`);
expect(emails[2].text).toContain("คุณต้องเปิดลิงก์ในอีเมลใหม่");
expect(emails[3].text).toContain("รหัสผ่านของคุณจะเปลี่ยนเมื่อ");
expect(emails[3].text).toContain("รหัสผ่านเดิมของคุณจะยังใช้งานได้");
for (const email of emails.slice(1)) {
expect(email.text).toContain("หมดอายุใน 1 ชั่วโมง");
expect(email.text).toContain("อย่าแชร์หรือส่งต่อลิงก์นี้");
expect(email.text).toContain("หากคุณไม่ได้");
expect(email.text).toContain("กรุณาอย่าตอบกลับ");
}
for (const call of fetchMock.mock.calls) {
expect(call[0]).toBe("https://api.resend.com/emails");
expect(call[1]?.headers).toMatchObject({ Authorization: "Bearer test-key" });