From 17b177090aba46ddfe1ff856a9c294167514b9e2 Mon Sep 17 00:00:00 2001 From: RishiChaubey31 Date: Wed, 27 Aug 2025 10:29:06 +0530 Subject: [PATCH 1/8] initial commit --- test/fixtures/oooRequest/oooRequest.ts | 2 +- test/integration/requests.test.ts | 24 ++-- test/unit/middlewares/oooRequests.test.ts | 20 +-- test/unit/services/oooRequest.test.ts | 163 +++++++++++----------- 4 files changed, 107 insertions(+), 102 deletions(-) diff --git a/test/fixtures/oooRequest/oooRequest.ts b/test/fixtures/oooRequest/oooRequest.ts index 10dce241d..544796bdb 100644 --- a/test/fixtures/oooRequest/oooRequest.ts +++ b/test/fixtures/oooRequest/oooRequest.ts @@ -167,7 +167,7 @@ export const createOooRequests3 = { status: REQUEST_STATE.PENDING }; -export const acknowledgeOooRequest = { +export const TestacknowledgeOooRequest = { type: REQUEST_TYPE.OOO, status: REQUEST_STATE.APPROVED, comment: "OOO request approved as it's emergency." diff --git a/test/integration/requests.test.ts b/test/integration/requests.test.ts index 94b0d371c..ba724b6fc 100644 --- a/test/integration/requests.test.ts +++ b/test/integration/requests.test.ts @@ -15,7 +15,7 @@ import { validOooStatusRequests, validOooStatusUpdate, createOooRequests2, - acknowledgeOooRequest, + TestacknowledgeOooRequest, createOooRequests3, } from "../fixtures/oooRequest/oooRequest"; import { createRequest, updateRequest } from "../../models/requests"; @@ -351,7 +351,7 @@ describe("/requests OOO", function () { chai .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { expect(res).to.have.status(401); expect(res.body.error).to.equal("Unauthorized"); @@ -365,7 +365,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=false`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -381,7 +381,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/11111111111111?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -397,13 +397,13 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${authToken}`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); } expect(res.statusCode).to.equal(403); - // expect(res.body.message).to.equal(UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST); + expect(res.body.message).to.equal(UNAUTHORIZED_TO_CREATE_OOO_REQUEST); done(); }); }); @@ -413,7 +413,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${approvedOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -429,7 +429,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${rejectedOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -445,7 +445,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${onboardingRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -461,7 +461,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -477,7 +477,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send({...acknowledgeOooRequest, status: REQUEST_STATE.REJECTED}) + .send({...TestacknowledgeOooRequest, status: REQUEST_STATE.REJECTED}) .end(function (err, res) { if (err) { return done(err); @@ -494,7 +494,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(acknowledgeOooRequest) + .send(TestacknowledgeOooRequest) .end(function (err, res) { if (err) return done(err); expect(res.statusCode).to.equal(500); diff --git a/test/unit/middlewares/oooRequests.test.ts b/test/unit/middlewares/oooRequests.test.ts index 11272e860..8516a33ac 100644 --- a/test/unit/middlewares/oooRequests.test.ts +++ b/test/unit/middlewares/oooRequests.test.ts @@ -4,9 +4,9 @@ const { expect } = chai; import { createOooStatusRequestValidator, - // acknowledgeOOORequestsValidator, + acknowledgeOooRequest, } from "./../../../middlewares/validators/oooRequests"; -import { acknowledgeOooRequest, validOooStatusRequests, validOooStatusUpdate } from "../../fixtures/oooRequest/oooRequest"; +import { TestacknowledgeOooRequest, validOooStatusRequests, validOooStatusUpdate } from "../../fixtures/oooRequest/oooRequest"; import _ from "lodash"; describe("OOO Status Request Validators", function () { @@ -94,37 +94,37 @@ describe("OOO Status Request Validators", function () { describe.skip("acknowledgeOOORequestsValidator", function () { it("should not validate for an invalid request for invalid request type", async function () { req = { - body: { ...acknowledgeOooRequest, type: "XYZ"} + body: { ...TestacknowledgeOooRequest, type: "XYZ"} }; - // await acknowledgeOOORequestsValidator(req, res, nextSpy); + // await acknowledgeOooRequestValidator(req, res, nextSpy); expect(nextSpy.notCalled).to.be.true; }); it("should not validate for an invalid request if status is incorrect", async function () { req = { - body: { ...acknowledgeOooRequest, status: "PENDING"} + body: { ...TestacknowledgeOooRequest, status: "PENDING"} }; - // await acknowledgeOOORequestsValidator(req, res, nextSpy); + // await acknowledgeOooRequestValidator(req, res, nextSpy); expect(nextSpy.notCalled).to.be.true; }); it("should validate for a valid acknowledge OOO request if comment not provided by superusers", async function() { req = { - body: _.omit(acknowledgeOooRequest, "comment") + body: _.omit(TestacknowledgeOooRequest, "comment") }; res = {}; - // await acknowledgeOOORequestsValidator(req, res, nextSpy); + // await acknowledgeOooRequestValidator(req, res, nextSpy); expect(nextSpy.calledOnce).to.be.true; }); it("should validate for a valid acknowledge OOO request", async function() { req = { - body: acknowledgeOooRequest + body: TestacknowledgeOooRequest }; res = {}; - // await acknowledgeOOORequestsValidator(req, res, nextSpy); + await acknowledgeOooRequest(req, res, nextSpy); expect(nextSpy.calledOnce).to.be.true; }); }); diff --git a/test/unit/services/oooRequest.test.ts b/test/unit/services/oooRequest.test.ts index c71580b1a..f16f328cb 100644 --- a/test/unit/services/oooRequest.test.ts +++ b/test/unit/services/oooRequest.test.ts @@ -15,8 +15,8 @@ import { import { createOooRequest, validateUserStatus, - // acknowledgeOOORequest, - // validateOOOAcknowledgeRequest + acknowledgeOooRequest, + validateOooAcknowledgeRequest } from "../../../services/oooRequest"; import { expect } from "chai"; import { testUserStatus, validOooStatusRequests, validUserCurrentStatus, createdOOORequest } from "../../fixtures/oooRequest/oooRequest"; @@ -25,7 +25,7 @@ import { userState } from "../../../constants/userStatus"; import addUser from "../../utils/addUser"; import userDataFixture from "../../fixtures/user/user"; import * as logService from "../../../services/logService"; -import { createOooRequests3 } from "../../fixtures/oooRequest/oooRequest"; +import { createOooRequests3, TestacknowledgeOooRequest } from "../../fixtures/oooRequest/oooRequest"; import { createRequest } from "../../../models/requests"; describe("Test OOO Request Service", function() { @@ -124,42 +124,47 @@ describe("Test OOO Request Service", function() { }); it("should return INVALID_REQUEST_TYPE if request type is not OOO", async function() { - // const validationResponse = await validateOOOAcknowledgeRequest( - // testOooRequest.id, - // REQUEST_TYPE.ONBOARDING, - // testOooRequest.status - // ); - // expect(validationResponse.error).to.be.not.undefined; - // expect(validationResponse.error).to.equal(INVALID_REQUEST_TYPE); + try { + await validateOooAcknowledgeRequest( + REQUEST_TYPE.ONBOARDING, + testOooRequest.status + ); + expect.fail("Expected function to throw an error"); + } catch (error) { + expect(error.message).to.include(INVALID_REQUEST_TYPE); + } }); it("should return REQUEST_ALREADY_APPROVED if request is already approved", async function() { - // const validationResponse = await validateOOOAcknowledgeRequest( - // testOooRequest.id, - // testOooRequest.type, - // REQUEST_STATE.APPROVED - // ); - // expect(validationResponse.error).to.be.not.undefined; - // expect(validationResponse.error).to.equal(REQUEST_ALREADY_APPROVED); + try { + await validateOooAcknowledgeRequest( + REQUEST_TYPE.OOO, + REQUEST_STATE.APPROVED + ); + expect.fail("Expected function to throw an error"); + } catch (error) { + expect(error.message).to.include(REQUEST_ALREADY_APPROVED); + } }); it("should return REQUEST_ALREADY_REJECTED if request is already rejected", async function() { - // const validationResponse = await validateOOOAcknowledgeRequest( - // testOooRequest.id, - // testOooRequest.type, - // REQUEST_STATE.REJECTED - // ); - // expect(validationResponse.error).to.be.not.undefined; - // expect(validationResponse.error).to.equal(REQUEST_ALREADY_REJECTED); + try { + await validateOooAcknowledgeRequest( + REQUEST_TYPE.OOO, + REQUEST_STATE.REJECTED + ); + expect.fail("Expected function to throw an error"); + } catch (error) { + expect(error.message).to.include(REQUEST_ALREADY_REJECTED); + } }); it("should return undefined when all validation checks passes", async function() { - // const response = await validateOOOAcknowledgeRequest( - // testOooRequest.id, - // testOooRequest.type, - // testOooRequest.status - // ); - // expect(response).to.not.exist; + const response = await validateOooAcknowledgeRequest( + REQUEST_TYPE.OOO, + REQUEST_STATE.PENDING + ); + expect(response).to.not.exist; }); }); @@ -182,64 +187,64 @@ describe("Test OOO Request Service", function() { }); it("should return REQUEST_DOES_NOT_EXIST if invalid request id is passed", async function () { - // const invalidOOORequestId = "11111111111111111111"; - // const response = await acknowledgeOOORequest( - // invalidOOORequestId, - // acknowledgeOooRequest, - // testSuperUserId - // ); - // expect(response.error).to.equal(REQUEST_DOES_NOT_EXIST); + const invalidOOORequestId = "11111111111111111111"; + const response = await acknowledgeOooRequest( + invalidOOORequestId, + TestacknowledgeOooRequest, + testSuperUserId + ); + expect(response.message).to.equal(REQUEST_DOES_NOT_EXIST); }); it("should approve OOO request", async function() { - // const response = await acknowledgeOOORequest( - // testOooRequest.id, - // acknowledgeOooRequest, - // testSuperUserId - // ); - // expect(response).to.deep.include({ - // message: REQUEST_APPROVED_SUCCESSFULLY, - // data: { - // ...acknowledgeOooRequest, - // id: testOooRequest.id, - // lastModifiedBy: testSuperUserId, - // updatedAt: response.data.updatedAt - // } - // }); + const response = await acknowledgeOooRequest( + testOooRequest.id, + TestacknowledgeOooRequest, + testSuperUserId + ); + expect(response).to.deep.include({ + message: REQUEST_APPROVED_SUCCESSFULLY, + data: { + ...acknowledgeOooRequest, + id: testOooRequest.id, + lastModifiedBy: testSuperUserId, + updatedAt: response.data.updatedAt + } + }); }); it("should reject OOO request", async function() { - // const response = await acknowledgeOOORequest( - // testOooRequest.id, - // { ...acknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, - // testSuperUserId - // ); - // expect(response).to.deep.include({ - // message: REQUEST_REJECTED_SUCCESSFULLY, - // data: { - // ...acknowledgeOooRequest, - // id: testOooRequest.id, - // status: REQUEST_STATE.REJECTED, - // lastModifiedBy: testSuperUserId, - // updatedAt: response.data.updatedAt - // } - // }); + const response = await acknowledgeOooRequest( + testOooRequest.id, + { ...TestacknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, + testSuperUserId + ); + expect(response).to.deep.include({ + message: REQUEST_REJECTED_SUCCESSFULLY, + data: { + ...acknowledgeOooRequest, + id: testOooRequest.id, + status: REQUEST_STATE.REJECTED, + lastModifiedBy: testSuperUserId, + updatedAt: response.data.updatedAt + } + }); }); it("should throw error", async function() { - // sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - // const createSpy = sinon.spy(require("../../../services/oooRequest"), "acknowledgeOOORequest"); - - // try { - // await acknowledgeOOORequest( - // testOooRequest.id, - // acknowledgeOooRequest, - // testSuperUserId - // ); - // } catch (error) { - // expect(error.message).to.equal(errorMessage); - // expect(createSpy.calledOnce).to.be.true; - // } + sinon.stub(logService, "addLog").throws(new Error(errorMessage)); + const createSpy = sinon.spy(require("../../../services/oooRequest"), "acknowledgeOOORequest"); + + try { + await acknowledgeOooRequest( + testOooRequest.id, + TestacknowledgeOooRequest, + testSuperUserId + ); + } catch (error) { + expect(error.message).to.equal(errorMessage); + expect(createSpy.calledOnce).to.be.true; + } }); }); }); \ No newline at end of file From 68b1b0eae7447dc84b338c1d05e16939bfc24700 Mon Sep 17 00:00:00 2001 From: RishiChaubey31 Date: Sun, 31 Aug 2025 00:12:08 +0530 Subject: [PATCH 2/8] added-more-test --- middlewares/validators/oooRequests.ts | 1 - test/fixtures/oooRequest/oooRequest.ts | 2 +- test/integration/requests.test.ts | 22 +++++----- test/unit/middlewares/oooRequests.test.ts | 36 +++++++++------ test/unit/services/oooRequest.test.ts | 53 +++++++++++++---------- 5 files changed, 65 insertions(+), 49 deletions(-) diff --git a/middlewares/validators/oooRequests.ts b/middlewares/validators/oooRequests.ts index efd6b4a0d..1ed0f6692 100644 --- a/middlewares/validators/oooRequests.ts +++ b/middlewares/validators/oooRequests.ts @@ -89,7 +89,6 @@ export const acknowledgeOooRequestValidator = async ( next(); } catch (error) { const errorMessages = error.details.map((detail) => detail.message); - logger.error(`Error while validating request payload : ${errorMessages}`); return res.boom.badRequest(errorMessages); } }; diff --git a/test/fixtures/oooRequest/oooRequest.ts b/test/fixtures/oooRequest/oooRequest.ts index 544796bdb..160e96861 100644 --- a/test/fixtures/oooRequest/oooRequest.ts +++ b/test/fixtures/oooRequest/oooRequest.ts @@ -167,7 +167,7 @@ export const createOooRequests3 = { status: REQUEST_STATE.PENDING }; -export const TestacknowledgeOooRequest = { +export const TestAcknowledgeOooRequest = { type: REQUEST_TYPE.OOO, status: REQUEST_STATE.APPROVED, comment: "OOO request approved as it's emergency." diff --git a/test/integration/requests.test.ts b/test/integration/requests.test.ts index ba724b6fc..d98a57a3a 100644 --- a/test/integration/requests.test.ts +++ b/test/integration/requests.test.ts @@ -15,7 +15,7 @@ import { validOooStatusRequests, validOooStatusUpdate, createOooRequests2, - TestacknowledgeOooRequest, + TestAcknowledgeOooRequest, createOooRequests3, } from "../fixtures/oooRequest/oooRequest"; import { createRequest, updateRequest } from "../../models/requests"; @@ -351,7 +351,7 @@ describe("/requests OOO", function () { chai .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { expect(res).to.have.status(401); expect(res.body.error).to.equal("Unauthorized"); @@ -365,7 +365,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=false`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -381,7 +381,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/11111111111111?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -397,7 +397,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${authToken}`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -413,7 +413,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${approvedOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -429,7 +429,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${rejectedOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -445,7 +445,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${onboardingRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -461,7 +461,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -477,7 +477,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send({...TestacknowledgeOooRequest, status: REQUEST_STATE.REJECTED}) + .send({...TestAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED}) .end(function (err, res) { if (err) { return done(err); @@ -494,7 +494,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestacknowledgeOooRequest) + .send(TestAcknowledgeOooRequest) .end(function (err, res) { if (err) return done(err); expect(res.statusCode).to.equal(500); diff --git a/test/unit/middlewares/oooRequests.test.ts b/test/unit/middlewares/oooRequests.test.ts index 8516a33ac..8bf531f20 100644 --- a/test/unit/middlewares/oooRequests.test.ts +++ b/test/unit/middlewares/oooRequests.test.ts @@ -4,9 +4,9 @@ const { expect } = chai; import { createOooStatusRequestValidator, - acknowledgeOooRequest, + acknowledgeOooRequestValidator, } from "./../../../middlewares/validators/oooRequests"; -import { TestacknowledgeOooRequest, validOooStatusRequests, validOooStatusUpdate } from "../../fixtures/oooRequest/oooRequest"; +import { TestAcknowledgeOooRequest, validOooStatusRequests, validOooStatusUpdate } from "../../fixtures/oooRequest/oooRequest"; import _ from "lodash"; describe("OOO Status Request Validators", function () { @@ -91,40 +91,50 @@ describe("OOO Status Request Validators", function () { }); }); - describe.skip("acknowledgeOOORequestsValidator", function () { + describe("acknowledgeOOORequestsValidator", function () { it("should not validate for an invalid request for invalid request type", async function () { req = { - body: { ...TestacknowledgeOooRequest, type: "XYZ"} + body: { ...TestAcknowledgeOooRequest, type: "XYZ"}, + params: { id: "test-id" } }; - // await acknowledgeOooRequestValidator(req, res, nextSpy); - expect(nextSpy.notCalled).to.be.true; + try { + await acknowledgeOooRequestValidator(req as any, res as any, nextSpy); + } catch (error) { + expect(nextSpy.notCalled).to.be.true; + } }); it("should not validate for an invalid request if status is incorrect", async function () { req = { - body: { ...TestacknowledgeOooRequest, status: "PENDING"} + body: { ...TestAcknowledgeOooRequest, status: "PENDING"}, + params: { id: "test-id" } }; - // await acknowledgeOooRequestValidator(req, res, nextSpy); - expect(nextSpy.notCalled).to.be.true; + try { + await acknowledgeOooRequestValidator(req as any, res as any, nextSpy); + } catch (error) { + expect(nextSpy.notCalled).to.be.true; + } }); it("should validate for a valid acknowledge OOO request if comment not provided by superusers", async function() { req = { - body: _.omit(TestacknowledgeOooRequest, "comment") + body: _.omit(TestAcknowledgeOooRequest, "comment"), + params: { id: "test-id" } }; res = {}; - // await acknowledgeOooRequestValidator(req, res, nextSpy); + await acknowledgeOooRequestValidator(req as any, res as any, nextSpy); expect(nextSpy.calledOnce).to.be.true; }); it("should validate for a valid acknowledge OOO request", async function() { req = { - body: TestacknowledgeOooRequest + body: TestAcknowledgeOooRequest, + params: { id: "test-id" } }; res = {}; - await acknowledgeOooRequest(req, res, nextSpy); + await acknowledgeOooRequestValidator(req as any, res as any, nextSpy); expect(nextSpy.calledOnce).to.be.true; }); }); diff --git a/test/unit/services/oooRequest.test.ts b/test/unit/services/oooRequest.test.ts index f16f328cb..a5dd24448 100644 --- a/test/unit/services/oooRequest.test.ts +++ b/test/unit/services/oooRequest.test.ts @@ -25,7 +25,7 @@ import { userState } from "../../../constants/userStatus"; import addUser from "../../utils/addUser"; import userDataFixture from "../../fixtures/user/user"; import * as logService from "../../../services/logService"; -import { createOooRequests3, TestacknowledgeOooRequest } from "../../fixtures/oooRequest/oooRequest"; +import { createOooRequests3, TestAcknowledgeOooRequest } from "../../fixtures/oooRequest/oooRequest"; import { createRequest } from "../../../models/requests"; describe("Test OOO Request Service", function() { @@ -110,7 +110,7 @@ describe("Test OOO Request Service", function() { }); }); - describe.skip("validateOOOAcknowledgeRequest", function() { + describe("validateOOOAcknowledgeRequest", function() { let testOooRequest; @@ -168,7 +168,7 @@ describe("Test OOO Request Service", function() { }); }); - describe.skip("acknowledgeOOORequest", function() { + describe("acknowledgeOOORequest", function() { let testSuperUserId; let testOooRequest; @@ -188,26 +188,33 @@ describe("Test OOO Request Service", function() { it("should return REQUEST_DOES_NOT_EXIST if invalid request id is passed", async function () { const invalidOOORequestId = "11111111111111111111"; - const response = await acknowledgeOooRequest( - invalidOOORequestId, - TestacknowledgeOooRequest, - testSuperUserId - ); - expect(response.message).to.equal(REQUEST_DOES_NOT_EXIST); + try { + await acknowledgeOooRequest( + invalidOOORequestId, + TestAcknowledgeOooRequest, + testSuperUserId + ); + expect.fail("Expected function to throw an error"); + } catch (error) { + // When getRequests returns null, the function tries to access requestData.type which throws this error + expect(error.message).to.include("Cannot read properties of null"); + } }); it("should approve OOO request", async function() { const response = await acknowledgeOooRequest( testOooRequest.id, - TestacknowledgeOooRequest, + TestAcknowledgeOooRequest, testSuperUserId ); expect(response).to.deep.include({ message: REQUEST_APPROVED_SUCCESSFULLY, data: { - ...acknowledgeOooRequest, id: testOooRequest.id, lastModifiedBy: testSuperUserId, + status: REQUEST_STATE.APPROVED, + type: REQUEST_TYPE.OOO, + comment: TestAcknowledgeOooRequest.comment, updatedAt: response.data.updatedAt } }); @@ -216,34 +223,34 @@ describe("Test OOO Request Service", function() { it("should reject OOO request", async function() { const response = await acknowledgeOooRequest( testOooRequest.id, - { ...TestacknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, + { ...TestAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, testSuperUserId ); expect(response).to.deep.include({ message: REQUEST_REJECTED_SUCCESSFULLY, - data: { - ...acknowledgeOooRequest, - id: testOooRequest.id, - status: REQUEST_STATE.REJECTED, - lastModifiedBy: testSuperUserId, - updatedAt: response.data.updatedAt - } + data: { + id: testOooRequest.id, + status: REQUEST_STATE.REJECTED, + lastModifiedBy: testSuperUserId, + type: REQUEST_TYPE.OOO, + comment: TestAcknowledgeOooRequest.comment, + updatedAt: response.data.updatedAt + } }); }); it("should throw error", async function() { sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - const createSpy = sinon.spy(require("../../../services/oooRequest"), "acknowledgeOOORequest"); - + try { await acknowledgeOooRequest( testOooRequest.id, - TestacknowledgeOooRequest, + TestAcknowledgeOooRequest, testSuperUserId ); + expect.fail("Expected function to throw an error"); } catch (error) { expect(error.message).to.equal(errorMessage); - expect(createSpy.calledOnce).to.be.true; } }); }); From 5e8bf8bbbf775ff86da0a6523de1b9ca89822af0 Mon Sep 17 00:00:00 2001 From: RishiChaubey31 Date: Sun, 31 Aug 2025 00:17:18 +0530 Subject: [PATCH 3/8] fix-test-title --- test/unit/services/oooRequest.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/services/oooRequest.test.ts b/test/unit/services/oooRequest.test.ts index a5dd24448..07d1edf21 100644 --- a/test/unit/services/oooRequest.test.ts +++ b/test/unit/services/oooRequest.test.ts @@ -239,7 +239,7 @@ describe("Test OOO Request Service", function() { }); }); - it("should throw error", async function() { + it("should propagate error when logging fails", async function() { sinon.stub(logService, "addLog").throws(new Error(errorMessage)); try { From aa7c5b4289ea0311f12b4920b24ee3e08408da0b Mon Sep 17 00:00:00 2001 From: RishiChaubey31 Date: Wed, 3 Sep 2025 01:01:09 +0530 Subject: [PATCH 4/8] removed-try/catch-block --- test/unit/middlewares/oooRequests.test.ts | 9 +- test/unit/services/oooRequest.test.ts | 398 ++++++++++------------ 2 files changed, 182 insertions(+), 225 deletions(-) diff --git a/test/unit/middlewares/oooRequests.test.ts b/test/unit/middlewares/oooRequests.test.ts index 8bf531f20..7ecf1b927 100644 --- a/test/unit/middlewares/oooRequests.test.ts +++ b/test/unit/middlewares/oooRequests.test.ts @@ -8,6 +8,7 @@ import { } from "./../../../middlewares/validators/oooRequests"; import { TestAcknowledgeOooRequest, validOooStatusRequests, validOooStatusUpdate } from "../../fixtures/oooRequest/oooRequest"; import _ from "lodash"; +import { AcknowledgeOooRequest, OooRequestResponse } from "../../../types/oooRequest"; describe("OOO Status Request Validators", function () { let req: any; @@ -99,7 +100,7 @@ describe("OOO Status Request Validators", function () { }; try { - await acknowledgeOooRequestValidator(req as any, res as any, nextSpy); + await acknowledgeOooRequestValidator(req as AcknowledgeOooRequest, res as OooRequestResponse, nextSpy); } catch (error) { expect(nextSpy.notCalled).to.be.true; } @@ -112,7 +113,7 @@ describe("OOO Status Request Validators", function () { }; try { - await acknowledgeOooRequestValidator(req as any, res as any, nextSpy); + await acknowledgeOooRequestValidator(req as AcknowledgeOooRequest, res as OooRequestResponse, nextSpy); } catch (error) { expect(nextSpy.notCalled).to.be.true; } @@ -124,7 +125,7 @@ describe("OOO Status Request Validators", function () { params: { id: "test-id" } }; res = {}; - await acknowledgeOooRequestValidator(req as any, res as any, nextSpy); + await acknowledgeOooRequestValidator(req as AcknowledgeOooRequest, res as OooRequestResponse, nextSpy); expect(nextSpy.calledOnce).to.be.true; }); @@ -134,7 +135,7 @@ describe("OOO Status Request Validators", function () { params: { id: "test-id" } }; res = {}; - await acknowledgeOooRequestValidator(req as any, res as any, nextSpy); + await acknowledgeOooRequestValidator(req as AcknowledgeOooRequest, res as OooRequestResponse, nextSpy); expect(nextSpy.calledOnce).to.be.true; }); }); diff --git a/test/unit/services/oooRequest.test.ts b/test/unit/services/oooRequest.test.ts index 07d1edf21..6233e61c1 100644 --- a/test/unit/services/oooRequest.test.ts +++ b/test/unit/services/oooRequest.test.ts @@ -1,25 +1,30 @@ import sinon from "sinon"; import cleanDb from "../../utils/cleanDb"; import { - INVALID_REQUEST_TYPE, - REQUEST_ALREADY_APPROVED, - REQUEST_ALREADY_REJECTED, - REQUEST_APPROVED_SUCCESSFULLY, - REQUEST_DOES_NOT_EXIST, - REQUEST_REJECTED_SUCCESSFULLY, - REQUEST_STATE, - REQUEST_TYPE, - OOO_STATUS_ALREADY_EXIST, - USER_STATUS_NOT_FOUND, + INVALID_REQUEST_TYPE, + REQUEST_ALREADY_APPROVED, + REQUEST_ALREADY_REJECTED, + REQUEST_APPROVED_SUCCESSFULLY, + REQUEST_DOES_NOT_EXIST, + REQUEST_REJECTED_SUCCESSFULLY, + REQUEST_STATE, + REQUEST_TYPE, + OOO_STATUS_ALREADY_EXIST, + USER_STATUS_NOT_FOUND, } from "../../../constants/requests"; -import { - createOooRequest, - validateUserStatus, - acknowledgeOooRequest, - validateOooAcknowledgeRequest +import { + createOooRequest, + validateUserStatus, + acknowledgeOooRequest, + validateOooAcknowledgeRequest, } from "../../../services/oooRequest"; import { expect } from "chai"; -import { testUserStatus, validOooStatusRequests, validUserCurrentStatus, createdOOORequest } from "../../fixtures/oooRequest/oooRequest"; +import { + testUserStatus, + validOooStatusRequests, + validUserCurrentStatus, + createdOOORequest, +} from "../../fixtures/oooRequest/oooRequest"; import { updateUserStatus } from "../../../models/userStatus"; import { userState } from "../../../constants/userStatus"; import addUser from "../../utils/addUser"; @@ -28,230 +33,181 @@ import * as logService from "../../../services/logService"; import { createOooRequests3, TestAcknowledgeOooRequest } from "../../fixtures/oooRequest/oooRequest"; import { createRequest } from "../../../models/requests"; -describe("Test OOO Request Service", function() { - - let testUserName: string; - let testUserId: string; - const errorMessage = "Unexpected error occured"; - - beforeEach(async function() { - const users = userDataFixture(); - testUserId = await addUser(users[8]); - testUserName = users[8].username; +describe("Test OOO Request Service", function () { + let testUserName: string; + let testUserId: string; + const errorMessage = "Unexpected error occured"; + + // Helper function to test async errors without try-catch + const expectAsyncError = async (promise: Promise, expectedMessage: string) => { + const error = await promise.catch((err) => err); + expect(error).to.exist; + expect(error.message).to.include(expectedMessage); + }; + + beforeEach(async function () { + const users = userDataFixture(); + testUserId = await addUser(users[8]); + testUserName = users[8].username; + }); + + afterEach(async function () { + sinon.restore(); + await cleanDb(); + }); + + describe("validateUserStatus", function () { + it("should return USER_STATUS_NOT_FOUND if user status not found", async function () { + const validationResponse = await validateUserStatus(testUserId, { ...testUserStatus, userStatusExists: false }); + expect(validationResponse).to.be.not.undefined; + expect(validationResponse.error).to.equal(USER_STATUS_NOT_FOUND); }); - afterEach(async function() { - sinon.restore(); - await cleanDb(); + it("should return OOO_STATUS_ALREADY_EXIST if user status is already OOO", async function () { + const validationResponse = await validateUserStatus(testUserId, { + ...testUserStatus, + data: { + ...testUserStatus.data, + currentStatus: { + ...testUserStatus.data.currentStatus, + state: userState.OOO, + }, + }, + }); + expect(validationResponse).to.be.not.undefined; + expect(validationResponse.error).to.equal(OOO_STATUS_ALREADY_EXIST); }); - describe("validateUserStatus", function() { - - it("should return USER_STATUS_NOT_FOUND if user status not found", async function() { - const validationResponse = await validateUserStatus( - testUserId, - { ...testUserStatus, userStatusExists: false } - ); - expect(validationResponse).to.be.not.undefined; - expect(validationResponse.error).to.equal(USER_STATUS_NOT_FOUND); - }); - - it("should return OOO_STATUS_ALREADY_EXIST if user status is already OOO", async function() { - const validationResponse = await validateUserStatus( - testUserId, - { - ...testUserStatus, - data: { - ...testUserStatus.data, - currentStatus: { - ...testUserStatus.data.currentStatus, - state: userState.OOO - } - } - } - ); - expect(validationResponse).to.be.not.undefined; - expect(validationResponse.error).to.equal(OOO_STATUS_ALREADY_EXIST); - }); - - it("should return undefined when all validation checks passes", async function() { - const response = await validateUserStatus(testUserId, testUserStatus); - expect(response).to.not.exist; - }); + it("should return undefined when all validation checks passes", async function () { + const response = await validateUserStatus(testUserId, testUserStatus); + expect(response).to.not.exist; }); + }); - describe("createOooRequest", function() { - - beforeEach(async function() { - await updateUserStatus(testUserId, testUserStatus.data); - }); - - afterEach(async function () { - sinon.restore(); - }); - - it("should create OOO request", async function() { - const response = await createOooRequest(validOooStatusRequests, testUserId); - expect(response).to.deep.include({ - ...createdOOORequest, - id: response.id, - requestedBy: testUserId - }); - }); - - it("should throw error", async function () { - sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - - try { - await createOooRequest(validOooStatusRequests, testUserId); - } catch (error) { - expect(error.message).to.equal(errorMessage); - } - }); + describe("createOooRequest", function () { + beforeEach(async function () { + await updateUserStatus(testUserId, testUserStatus.data); }); - describe("validateOOOAcknowledgeRequest", function() { - - let testOooRequest; - - beforeEach(async function () { - testOooRequest = await createRequest({ - ...createOooRequests3, - userId: testUserId, - comment: null, - lastModifiedBy: null, - }); - }); + afterEach(async function () { + sinon.restore(); + }); - it("should return INVALID_REQUEST_TYPE if request type is not OOO", async function() { - try { - await validateOooAcknowledgeRequest( - REQUEST_TYPE.ONBOARDING, - testOooRequest.status - ); - expect.fail("Expected function to throw an error"); - } catch (error) { - expect(error.message).to.include(INVALID_REQUEST_TYPE); - } - }); + it("should create OOO request", async function () { + const response = await createOooRequest(validOooStatusRequests, testUserId); + expect(response).to.deep.include({ + ...createdOOORequest, + id: response.id, + requestedBy: testUserId, + }); + }); - it("should return REQUEST_ALREADY_APPROVED if request is already approved", async function() { - try { - await validateOooAcknowledgeRequest( - REQUEST_TYPE.OOO, - REQUEST_STATE.APPROVED - ); - expect.fail("Expected function to throw an error"); - } catch (error) { - expect(error.message).to.include(REQUEST_ALREADY_APPROVED); - } - }); + it("should throw error", async function () { + sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - it("should return REQUEST_ALREADY_REJECTED if request is already rejected", async function() { - try { - await validateOooAcknowledgeRequest( - REQUEST_TYPE.OOO, - REQUEST_STATE.REJECTED - ); - expect.fail("Expected function to throw an error"); - } catch (error) { - expect(error.message).to.include(REQUEST_ALREADY_REJECTED); - } - }); + try { + await createOooRequest(validOooStatusRequests, testUserId); + } catch (error) { + expect(error.message).to.equal(errorMessage); + } + }); + }); + + describe("validateOOOAcknowledgeRequest", function () { + let testOooRequest; + + beforeEach(async function () { + testOooRequest = await createRequest({ + ...createOooRequests3, + userId: testUserId, + comment: null, + lastModifiedBy: null, + }); + }); - it("should return undefined when all validation checks passes", async function() { - const response = await validateOooAcknowledgeRequest( - REQUEST_TYPE.OOO, - REQUEST_STATE.PENDING - ); - expect(response).to.not.exist; - }); + it("should return INVALID_REQUEST_TYPE if request type is not OOO", async function () { + const promise = validateOooAcknowledgeRequest(REQUEST_TYPE.ONBOARDING, testOooRequest.status); + await expectAsyncError(promise, INVALID_REQUEST_TYPE); }); - describe("acknowledgeOOORequest", function() { + it("should return REQUEST_ALREADY_APPROVED if request is already approved", async function () { + const promise = validateOooAcknowledgeRequest(REQUEST_TYPE.OOO, REQUEST_STATE.APPROVED); + await expectAsyncError(promise, REQUEST_ALREADY_APPROVED); + }); - let testSuperUserId; - let testOooRequest; + it("should return REQUEST_ALREADY_REJECTED if request is already rejected", async function () { + const promise = validateOooAcknowledgeRequest(REQUEST_TYPE.OOO, REQUEST_STATE.REJECTED); + await expectAsyncError(promise, REQUEST_ALREADY_REJECTED); + }); - beforeEach(async function () { - const users = userDataFixture(); - const superUserId = await addUser(users[4]); - testSuperUserId = superUserId; + it("should return undefined when all validation checks passes", async function () { + const response = await validateOooAcknowledgeRequest(REQUEST_TYPE.OOO, REQUEST_STATE.PENDING); + expect(response).to.not.exist; + }); + }); + + describe("acknowledgeOOORequest", function () { + let testSuperUserId; + let testOooRequest; + + beforeEach(async function () { + const users = userDataFixture(); + const superUserId = await addUser(users[4]); + testSuperUserId = superUserId; + + testOooRequest = await createRequest({ + ...createOooRequests3, + userId: testUserId, + comment: null, + lastModifiedBy: null, + }); + }); - testOooRequest = await createRequest({ - ...createOooRequests3, - userId: testUserId, - comment: null, - lastModifiedBy: null, - }); - }); + it("should return 'Request not found' if invalid request id is passed", async function () { + const invalidOOORequestId = "11111111111111111111"; + const promise = acknowledgeOooRequest(invalidOOORequestId, TestAcknowledgeOooRequest, testSuperUserId); + await expectAsyncError(promise, "Request not found"); + }); - it("should return REQUEST_DOES_NOT_EXIST if invalid request id is passed", async function () { - const invalidOOORequestId = "11111111111111111111"; - try { - await acknowledgeOooRequest( - invalidOOORequestId, - TestAcknowledgeOooRequest, - testSuperUserId - ); - expect.fail("Expected function to throw an error"); - } catch (error) { - // When getRequests returns null, the function tries to access requestData.type which throws this error - expect(error.message).to.include("Cannot read properties of null"); - } - }); + it("should approve OOO request", async function () { + const response = await acknowledgeOooRequest(testOooRequest.id, TestAcknowledgeOooRequest, testSuperUserId); + expect(response).to.deep.include({ + message: REQUEST_APPROVED_SUCCESSFULLY, + data: { + id: testOooRequest.id, + lastModifiedBy: testSuperUserId, + status: REQUEST_STATE.APPROVED, + type: REQUEST_TYPE.OOO, + comment: TestAcknowledgeOooRequest.comment, + updatedAt: response.data.updatedAt, + }, + }); + }); - it("should approve OOO request", async function() { - const response = await acknowledgeOooRequest( - testOooRequest.id, - TestAcknowledgeOooRequest, - testSuperUserId - ); - expect(response).to.deep.include({ - message: REQUEST_APPROVED_SUCCESSFULLY, - data: { - id: testOooRequest.id, - lastModifiedBy: testSuperUserId, - status: REQUEST_STATE.APPROVED, - type: REQUEST_TYPE.OOO, - comment: TestAcknowledgeOooRequest.comment, - updatedAt: response.data.updatedAt - } - }); - }); + it("should reject OOO request", async function () { + const response = await acknowledgeOooRequest( + testOooRequest.id, + { ...TestAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, + testSuperUserId + ); + expect(response).to.deep.include({ + message: REQUEST_REJECTED_SUCCESSFULLY, + data: { + id: testOooRequest.id, + status: REQUEST_STATE.REJECTED, + lastModifiedBy: testSuperUserId, + type: REQUEST_TYPE.OOO, + comment: TestAcknowledgeOooRequest.comment, + updatedAt: response.data.updatedAt, + }, + }); + }); - it("should reject OOO request", async function() { - const response = await acknowledgeOooRequest( - testOooRequest.id, - { ...TestAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, - testSuperUserId - ); - expect(response).to.deep.include({ - message: REQUEST_REJECTED_SUCCESSFULLY, - data: { - id: testOooRequest.id, - status: REQUEST_STATE.REJECTED, - lastModifiedBy: testSuperUserId, - type: REQUEST_TYPE.OOO, - comment: TestAcknowledgeOooRequest.comment, - updatedAt: response.data.updatedAt - } - }); - }); + it("should propagate error when logging fails", async function () { + sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - it("should propagate error when logging fails", async function() { - sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - - try { - await acknowledgeOooRequest( - testOooRequest.id, - TestAcknowledgeOooRequest, - testSuperUserId - ); - expect.fail("Expected function to throw an error"); - } catch (error) { - expect(error.message).to.equal(errorMessage); - } - }); + const promise = acknowledgeOooRequest(testOooRequest.id, TestAcknowledgeOooRequest, testSuperUserId); + await expectAsyncError(promise, errorMessage); }); -}); \ No newline at end of file + }); +}); From ea7d45c7848c36384b3eb6102c1de8f29fa2406a Mon Sep 17 00:00:00 2001 From: RishiChaubey31 Date: Thu, 4 Sep 2025 00:32:25 +0530 Subject: [PATCH 5/8] fix-try-catch-cases --- test/fixtures/oooRequest/oooRequest.ts | 2 +- test/integration/requests.test.ts | 22 +++++------ test/unit/middlewares/oooRequests.test.ts | 33 +++++++++------- test/unit/services/oooRequest.test.ts | 48 +++++++---------------- 4 files changed, 44 insertions(+), 61 deletions(-) diff --git a/test/fixtures/oooRequest/oooRequest.ts b/test/fixtures/oooRequest/oooRequest.ts index 160e96861..36ba49cd8 100644 --- a/test/fixtures/oooRequest/oooRequest.ts +++ b/test/fixtures/oooRequest/oooRequest.ts @@ -167,7 +167,7 @@ export const createOooRequests3 = { status: REQUEST_STATE.PENDING }; -export const TestAcknowledgeOooRequest = { +export const testAcknowledgeOooRequest = { type: REQUEST_TYPE.OOO, status: REQUEST_STATE.APPROVED, comment: "OOO request approved as it's emergency." diff --git a/test/integration/requests.test.ts b/test/integration/requests.test.ts index d98a57a3a..d5560138b 100644 --- a/test/integration/requests.test.ts +++ b/test/integration/requests.test.ts @@ -15,7 +15,7 @@ import { validOooStatusRequests, validOooStatusUpdate, createOooRequests2, - TestAcknowledgeOooRequest, + testAcknowledgeOooRequest, createOooRequests3, } from "../fixtures/oooRequest/oooRequest"; import { createRequest, updateRequest } from "../../models/requests"; @@ -351,7 +351,7 @@ describe("/requests OOO", function () { chai .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { expect(res).to.have.status(401); expect(res.body.error).to.equal("Unauthorized"); @@ -365,7 +365,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=false`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -381,7 +381,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/11111111111111?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -397,7 +397,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${authToken}`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -413,7 +413,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${approvedOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -429,7 +429,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${rejectedOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -445,7 +445,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${onboardingRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -461,7 +461,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { if (err) { return done(err); @@ -477,7 +477,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send({...TestAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED}) + .send({...testAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED}) .end(function (err, res) { if (err) { return done(err); @@ -494,7 +494,7 @@ describe("/requests OOO", function () { .request(app) .patch(`/requests/${testOooRequest.id}?dev=true`) .set("cookie", `${cookieName}=${superUserToken}`) - .send(TestAcknowledgeOooRequest) + .send(testAcknowledgeOooRequest) .end(function (err, res) { if (err) return done(err); expect(res.statusCode).to.equal(500); diff --git a/test/unit/middlewares/oooRequests.test.ts b/test/unit/middlewares/oooRequests.test.ts index 7ecf1b927..369e3470a 100644 --- a/test/unit/middlewares/oooRequests.test.ts +++ b/test/unit/middlewares/oooRequests.test.ts @@ -6,7 +6,7 @@ import { createOooStatusRequestValidator, acknowledgeOooRequestValidator, } from "./../../../middlewares/validators/oooRequests"; -import { TestAcknowledgeOooRequest, validOooStatusRequests, validOooStatusUpdate } from "../../fixtures/oooRequest/oooRequest"; +import { testAcknowledgeOooRequest, validOooStatusRequests, validOooStatusUpdate } from "../../fixtures/oooRequest/oooRequest"; import _ from "lodash"; import { AcknowledgeOooRequest, OooRequestResponse } from "../../../types/oooRequest"; @@ -14,6 +14,13 @@ describe("OOO Status Request Validators", function () { let req: any; let res: any; let nextSpy; + + // Helper function to test async errors without try-catch + const expectAsyncError = async (promise: Promise, expectedMessage: string) => { + const error = await promise.catch((err) => err); + expect(error).to.exist; + expect(error.message).to.include(expectedMessage); + }; beforeEach(function () { res = { boom: { @@ -95,33 +102,29 @@ describe("OOO Status Request Validators", function () { describe("acknowledgeOOORequestsValidator", function () { it("should not validate for an invalid request for invalid request type", async function () { req = { - body: { ...TestAcknowledgeOooRequest, type: "XYZ"}, + body: { ...testAcknowledgeOooRequest, type: "XYZ"}, params: { id: "test-id" } }; - try { - await acknowledgeOooRequestValidator(req as AcknowledgeOooRequest, res as OooRequestResponse, nextSpy); - } catch (error) { - expect(nextSpy.notCalled).to.be.true; - } + await acknowledgeOooRequestValidator(req as AcknowledgeOooRequest, res as OooRequestResponse, nextSpy); + expect(res.boom.badRequest.calledOnce).to.be.true; + expect(nextSpy.notCalled).to.be.true; }); it("should not validate for an invalid request if status is incorrect", async function () { req = { - body: { ...TestAcknowledgeOooRequest, status: "PENDING"}, + body: { ...testAcknowledgeOooRequest, status: "PENDING"}, params: { id: "test-id" } }; - try { - await acknowledgeOooRequestValidator(req as AcknowledgeOooRequest, res as OooRequestResponse, nextSpy); - } catch (error) { - expect(nextSpy.notCalled).to.be.true; - } + await acknowledgeOooRequestValidator(req as AcknowledgeOooRequest, res as OooRequestResponse, nextSpy); + expect(res.boom.badRequest.calledOnce).to.be.true; + expect(nextSpy.notCalled).to.be.true; }); it("should validate for a valid acknowledge OOO request if comment not provided by superusers", async function() { req = { - body: _.omit(TestAcknowledgeOooRequest, "comment"), + body: _.omit(testAcknowledgeOooRequest, "comment"), params: { id: "test-id" } }; res = {}; @@ -131,7 +134,7 @@ describe("OOO Status Request Validators", function () { it("should validate for a valid acknowledge OOO request", async function() { req = { - body: TestAcknowledgeOooRequest, + body: testAcknowledgeOooRequest, params: { id: "test-id" } }; res = {}; diff --git a/test/unit/services/oooRequest.test.ts b/test/unit/services/oooRequest.test.ts index 6233e61c1..e5ed0a7ca 100644 --- a/test/unit/services/oooRequest.test.ts +++ b/test/unit/services/oooRequest.test.ts @@ -30,7 +30,7 @@ import { userState } from "../../../constants/userStatus"; import addUser from "../../utils/addUser"; import userDataFixture from "../../fixtures/user/user"; import * as logService from "../../../services/logService"; -import { createOooRequests3, TestAcknowledgeOooRequest } from "../../fixtures/oooRequest/oooRequest"; +import { createOooRequests3, testAcknowledgeOooRequest } from "../../fixtures/oooRequest/oooRequest"; import { createRequest } from "../../../models/requests"; describe("Test OOO Request Service", function () { @@ -38,11 +38,10 @@ describe("Test OOO Request Service", function () { let testUserId: string; const errorMessage = "Unexpected error occured"; - // Helper function to test async errors without try-catch - const expectAsyncError = async (promise: Promise, expectedMessage: string) => { + const expectAsyncError = async (promise: Promise, expectedMessage: string) => { const error = await promise.catch((err) => err); expect(error).to.exist; - expect(error.message).to.include(expectedMessage); + expect((error as Error).message).to.include(expectedMessage); }; beforeEach(async function () { @@ -102,15 +101,12 @@ describe("Test OOO Request Service", function () { }); }); - it("should throw error", async function () { - sinon.stub(logService, "addLog").throws(new Error(errorMessage)); + it("should throw error", async function () { + sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - try { - await createOooRequest(validOooStatusRequests, testUserId); - } catch (error) { - expect(error.message).to.equal(errorMessage); - } - }); + const promise = createOooRequest(validOooStatusRequests, testUserId); + await expectAsyncError(promise, errorMessage); + }); }); describe("validateOOOAcknowledgeRequest", function () { @@ -165,48 +161,32 @@ describe("Test OOO Request Service", function () { it("should return 'Request not found' if invalid request id is passed", async function () { const invalidOOORequestId = "11111111111111111111"; - const promise = acknowledgeOooRequest(invalidOOORequestId, TestAcknowledgeOooRequest, testSuperUserId); + const promise = acknowledgeOooRequest(invalidOOORequestId, testAcknowledgeOooRequest, testSuperUserId); await expectAsyncError(promise, "Request not found"); }); it("should approve OOO request", async function () { - const response = await acknowledgeOooRequest(testOooRequest.id, TestAcknowledgeOooRequest, testSuperUserId); - expect(response).to.deep.include({ + const response = await acknowledgeOooRequest(testOooRequest.id, testAcknowledgeOooRequest, testSuperUserId); + expect(response).to.deep.equal({ message: REQUEST_APPROVED_SUCCESSFULLY, - data: { - id: testOooRequest.id, - lastModifiedBy: testSuperUserId, - status: REQUEST_STATE.APPROVED, - type: REQUEST_TYPE.OOO, - comment: TestAcknowledgeOooRequest.comment, - updatedAt: response.data.updatedAt, - }, }); }); it("should reject OOO request", async function () { const response = await acknowledgeOooRequest( testOooRequest.id, - { ...TestAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, + { ...testAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, testSuperUserId ); - expect(response).to.deep.include({ + expect(response).to.deep.equal({ message: REQUEST_REJECTED_SUCCESSFULLY, - data: { - id: testOooRequest.id, - status: REQUEST_STATE.REJECTED, - lastModifiedBy: testSuperUserId, - type: REQUEST_TYPE.OOO, - comment: TestAcknowledgeOooRequest.comment, - updatedAt: response.data.updatedAt, - }, }); }); it("should propagate error when logging fails", async function () { sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - const promise = acknowledgeOooRequest(testOooRequest.id, TestAcknowledgeOooRequest, testSuperUserId); + const promise = acknowledgeOooRequest(testOooRequest.id, testAcknowledgeOooRequest, testSuperUserId); await expectAsyncError(promise, errorMessage); }); }); From 799d37f6ed696dce366a58cf09e53ded4395fc21 Mon Sep 17 00:00:00 2001 From: RishiChaubey31 Date: Thu, 4 Sep 2025 02:02:38 +0530 Subject: [PATCH 6/8] added-try-catch --- test/unit/services/oooRequest.test.ts | 54 ++++++++++++++++++--------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/test/unit/services/oooRequest.test.ts b/test/unit/services/oooRequest.test.ts index e5ed0a7ca..3a0c6e25d 100644 --- a/test/unit/services/oooRequest.test.ts +++ b/test/unit/services/oooRequest.test.ts @@ -38,11 +38,7 @@ describe("Test OOO Request Service", function () { let testUserId: string; const errorMessage = "Unexpected error occured"; - const expectAsyncError = async (promise: Promise, expectedMessage: string) => { - const error = await promise.catch((err) => err); - expect(error).to.exist; - expect((error as Error).message).to.include(expectedMessage); - }; + beforeEach(async function () { const users = userDataFixture(); @@ -104,8 +100,12 @@ describe("Test OOO Request Service", function () { it("should throw error", async function () { sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - const promise = createOooRequest(validOooStatusRequests, testUserId); - await expectAsyncError(promise, errorMessage); + try { + await createOooRequest(validOooStatusRequests, testUserId); + expect.fail("Should have thrown an error"); + } catch (error) { + expect(error.message).to.equal(errorMessage); + } }); }); @@ -122,18 +122,30 @@ describe("Test OOO Request Service", function () { }); it("should return INVALID_REQUEST_TYPE if request type is not OOO", async function () { - const promise = validateOooAcknowledgeRequest(REQUEST_TYPE.ONBOARDING, testOooRequest.status); - await expectAsyncError(promise, INVALID_REQUEST_TYPE); + try { + await validateOooAcknowledgeRequest(REQUEST_TYPE.ONBOARDING, testOooRequest.status); + expect.fail("Should have thrown an error"); + } catch (error) { + expect(error.message).to.equal(INVALID_REQUEST_TYPE); + } }); it("should return REQUEST_ALREADY_APPROVED if request is already approved", async function () { - const promise = validateOooAcknowledgeRequest(REQUEST_TYPE.OOO, REQUEST_STATE.APPROVED); - await expectAsyncError(promise, REQUEST_ALREADY_APPROVED); + try { + await validateOooAcknowledgeRequest(REQUEST_TYPE.OOO, REQUEST_STATE.APPROVED); + expect.fail("Should have thrown an error"); + } catch (error) { + expect(error.message).to.equal(REQUEST_ALREADY_APPROVED); + } }); it("should return REQUEST_ALREADY_REJECTED if request is already rejected", async function () { - const promise = validateOooAcknowledgeRequest(REQUEST_TYPE.OOO, REQUEST_STATE.REJECTED); - await expectAsyncError(promise, REQUEST_ALREADY_REJECTED); + try { + await validateOooAcknowledgeRequest(REQUEST_TYPE.OOO, REQUEST_STATE.REJECTED); + expect.fail("Should have thrown an error"); + } catch (error) { + expect(error.message).to.equal(REQUEST_ALREADY_REJECTED); + } }); it("should return undefined when all validation checks passes", async function () { @@ -161,8 +173,12 @@ describe("Test OOO Request Service", function () { it("should return 'Request not found' if invalid request id is passed", async function () { const invalidOOORequestId = "11111111111111111111"; - const promise = acknowledgeOooRequest(invalidOOORequestId, testAcknowledgeOooRequest, testSuperUserId); - await expectAsyncError(promise, "Request not found"); + try { + await acknowledgeOooRequest(invalidOOORequestId, testAcknowledgeOooRequest, testSuperUserId); + expect.fail("Should have thrown an error"); + } catch (error) { + expect(error.message).to.equal("Request not found"); + } }); it("should approve OOO request", async function () { @@ -186,8 +202,12 @@ describe("Test OOO Request Service", function () { it("should propagate error when logging fails", async function () { sinon.stub(logService, "addLog").throws(new Error(errorMessage)); - const promise = acknowledgeOooRequest(testOooRequest.id, testAcknowledgeOooRequest, testSuperUserId); - await expectAsyncError(promise, errorMessage); + try { + await acknowledgeOooRequest(testOooRequest.id, testAcknowledgeOooRequest, testSuperUserId); + expect.fail("Should have thrown an error"); + } catch (error) { + expect(error.message).to.equal(errorMessage); + } }); }); }); From 0b24360ea1ab80d0bad3455bbab54c1f5dae8ff4 Mon Sep 17 00:00:00 2001 From: RishiChaubey31 Date: Thu, 4 Sep 2025 02:21:58 +0530 Subject: [PATCH 7/8] removed-functon --- test/unit/middlewares/oooRequests.test.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/test/unit/middlewares/oooRequests.test.ts b/test/unit/middlewares/oooRequests.test.ts index 369e3470a..f8b4c103c 100644 --- a/test/unit/middlewares/oooRequests.test.ts +++ b/test/unit/middlewares/oooRequests.test.ts @@ -14,13 +14,7 @@ describe("OOO Status Request Validators", function () { let req: any; let res: any; let nextSpy; - - // Helper function to test async errors without try-catch - const expectAsyncError = async (promise: Promise, expectedMessage: string) => { - const error = await promise.catch((err) => err); - expect(error).to.exist; - expect(error.message).to.include(expectedMessage); - }; + beforeEach(function () { res = { boom: { From 3c566a276f5571360ff05e12d94824263e0f49d4 Mon Sep 17 00:00:00 2001 From: RishiChaubey31 Date: Thu, 4 Sep 2025 16:41:41 +0530 Subject: [PATCH 8/8] test: update assertions in oooRequest tests to use include for response validation --- test/unit/services/oooRequest.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unit/services/oooRequest.test.ts b/test/unit/services/oooRequest.test.ts index 3a0c6e25d..f66d67fca 100644 --- a/test/unit/services/oooRequest.test.ts +++ b/test/unit/services/oooRequest.test.ts @@ -183,7 +183,7 @@ describe("Test OOO Request Service", function () { it("should approve OOO request", async function () { const response = await acknowledgeOooRequest(testOooRequest.id, testAcknowledgeOooRequest, testSuperUserId); - expect(response).to.deep.equal({ + expect(response).to.include({ message: REQUEST_APPROVED_SUCCESSFULLY, }); }); @@ -194,7 +194,7 @@ describe("Test OOO Request Service", function () { { ...testAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED }, testSuperUserId ); - expect(response).to.deep.equal({ + expect(response).to.include({ message: REQUEST_REJECTED_SUCCESSFULLY, }); });