import { hash256, Ctx } from "blitz"; import previewEmail from "preview-email"; import forgotPassword from "./forgot-password"; import db from "../../../db"; beforeEach(async () => { await db.$reset(); }); const generatedToken = "plain-token"; jest.mock("blitz", () => ({ ...jest.requireActual("blitz")!, generateToken: () => generatedToken, })); jest.mock("preview-email", () => jest.fn()); describe.skip("forgotPassword mutation", () => { it("does not throw error if user doesn't exist", async () => { await expect( forgotPassword({ email: "no-user@email.com" }, {} as Ctx), ).resolves.not.toThrow(); }); it("works correctly", async () => { // Create test user const user = await db.user.create({ data: { email: "user@example.com", tokens: { // Create old token to ensure it's deleted create: { type: "RESET_PASSWORD", hashedToken: "token", expiresAt: new Date(), sentTo: "user@example.com", }, }, }, include: { tokens: true }, }); // Invoke the mutation await forgotPassword({ email: user.email }, {} as Ctx); const tokens = await db.token.findMany({ where: { userId: user.id } }); const token = tokens[0]; if (!user.tokens[0]) throw new Error("Missing user token"); if (!token) throw new Error("Missing token"); // delete's existing tokens expect(tokens.length).toBe(1); expect(token.id).not.toBe(user.tokens[0].id); expect(token.type).toBe("RESET_PASSWORD"); expect(token.sentTo).toBe(user.email); expect(token.hashedToken).toBe(hash256(generatedToken)); expect(token.expiresAt > new Date()).toBe(true); expect(previewEmail).toBeCalled(); }); });