Skip to content

Commit d285ffd

Browse files
committed
feat: Add fetchTaskRequestById
1 parent eec7bf0 commit d285ffd

File tree

4 files changed

+133
-6
lines changed

4 files changed

+133
-6
lines changed

controllers/tasksRequests.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ const fetchTaskRequests = async (_, res) => {
66
try {
77
const data = await taskRequestsModel.fetchTaskRequests();
88

9-
if (data || data.length > 0) {
10-
res.status(200).json({
9+
if (data.length > 0) {
10+
return res.status(200).json({
1111
message: "Task requests returned successfully",
1212
data,
1313
});
@@ -23,6 +23,27 @@ const fetchTaskRequests = async (_, res) => {
2323
}
2424
};
2525

26+
const fetchTaskRequestById = async (req, res) => {
27+
try {
28+
const id = req.params.id;
29+
const data = await taskRequestsModel.fetchTaskRequestById(id);
30+
31+
if (data) {
32+
res.status(200).json({
33+
message: "Task request returned successfully",
34+
data,
35+
});
36+
}
37+
38+
return res.status(404).json({
39+
message: "Task request not found",
40+
});
41+
} catch (err) {
42+
logger.error("Error while fetching task requests", err);
43+
return res.boom.badImplementation(INTERNAL_SERVER_ERROR);
44+
}
45+
};
46+
2647
const addOrUpdate = async (req, res) => {
2748
try {
2849
const { taskId, userId } = req.body;
@@ -81,4 +102,5 @@ module.exports = {
81102
approveTaskRequest,
82103
addOrUpdate,
83104
fetchTaskRequests,
105+
fetchTaskRequestById,
84106
};

models/taskRequests.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ const fetchTaskRequests = async () => {
3939
return taskRequests;
4040
};
4141

42+
/**
43+
* Fetches task request by id
44+
*
45+
* @param taskRequestId { string }: id of task request
46+
* @return Promise<{taskRequest: Object}>
47+
*/
48+
const fetchTaskRequestById = async (taskRequestId) => {
49+
const taskRequestSnapshot = await taskRequestsCollection.doc(taskRequestId).get();
50+
return taskRequestSnapshot.data();
51+
};
52+
4253
/**
4354
* Creates a task request
4455
*
@@ -73,11 +84,12 @@ const addOrUpdate = async (taskId, userId) => {
7384
taskId,
7485
};
7586

76-
await taskRequestsCollection.add(newTaskRequest);
87+
const newTaskRequestRef = await taskRequestsCollection.add(newTaskRequest);
7788

7889
return {
7990
isCreate: true,
8091
taskRequest: newTaskRequest,
92+
id: newTaskRequestRef.id,
8193
};
8294
} catch (err) {
8395
logger.error("Error in updating task", err);
@@ -117,6 +129,7 @@ const approveTaskRequest = async (taskRequestId, user) => {
117129

118130
module.exports = {
119131
fetchTaskRequests,
132+
fetchTaskRequestById,
120133
addOrUpdate,
121134
approveTaskRequest,
122135
};

routes/taskRequests.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const { cacheResponse } = require("../utils/cache");
88
const { validateUser } = require("../middlewares/taskRequests");
99

1010
router.get("/", authenticate, authorizeRoles([SUPERUSER]), cacheResponse(), taskRequests.fetchTaskRequests);
11+
router.get("/:id", authenticate, authorizeRoles([SUPERUSER]), taskRequests.fetchTaskRequestById);
1112
router.post("/addOrUpdate", authenticate, validateUser, taskRequests.addOrUpdate);
1213
router.patch("/approve", authenticate, authorizeRoles([SUPERUSER]), validateUser, taskRequests.approveTaskRequest);
1314

test/integration/taskRequests.test.js

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,9 @@ describe("Task Requests", function () {
5858

5959
taskId = (await tasksModel.updateTask(taskData[4])).taskId;
6060
await userStatusModel.updateUserStatus(userId, idleUserStatus);
61-
await taskRequestsModel.addOrUpdate(taskId, userId);
6261
});
6362

64-
it("should fetch taskRequests", function (done) {
63+
it("should fetch 404 when taskRequests are empty", function (done) {
6564
chai
6665
.request(app)
6766
.get("/taskRequests")
@@ -71,13 +70,30 @@ describe("Task Requests", function () {
7170
return done(err);
7271
}
7372

73+
expect(res).to.have.status(404);
74+
return done();
75+
});
76+
});
77+
78+
it("should fetch taskRequests", async function () {
79+
await taskRequestsModel.addOrUpdate(taskId, userId);
80+
81+
chai
82+
.request(app)
83+
.get("/taskRequests")
84+
.set("cookie", `${cookieName}=${jwt}`)
85+
.then(function (err, res) {
86+
if (err) {
87+
return err;
88+
}
89+
7490
expect(res).to.have.status(200);
7591
expect(res.body.message).to.equal("Task requests returned successfully");
7692
expect(res.body.data).to.be.a("Array");
7793
expect(res.body.data.length).to.equal(1);
7894
expect(res.body.data[0]).to.have.property("requestors");
7995
expect(res.body.data[0].requestors.length).to.equal(1);
80-
return done();
96+
return res;
8197
});
8298
});
8399
});
@@ -111,6 +127,81 @@ describe("Task Requests", function () {
111127
});
112128
});
113129

130+
describe("GET /taskRequest/:id - fetches task request by id", function () {
131+
describe("When the user is super user", function () {
132+
let taskRequestId;
133+
before(async function () {
134+
superUserId = await addUser(superUser);
135+
sinon.stub(authService, "verifyAuthToken").callsFake(() => ({ userId: superUserId }));
136+
jwt = authService.generateAuthToken({ userId: superUserId });
137+
138+
taskId = (await tasksModel.updateTask(taskData[4])).taskId;
139+
taskRequestId = (await taskRequestsModel.addOrUpdate(taskId, userId)).id;
140+
});
141+
142+
it("should fetch the task request", function (done) {
143+
chai
144+
.request(app)
145+
.get(`/taskRequests/${taskRequestId}`)
146+
.set("cookie", `${cookieName}=${jwt}`)
147+
.end((err, res) => {
148+
if (err) {
149+
return done(err);
150+
}
151+
152+
expect(res).to.have.status(200);
153+
expect(res.body.message).to.be.equal("Task request returned successfully");
154+
expect(res.body.data).to.be.a("object");
155+
return done();
156+
});
157+
});
158+
159+
it("should return 404 if the resource is not found", function (done) {
160+
chai
161+
.request(app)
162+
.get(`/taskRequests/taskRequestId`)
163+
.set("cookie", `${cookieName}=${jwt}`)
164+
.end((err, res) => {
165+
if (err) {
166+
return done(err);
167+
}
168+
169+
expect(res).to.have.status(404);
170+
expect(res.body.message).to.be.equal("Task request not found");
171+
return done();
172+
});
173+
});
174+
});
175+
176+
describe("When the user is not a super user", function () {
177+
before(async function () {
178+
userId = await addUser(member);
179+
sinon.stub(authService, "verifyAuthToken").callsFake(() => ({ userId }));
180+
jwt = authService.generateAuthToken({ userId });
181+
182+
taskId = (await tasksModel.updateTask(taskData[4])).taskId;
183+
184+
await userStatusModel.updateUserStatus(userId, idleUserStatus);
185+
await taskRequestsModel.addOrUpdate(taskId, userId);
186+
});
187+
188+
it("should return 401 status code", function (done) {
189+
chai
190+
.request(app)
191+
.get(`/taskRequests/taskrequstid`)
192+
.set("cookie", `${cookieName}=${jwt}`)
193+
.end((err, res) => {
194+
if (err) {
195+
return done(err);
196+
}
197+
198+
expect(res).to.have.status(401);
199+
return done();
200+
});
201+
});
202+
});
203+
});
204+
114205
describe("POST /taskRequests/addOrUpdate - add or updates a task request", function () {
115206
describe("When a new task requested is created", function () {
116207
before(async function () {

0 commit comments

Comments
 (0)