Skip to content

Commit e37b3b0

Browse files
committed
feat: add integration tests for PATCH OOO request
1 parent 1d4b457 commit e37b3b0

File tree

2 files changed

+211
-1
lines changed

2 files changed

+211
-1
lines changed

test/fixtures/oooRequest/oooRequest.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,17 @@ export const updateOooStatusRequest = [
129129
reason: "Approval granted.",
130130
},
131131
];
132+
133+
export const createOooRequests3 = {
134+
from: Date.now() + 100000,
135+
until: Date.now() + 200000,
136+
type: "OOO",
137+
requestedBy: "testUser",
138+
reason: "Out of office for personal emergency.",
139+
status: REQUEST_STATE.PENDING
140+
};
141+
142+
export const acknowledgeOooRequest = {
143+
status: REQUEST_STATE.APPROVED,
144+
comment: "OOO request approved as it's emergency."
145+
};

test/integration/requests.test.ts

Lines changed: 197 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import chai from "chai";
22
const { expect } = chai;
3+
import sinon from "sinon";
34
import chaiHttp from "chai-http";
45
import _ from "lodash";
56
import config from "config";
@@ -14,6 +15,8 @@ import {
1415
validOooStatusRequests,
1516
validOooStatusUpdate,
1617
createOooRequests2,
18+
acknowledgeOooRequest,
19+
createOooRequests3,
1720
} from "../fixtures/oooRequest/oooRequest";
1821
import { createRequest, updateRequest } from "../../models/requests";
1922
import {
@@ -26,10 +29,12 @@ import {
2629
REQUEST_ALREADY_PENDING,
2730
REQUEST_REJECTED_SUCCESSFULLY,
2831
REQUEST_ALREADY_REJECTED,
32+
UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST,
33+
INVALID_REQUEST_TYPE,
2934
} from "../../constants/requests";
3035
import { updateTask } from "../../models/tasks";
3136
import { validTaskAssignmentRequest, validTaskCreqtionRequest } from "../fixtures/taskRequests/taskRequests";
32-
37+
import * as logUtils from "../../services/logService";
3338
const userData = userDataFixture();
3439
chai.use(chaiHttp);
3540

@@ -41,12 +46,14 @@ let approvedOooRequestId: string;
4146
let oooRequestData: any;
4247
let oooRequestData2: any;
4348
let testUserId: string;
49+
let testSuperUserId: string;
4450

4551
describe("/requests OOO", function () {
4652
beforeEach(async function () {
4753
const userIdPromises = [addUser(userData[16]), addUser(userData[4])];
4854
const [userId, superUserId] = await Promise.all(userIdPromises);
4955
testUserId = userId;
56+
testSuperUserId = superUserId;
5057

5158
oooRequestData = { ...createOooRequests, requestedBy: userId };
5259
oooRequestData2 = { ...createOooRequests2, requestedBy: superUserId };
@@ -186,6 +193,195 @@ describe("/requests OOO", function () {
186193
});
187194
});
188195

196+
describe("PATCH /requests/:id", function () {
197+
let pendingOooRequestId1: string;
198+
let pendingOooRequestId2: string;
199+
let pendingOooRequestId3: string;
200+
let oooRequestData3: any;
201+
let invalidRequestId: string;
202+
let approvedOooRequestId: string;
203+
let rejectedOooRequestId: string;
204+
205+
beforeEach(async function () {
206+
oooRequestData3 = { ...createOooRequests3, requestedBy: testUserId };
207+
208+
const { id: pendingOooId1 }: any = await createRequest(oooRequestData3);
209+
pendingOooRequestId1 = pendingOooId1;
210+
211+
const { id: pendingOooId2 }: any = await createRequest(oooRequestData3);
212+
pendingOooRequestId2 = pendingOooId2;
213+
214+
const { id: pendingOooId3 }: any = await createRequest(oooRequestData3);
215+
pendingOooRequestId3 = pendingOooId3;
216+
217+
const { id: invalidId }: any = await createRequest({...oooRequestData3, type: "XYZ"});
218+
invalidRequestId = invalidId;
219+
220+
const { id: approvedOooId }: any = await updateRequest(pendingOooRequestId2, { status: REQUEST_STATE.APPROVED }, testSuperUserId, REQUEST_TYPE.OOO);
221+
approvedOooRequestId = approvedOooId;
222+
223+
const { id: rejectedOooId }: any = await updateRequest(pendingOooRequestId3, { status: REQUEST_STATE.REJECTED }, testSuperUserId, REQUEST_TYPE.OOO);
224+
rejectedOooRequestId = rejectedOooId;
225+
});
226+
227+
it("should return 401 if user is not logged in", function (done) {
228+
chai
229+
.request(app)
230+
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
231+
.send(acknowledgeOooRequest)
232+
.end(function (err, res) {
233+
expect(res).to.have.status(401);
234+
expect(res.body.error).to.equal("Unauthorized");
235+
expect(res.body.message).to.equal("Unauthenticated User");
236+
done();
237+
});
238+
});
239+
240+
it("should return 501 and 'Feature not implemented' message when dev is false", function (done) {
241+
chai
242+
.request(app)
243+
.patch(`/requests/${pendingOooRequestId1}?dev=false`)
244+
.set("cookie", `${cookieName}=${superUserToken}`)
245+
.send(acknowledgeOooRequest)
246+
.end(function (err, res) {
247+
if (err) {
248+
return done(err);
249+
}
250+
expect(res.statusCode).to.equal(501);
251+
expect(res.body.message).to.equal("Feature not implemented");
252+
done();
253+
});
254+
});
255+
256+
it("should return 404 if request does not exist", function (done) {
257+
chai
258+
.request(app)
259+
.patch(`/requests/111111?dev=true`)
260+
.set("cookie", `${cookieName}=${superUserToken}`)
261+
.send(acknowledgeOooRequest)
262+
.end(function (err, res) {
263+
if (err) {
264+
return done(err);
265+
}
266+
expect(res.statusCode).to.equal(404);
267+
expect(res.body.message).to.equal(REQUEST_DOES_NOT_EXIST);
268+
done();
269+
});
270+
});
271+
272+
it("should return 401 if user does not have super user permission", function (done) {
273+
chai
274+
.request(app)
275+
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
276+
.set("cookie", `${cookieName}=${authToken}`)
277+
.send(acknowledgeOooRequest)
278+
.end(function (err, res) {
279+
if (err) {
280+
return done(err);
281+
}
282+
expect(res.statusCode).to.equal(401);
283+
expect(res.body.message).to.equal(UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST);
284+
done();
285+
});
286+
});
287+
288+
it("should return 400 if OOO request is already approved", function (done) {
289+
chai
290+
.request(app)
291+
.patch(`/requests/${approvedOooRequestId}?dev=true`)
292+
.set("cookie", `${cookieName}=${superUserToken}`)
293+
.send(acknowledgeOooRequest)
294+
.end(function (err, res) {
295+
if (err) {
296+
return done(err);
297+
}
298+
expect(res.statusCode).to.equal(400);
299+
expect(res.body.message).to.equal(REQUEST_ALREADY_APPROVED);
300+
done();
301+
});
302+
});
303+
304+
it("should return 400 if OOO request is already rejected", function (done) {
305+
chai
306+
.request(app)
307+
.patch(`/requests/${rejectedOooRequestId}?dev=true`)
308+
.set("cookie", `${cookieName}=${superUserToken}`)
309+
.send(acknowledgeOooRequest)
310+
.end(function (err, res) {
311+
if (err) {
312+
return done(err);
313+
}
314+
expect(res.statusCode).to.equal(400);
315+
expect(res.body.message).to.equal(REQUEST_ALREADY_REJECTED);
316+
done();
317+
});
318+
});
319+
320+
it("should return 400 if request type is not OOO", function (done) {
321+
chai
322+
.request(app)
323+
.patch(`/requests/${invalidRequestId}?dev=true`)
324+
.set("cookie", `${cookieName}=${superUserToken}`)
325+
.send(acknowledgeOooRequest)
326+
.end(function (err, res) {
327+
if (err) {
328+
return done(err);
329+
}
330+
expect(res.statusCode).to.equal(400);
331+
expect(res.body.message).to.equal(INVALID_REQUEST_TYPE);
332+
done();
333+
});
334+
});
335+
336+
it("should approve OOO request when dev is true", function (done) {
337+
chai
338+
.request(app)
339+
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
340+
.set("cookie", `${cookieName}=${superUserToken}`)
341+
.send(acknowledgeOooRequest)
342+
.end(function (err, res) {
343+
if (err) {
344+
return done(err);
345+
}
346+
expect(res.statusCode).to.equal(200);
347+
expect(res.body.message).to.equal(REQUEST_APPROVED_SUCCESSFULLY);
348+
done();
349+
});
350+
});
351+
352+
it("should reject OOO request when dev is true", function (done) {
353+
chai
354+
.request(app)
355+
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
356+
.set("cookie", `${cookieName}=${superUserToken}`)
357+
.send({...acknowledgeOooRequest, status: REQUEST_STATE.REJECTED})
358+
.end(function (err, res) {
359+
if (err) {
360+
return done(err);
361+
}
362+
expect(res.statusCode).to.equal(200);
363+
expect(res.body.message).to.equal(REQUEST_REJECTED_SUCCESSFULLY);
364+
done();
365+
});
366+
});
367+
368+
it("should return 500 response for unexpected error", function (done) {
369+
sinon.stub(logUtils, "addLog").throws("Error");
370+
chai
371+
.request(app)
372+
.patch(`/requests/${pendingOooRequestId1}?dev=true`)
373+
.set("cookie", `${cookieName}=${superUserToken}`)
374+
.send(acknowledgeOooRequest)
375+
.end(function (err, res) {
376+
if (err) return done(err);
377+
expect(res.statusCode).to.equal(500);
378+
expect(res.body.error).to.equal("Internal Server Error");
379+
expect(res.body.message).to.equal("An internal server error occurred");
380+
done();
381+
});
382+
});
383+
});
384+
189385
describe("PUT /requests/:id", function () {
190386
it("should return 401 if user is not logged in", function (done) {
191387
chai

0 commit comments

Comments
 (0)