const request = require("supertest"); const app = require("../src/app"); const prisma = require("../src/config/prisma"); const mailer = require("../src/config/mailer"); jest.mock("../src/config/mailer", () => ({ sendMail: jest.fn(), })); // Comme le reste de la suite, ce fichier tourne sur la base de dev : il ne // touche qu'au compte qu'il crée lui-même, identifié par cet email. const testEmail = "rollback-mail-test@test.com"; const payload = { firstname: "Camille", lastname: "Martin", email: testEmail, password: "Password123", birthdate: "1990-05-14", gender: "Femme", }; beforeEach(async () => { jest.clearAllMocks(); await prisma.user.deleteMany({ where: { email: testEmail } }); }); afterAll(async () => { await prisma.user.deleteMany({ where: { email: testEmail } }); await prisma.$disconnect(); }); describe("Inscription - echec d'envoi du code de validation", () => { test("repond 502 et ne laisse aucun compte orphelin", async () => { mailer.sendMail.mockRejectedValue(new Error("SMTP indisponible")); const res = await request(app).post("/api/auth/register").send(payload); expect(res.statusCode).toBe(502); const user = await prisma.user.findUnique({ where: { email: testEmail } }); expect(user).toBeNull(); }); test("l'email reste reutilisable apres un echec d'envoi", async () => { mailer.sendMail.mockRejectedValueOnce(new Error("SMTP indisponible")); const echec = await request(app).post("/api/auth/register").send(payload); expect(echec.statusCode).toBe(502); mailer.sendMail.mockResolvedValue(true); const succes = await request(app).post("/api/auth/register").send(payload); expect(succes.statusCode).toBe(201); }); test("enregistre la date de naissance et le genre", async () => { mailer.sendMail.mockResolvedValue(true); const res = await request(app).post("/api/auth/register").send(payload); expect(res.statusCode).toBe(201); const user = await prisma.user.findUnique({ where: { email: testEmail } }); expect(user.gender).toBe("Femme"); expect(user.birthdate.toISOString()).toBe("1990-05-14T00:00:00.000Z"); }); });