Skip to content

Commit

Permalink
fixed few typos and bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
ivinayakg committed Dec 22, 2022
1 parent 68fada9 commit 1445f20
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 112 deletions.
8 changes: 4 additions & 4 deletions controllers/extensionRequests.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ const createTaskExtensionRequest = async (req, res) => {

return res.json({
message: "Extension Request created successfully!",
extensionRequestData: { ...extensionBody, id: extensionRequest.id },
extensionRequest: { ...extensionBody, id: extensionRequest.id },
});
} catch (err) {
logger.error(`Error while creating new extension request: ${err}`);
Expand All @@ -81,7 +81,7 @@ const fetchExtensionRequests = async (req, res) => {

return res.json({
message: "Extension Requests returned successfully!",
extensionRequestData: allExtensionRequests.length ? allExtensionRequests : [],
allExtensionRequests: allExtensionRequests.length ? allExtensionRequests : [],
});
} catch (err) {
logger.error(`Error while fetching Extension Requests ${err}`);
Expand All @@ -98,7 +98,7 @@ const getExtensionRequest = async (req, res) => {
return res.boom.notFound("Extension Request not found");
}
extensionRequestData.id = extensionRequestId;
return res.json({ message: "Extension Requests returned successfully!", extensionRequestData });
return res.json({ message: "Extension Requests returned successfully!", extensionRequest: extensionRequestData });
} catch (err) {
return res.boom.badImplementation("An internal server error occurred");
}
Expand All @@ -116,7 +116,7 @@ const getSelfExtensionRequests = async (req, res) => {
const { taskId, status } = req.query;

if (userId) {
const allExtensionRequests = await extensionRequestsQuery.fetchUserExtensionRequests(userId, status, taskId);
const allExtensionRequests = await extensionRequestsQuery.fetchExtensionRequests({ status, taskId }, userId);
return res.json({ message: "Extension Requests returned successfully!", allExtensionRequests });
}
return res.boom.notFound("User doesn't exist");
Expand Down
45 changes: 5 additions & 40 deletions models/extensionRequests.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,14 @@ const updateExtensionRequest = async (extensionRequestData, extensionRequestId)
* @param extensionRequestquery { Object }: Body of the extension request
* @return {Promise<ExtensionRequest|Array>}
*/
const fetchExtensionRequests = async (extensionRequestquery) => {
const fetchExtensionRequests = async (extensionRequestquery, userId = null) => {
try {
let extensionRequestsSnapshot = extensionRequestsModel;

if (userId) {
extensionRequestsSnapshot = extensionRequestsModel.where("assignee", "==", userId);
}

Object.entries(extensionRequestquery).forEach(([key, value]) => {
if (value) extensionRequestsSnapshot = extensionRequestsSnapshot.where(key, "==", value);
});
Expand Down Expand Up @@ -77,48 +81,9 @@ const fetchExtensionRequest = async (extensionRequestId) => {
}
};

/**
* Fetch all Extension Requests of a user
*
* @return {Array<extensionRequests>}
*/

const fetchUserExtensionRequests = async (userId, status, taskId) => {
try {
if (!userId) {
return { userNotFound: true };
}

let extensionRequestsSnapshot = [];

let extensionRequestQuery = extensionRequestsModel.where("assignee", "==", userId);

if (taskId) {
extensionRequestQuery = extensionRequestQuery.where("taskId", "==", taskId);
}

if (status) {
extensionRequestQuery = extensionRequestQuery.where("status", "==", status);
}

extensionRequestsSnapshot = await extensionRequestQuery.get();

const extensionRequests = buildExtensionRequests(extensionRequestsSnapshot);

const promises = extensionRequests.map(async (extensionRequest) => formatExtensionRequest(extensionRequest));
const extensionRequestList = await Promise.all(promises);

return extensionRequestList;
} catch (error) {
logger.error("error getting extension requests", error);
throw error;
}
};

module.exports = {
createExtensionRequest,
fetchExtensionRequests,
fetchExtensionRequest,
fetchUserExtensionRequests,
updateExtensionRequest,
};
8 changes: 1 addition & 7 deletions routes/extensionRequests.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,7 @@ const authorizeRoles = require("../middlewares/authorizeRoles");
const { SUPERUSER, APPOWNER } = require("../constants/roles");
const { createExtensionRequest, updateExtensionRequest } = require("../middlewares/validators/extensionRequests");

router.post(
"/",
authenticate,
authorizeRoles([SUPERUSER, APPOWNER]),
createExtensionRequest,
extensionRequests.createTaskExtensionRequest
);
router.post("/", authenticate, createExtensionRequest, extensionRequests.createTaskExtensionRequest);
router.get("/", authenticate, authorizeRoles([SUPERUSER, APPOWNER]), extensionRequests.fetchExtensionRequests);
router.get("/self", authenticate, extensionRequests.getSelfExtensionRequests);
router.get("/:id", authenticate, authorizeRoles([SUPERUSER, APPOWNER]), extensionRequests.getExtensionRequest);
Expand Down
155 changes: 94 additions & 61 deletions test/integration/extensionRequests.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const superUser = userData[4];
let appOwnerjwt, superUserJwt, jwt;

describe("Extension Requests", function () {
let taskId1, taskId2, taskId3, extensionRequestId, taskId;
let taskId1, taskId2, taskId3, extensionRequestId1, extensionRequestId2, taskId;

before(async function () {
const userId = await addUser(user);
Expand Down Expand Up @@ -103,7 +103,17 @@ describe("Extension Requests", function () {
reason: "family event",
status: "PENDING",
};
extensionRequestId = (await extensionRequests.createExtensionRequest(extensionRequest)).id;
const extensionRequest1 = {
taskId: taskId2,
title: "change ETA",
assignee: appOwner.id,
oldEndsOn: 1234,
newEndsOn: 1235,
reason: "family event",
status: "APPROVED",
};
extensionRequestId1 = (await extensionRequests.createExtensionRequest(extensionRequest)).id;
extensionRequestId2 = (await extensionRequests.createExtensionRequest(extensionRequest1)).id;
});

after(async function () {
Expand All @@ -114,6 +124,71 @@ describe("Extension Requests", function () {
sinon.restore();
});

describe("GET /extensionRequest/self", function () {
it("should return success response and extension request of the authenticated user", function (done) {
chai
.request(app)
.get(`/extensionRequests/self`)
.set("cookie", `${cookieName}=${appOwnerjwt}`)
.end((err, res) => {
if (err) {
return done(err);
}

expect(res).to.have.status(200);
expect(res.body).to.be.a("object");
expect(res.body.message).to.be.equal("Extension Requests returned successfully!");
expect(res.body.allExtensionRequests).to.be.a("array");
expect(res.body.allExtensionRequests[0].assignee).to.equal(appOwner.username);
expect([extensionRequestId1, extensionRequestId2]).contains(res.body.allExtensionRequests[0].id);
expect([extensionRequestId1, extensionRequestId2]).contains(res.body.allExtensionRequests[1].id);
expect(res.body.allExtensionRequests[1].assignee).to.equal(appOwner.username);
return done();
});
});
it("should return success response and all extension requests with query params", function (done) {
chai
.request(app)
.get(`/extensionRequests/self`)
.query({ taskId: taskId2, status: "APPROVED" })
.set("cookie", `${cookieName}=${appOwnerjwt}`)
.end((err, res) => {
if (err) {
return done(err);
}

expect(res).to.have.status(200);
expect(res.body).to.be.a("object");
expect(res.body.message).to.be.equal("Extension Requests returned successfully!");
expect(res.body.allExtensionRequests).to.be.a("array");
expect(res.body.allExtensionRequests[0].assignee).to.equal(appOwner.username);
expect(res.body.allExtensionRequests[0].id).to.equal(extensionRequestId2);
return done();
});
});

it("Should return 401 if not logged in", function (done) {
chai
.request(app)
.get("/extensionRequests/self")
.end((err, res) => {
if (err) {
return done();
}

expect(res).to.have.status(401);
expect(res.body).to.be.an("object");
expect(res.body).to.eql({
statusCode: 401,
error: "Unauthorized",
message: "Unauthenticated User",
});

return done();
});
});
});

describe("POST /extensionRequest - creates a new extension requests", function () {
it("Should return success response after adding the extension request", function (done) {
chai
Expand All @@ -136,9 +211,9 @@ describe("Extension Requests", function () {
expect(res).to.have.status(200);
expect(res.body).to.be.a("object");
expect(res.body.message).to.equal("Extension Request created successfully!");
expect(res.body.extensionRequestData).to.be.a("object");
expect(res.body.extensionRequestData.assignee).to.equal(appOwner.id);
expect(res.body.extensionRequestData.status).to.equal(ETA_EXTENSION_REQUEST_STATUS.PENDING);
expect(res.body.extensionRequest).to.be.a("object");
expect(res.body.extensionRequest.assignee).to.equal(appOwner.id);
expect(res.body.extensionRequest.status).to.equal(ETA_EXTENSION_REQUEST_STATUS.PENDING);
return done();
});
});
Expand Down Expand Up @@ -287,7 +362,7 @@ describe("Extension Requests", function () {
expect(res).to.have.status(200);
expect(res.body).to.be.a("object");
expect(res.body.message).to.equal("Extension Request created successfully!");
const extensionRequestId = res.body.extensionRequestData.id;
const extensionRequestId1 = res.body.extensionRequest.id;
chai
.request(app)
.get(`/logs/extensionRequest/?body.assignee=${user.id}&meta.taskId=${taskId2}`)
Expand All @@ -300,7 +375,7 @@ describe("Extension Requests", function () {
expect(res.body).to.be.a("object");
expect(res.body.message).to.equal("Logs returned successfully!");
expect(res.body.logs).to.be.a("array");
expect(res.body.logs[0].body.extensionRequestId).to.equal(extensionRequestId);
expect(res.body.logs[0].body.extensionRequestId).to.equal(extensionRequestId1);
expect(res.body.logs[0].body.assignee).to.equal(user.id);
expect(res.body.logs[0].meta.taskId).to.equal(taskId2);
return done();
Expand All @@ -315,7 +390,7 @@ describe("Extension Requests", function () {
it("should return success response and extension request with the id that is provided", function (done) {
chai
.request(app)
.get(`/extensionRequests/${extensionRequestId}`)
.get(`/extensionRequests/${extensionRequestId1}`)
.set("cookie", `${cookieName}=${superUserJwt}`)
.end((err, res) => {
if (err) {
Expand All @@ -324,9 +399,9 @@ describe("Extension Requests", function () {
expect(res).to.have.status(200);
expect(res.body).to.be.a("object");
expect(res.body.message).to.be.equal("Extension Requests returned successfully!");
expect(res.body.extensionRequestData).to.be.a("object");
expect(res.body.extensionRequestData.assignee).to.equal(appOwner.username);
expect(res.body.extensionRequestData.id).to.equal(extensionRequestId);
expect(res.body.extensionRequest).to.be.a("object");
expect(res.body.extensionRequest.assignee).to.equal(appOwner.username);
expect(res.body.extensionRequest.id).to.equal(extensionRequestId1);
return done();
});
});
Expand Down Expand Up @@ -360,9 +435,9 @@ describe("Extension Requests", function () {
expect(res).to.have.status(200);
expect(res.body).to.be.a("object");
expect(res.body.message).to.be.equal("Extension Requests returned successfully!");
expect(res.body.extensionRequestData).to.be.a("array");
expect(res.body.extensionRequestData[0]).to.have.property("assignee");
expect(res.body.extensionRequestData[0]).to.have.property("id");
expect(res.body.allExtensionRequests).to.be.a("array");
expect(res.body.allExtensionRequests[0]).to.have.property("assignee");
expect(res.body.allExtensionRequests[0]).to.have.property("id");
return done();
});
});
Expand All @@ -380,51 +455,9 @@ describe("Extension Requests", function () {
expect(res).to.have.status(200);
expect(res.body).to.be.a("object");
expect(res.body.message).to.be.equal("Extension Requests returned successfully!");
expect(res.body.extensionRequestData).to.be.a("array");
expect(res.body.extensionRequestData[0].assignee).to.equal(appOwner.username);
expect(res.body.extensionRequestData[0].id).to.equal(extensionRequestId);
return done();
});
});
});

describe("GET /extensionRequest/self", function () {
it("should return success response and extension request of the authenticated user", function (done) {
chai
.request(app)
.get(`/extensionRequests/${extensionRequestId}`)
.set("cookie", `${cookieName}=${appOwnerjwt}`)
.end((err, res) => {
if (err) {
return done(err);
}
expect(res).to.have.status(200);
expect(res.body).to.be.a("object");
expect(res.body.message).to.be.equal("Extension Requests returned successfully!");
expect(res.body.extensionRequestData).to.be.a("object");
expect(res.body.extensionRequestData.assignee).to.equal(appOwner.username);
expect(res.body.extensionRequestData.id).to.equal(extensionRequestId);
return done();
});
});

it("Should return 401 if not logged in", function (done) {
chai
.request(app)
.get("/extensionRequests/self")
.end((err, res) => {
if (err) {
return done();
}

expect(res).to.have.status(401);
expect(res.body).to.be.an("object");
expect(res.body).to.eql({
statusCode: 401,
error: "Unauthorized",
message: "Unauthenticated User",
});

expect(res.body.allExtensionRequests).to.be.a("array");
expect(res.body.allExtensionRequests[0].assignee).to.equal(appOwner.username);
expect(res.body.allExtensionRequests[0].id).to.equal(extensionRequestId1);
return done();
});
});
Expand All @@ -434,7 +467,7 @@ describe("Extension Requests", function () {
it("Should return 401 if someone other than superuser logged in", function (done) {
chai
.request(app)
.patch(`/extensionRequests/${extensionRequestId}`)
.patch(`/extensionRequests/${extensionRequestId1}`)
.set("cookie", `${cookieName}=${jwt}`)
.end((err, res) => {
if (err) {
Expand All @@ -456,7 +489,7 @@ describe("Extension Requests", function () {
it("Should update the extensionRequest for the given extensionRequestId", function (done) {
chai
.request(app)
.patch(`/extensionRequests/${extensionRequestId}`)
.patch(`/extensionRequests/${extensionRequestId1}`)
.set("cookie", `${cookieName}=${superUserJwt}`)
.send({
title: "new-title",
Expand Down

0 comments on commit 1445f20

Please sign in to comment.