From a430ccc0515b58067fcbfb4b33ce48e7a5cc111f Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Thu, 10 Oct 2024 19:10:25 +0800 Subject: [PATCH] Add tests for requestRecovery --- .../tests/controllers/authController.test.js | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/Server/tests/controllers/authController.test.js b/Server/tests/controllers/authController.test.js index 28cbc7437..fb5e753bc 100644 --- a/Server/tests/controllers/authController.test.js +++ b/Server/tests/controllers/authController.test.js @@ -3,6 +3,7 @@ const { loginUser, editUser, checkSuperadminExists, + requestRecovery, } = require("../../controllers/authController"); const jwt = require("jsonwebtoken"); @@ -257,3 +258,63 @@ describe("Auth Controller - checkSuperadminExists", async () => { ).to.be.true; }); }); + +describe("Auth Controller - requestRecovery", async () => { + beforeEach(() => { + req = { + body: { email: "test@test.com" }, + db: { + getUserByEmail: sinon.stub(), + requestRecoveryToken: sinon.stub(), + }, + settingsService: { + getSettings: sinon.stub().returns({ clientHost: "http://localhost" }), + }, + emailService: { + buildAndSendEmail: sinon.stub(), + }, + }; + res = { + status: sinon.stub().returnsThis(), + json: sinon.stub(), + }; + next = sinon.stub(); + }); + it("should throw an error if the email is not provided", async () => { + req.body = {}; + await requestRecovery(req, res, next); + expect(next.firstCall.args[0]).to.be.an("error"); + expect(next.firstCall.args[0].status).to.equal(422); + }); + it("should return a success message if the email is provided", async () => { + const user = { firstName: "John" }; + const recoveryToken = { token: "recovery-token" }; + const msgId = "message-id"; + req.db.getUserByEmail.resolves(user); + req.db.requestRecoveryToken.resolves(recoveryToken); + req.emailService.buildAndSendEmail.resolves(msgId); + await requestRecovery(req, res, next); + expect(req.db.getUserByEmail.calledOnceWith("test@test.com")).to.be.true; + expect(req.db.requestRecoveryToken.calledOnceWith(req, res)).to.be.true; + expect( + req.emailService.buildAndSendEmail.calledOnceWith( + "passwordResetTemplate", + { + name: "John", + email: "test@test.com", + url: "http://localhost/set-new-password/recovery-token", + }, + "test@test.com", + "Bluewave Uptime Password Reset" + ) + ).to.be.true; + expect(res.status.calledOnceWith(200)).to.be.true; + expect( + res.json.calledOnceWith({ + success: true, + msg: successMessages.AUTH_CREATE_RECOVERY_TOKEN, + data: msgId, + }) + ).to.be.true; + }); +});