Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion test/fixtures/oooRequest/oooRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,19 @@ export const updateOooStatusRequest = [
updatedAt: 1234567890,
reason: "Approval granted.",
},
];
];

export const createOooRequests3 = {
from: Date.now() + 100000,
until: Date.now() + 200000,
type: "OOO",
requestedBy: "suraj-maity-1",
reason: "Out of office for personal emergency.",
status: REQUEST_STATE.PENDING
};

export const acknowledgeOooRequest = {
type: REQUEST_TYPE.OOO,
status: REQUEST_STATE.APPROVED,
comment: "OOO request approved as it's emergency."
};
192 changes: 192 additions & 0 deletions test/integration/requests.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import {
validOooStatusRequests,
validOooStatusUpdate,
createOooRequests2,
acknowledgeOooRequest,
createOooRequests3,
} from "../fixtures/oooRequest/oooRequest";
import { createRequest, updateRequest } from "../../models/requests";
import {
Expand All @@ -27,6 +29,8 @@ import {
REQUEST_ALREADY_PENDING,
REQUEST_REJECTED_SUCCESSFULLY,
REQUEST_ALREADY_REJECTED,
INVALID_REQUEST_TYPE,
// UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST,
// UNAUTHORIZED_TO_CREATE_OOO_REQUEST,
// USER_STATUS_NOT_FOUND,
// OOO_STATUS_ALREADY_EXIST,
Expand All @@ -36,6 +40,7 @@ import { validTaskAssignmentRequest, validTaskCreqtionRequest } from "../fixture
import { deleteUserStatus, updateUserStatus } from "../../models/userStatus";
import * as requestsQuery from "../../models/requests";
import { userState } from "../../constants/userStatus";
import * as logUtils from "../../services/logService";

const userData = userDataFixture();
chai.use(chaiHttp);
Expand All @@ -48,6 +53,7 @@ let approvedOooRequestId: string;
let oooRequestData: any;
let oooRequestData2: any;
let testUserId: string;
let testSuperUserId: string;
let testArchivedUserId: string;

describe("/requests OOO", function () {
Expand All @@ -58,6 +64,7 @@ describe("/requests OOO", function () {
const userIdPromises = [addUser(userData[16]), addUser(userData[4]), addUser(userData[18])];
const [userId, superUserId, archivedUserId] = await Promise.all(userIdPromises);
testUserId = userId;
testSuperUserId = superUserId;
testArchivedUserId = archivedUserId;

oooRequestData = { ...createOooRequests, requestedBy: userId };
Expand Down Expand Up @@ -316,6 +323,191 @@ describe("/requests OOO", function () {
});
});

describe.skip("PATCH /requests/:id", function () {
let pendingOooRequestId1: string;
let oooRequestData3: any;
let invalidRequestId: string;
let approvedOooRequestId: string;
let rejectedOooRequestId: string;

beforeEach(async function () {
oooRequestData3 = { ...createOooRequests3, userId: testUserId };

const { id: pendingOooId1 }: any = await createRequest(oooRequestData3);
pendingOooRequestId1 = pendingOooId1;

const { id: pendingOooId2 }: any = await createRequest(oooRequestData3);

const { id: pendingOooId3 }: any = await createRequest(oooRequestData3);

const { id: invalidId }: any = await createRequest({...oooRequestData3, type: "XYZ"});
invalidRequestId = invalidId;

const { id: approvedOooId }: any = await updateRequest(pendingOooId2, { status: REQUEST_STATE.APPROVED }, testSuperUserId, REQUEST_TYPE.OOO);
approvedOooRequestId = approvedOooId;

const { id: rejectedOooId }: any = await updateRequest(pendingOooId3, { status: REQUEST_STATE.REJECTED }, testSuperUserId, REQUEST_TYPE.OOO);
rejectedOooRequestId = rejectedOooId;
});

it("should return 401 if user is not logged in", function (done) {
chai
.request(app)
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
.send(acknowledgeOooRequest)
.end(function (err, res) {
expect(res).to.have.status(401);
expect(res.body.error).to.equal("Unauthorized");
expect(res.body.message).to.equal("Unauthenticated User");
done();
});
});

it("should return 501 and 'Feature not implemented' message when dev is false", function (done) {
chai
.request(app)
.patch(`/requests/${pendingOooRequestId1}?dev=false`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(acknowledgeOooRequest)
.end(function (err, res) {
if (err) {
return done(err);
}
expect(res.statusCode).to.equal(501);
expect(res.body.message).to.equal("Feature not implemented");
done();
});
});

it("should return 404 if request does not exist", function (done) {
chai
.request(app)
.patch(`/requests/111111?dev=true`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(acknowledgeOooRequest)
.end(function (err, res) {
if (err) {
return done(err);
}
expect(res.statusCode).to.equal(404);
expect(res.body.message).to.equal(REQUEST_DOES_NOT_EXIST);
done();
});
});

it("should return 403 if user does not have super user permission", function (done) {
chai
.request(app)
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
.set("cookie", `${cookieName}=${authToken}`)
.send(acknowledgeOooRequest)
.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);
done();
});
});

it("should return 409 if OOO request is already approved", function (done) {
chai
.request(app)
.patch(`/requests/${approvedOooRequestId}?dev=true`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(acknowledgeOooRequest)
.end(function (err, res) {
if (err) {
return done(err);
}
expect(res.statusCode).to.equal(409);
expect(res.body.message).to.equal(REQUEST_ALREADY_APPROVED);
done();
});
});

it("should return 409 if OOO request is already rejected", function (done) {
chai
.request(app)
.patch(`/requests/${rejectedOooRequestId}?dev=true`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(acknowledgeOooRequest)
.end(function (err, res) {
if (err) {
return done(err);
}
expect(res.statusCode).to.equal(409);
expect(res.body.message).to.equal(REQUEST_ALREADY_REJECTED);
done();
});
});

it("should return 400 if request type is not OOO", function (done) {
chai
.request(app)
.patch(`/requests/${invalidRequestId}?dev=true`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(acknowledgeOooRequest)
.end(function (err, res) {
if (err) {
return done(err);
}
expect(res.statusCode).to.equal(400);
expect(res.body.message).to.equal(INVALID_REQUEST_TYPE);
done();
});
});

it("should approve OOO request when dev is true", function (done) {
chai
.request(app)
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(acknowledgeOooRequest)
.end(function (err, res) {
if (err) {
return done(err);
}
expect(res.statusCode).to.equal(200);
expect(res.body.message).to.equal(REQUEST_APPROVED_SUCCESSFULLY);
done();
});
});

it("should reject OOO request when dev is true", function (done) {
chai
.request(app)
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send({...acknowledgeOooRequest, status: REQUEST_STATE.REJECTED})
.end(function (err, res) {
if (err) {
return done(err);
}
expect(res.statusCode).to.equal(200);
expect(res.body.message).to.equal(REQUEST_REJECTED_SUCCESSFULLY);
done();
});
});

it("should return 500 response for unexpected error", function (done) {
sinon.stub(logUtils, "addLog").throws("Error");
chai
.request(app)
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(acknowledgeOooRequest)
.end(function (err, res) {
if (err) return done(err);
expect(res.statusCode).to.equal(500);
expect(res.body.error).to.equal("Internal Server Error");
expect(res.body.message).to.equal("An internal server error occurred");
done();
});
});
});

describe("PUT /requests/:id", function () {
it("should return 401 if user is not logged in", function (done) {
chai
Expand Down
44 changes: 42 additions & 2 deletions test/unit/middlewares/oooRequests.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ const { expect } = chai;

import {
createOooStatusRequestValidator,
// acknowledgeOOORequestsValidator,
} from "./../../../middlewares/validators/oooRequests";
import { validOooStatusRequests } from "../../fixtures/oooRequest/oooRequest";
import { acknowledgeOooRequest, validOooStatusRequests, validOooStatusUpdate } from "../../fixtures/oooRequest/oooRequest";
import _ from "lodash";

describe("OOO Status Request Validators", function () {
let req: any;
Expand Down Expand Up @@ -89,4 +91,42 @@ 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"}
};

// await acknowledgeOOORequestsValidator(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"}
};

// await acknowledgeOOORequestsValidator(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")
};
res = {};
// await acknowledgeOOORequestsValidator(req, res, nextSpy);
expect(nextSpy.calledOnce).to.be.true;
});

it("should validate for a valid acknowledge OOO request", async function() {
req = {
body: acknowledgeOooRequest
};
res = {};
// await acknowledgeOOORequestsValidator(req, res, nextSpy);
expect(nextSpy.calledOnce).to.be.true;
});
});
});
Loading
Loading