Skip to content

Commit

Permalink
chore: remove feature flag for GET /extension-requests/self API
Browse files Browse the repository at this point in the history
  • Loading branch information
samarpan1738 committed Sep 17, 2024
1 parent 20e40e5 commit 0d414b1
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 141 deletions.
77 changes: 31 additions & 46 deletions controllers/extensionRequests.js
Original file line number Diff line number Diff line change
Expand Up @@ -217,64 +217,49 @@ const getExtensionRequest = async (req, res) => {
* @param res {Object} - Express response object
*/
const getSelfExtensionRequests = async (req, res) => {
const dev = req.query.dev === "true";

try {
const { id: userId } = req.userData;
const { taskId, status } = req.query;

if (dev) {
if (userId) {
let allExtensionRequests;
if (taskId) {
const latestExtensionRequest = await extensionRequestsQuery.fetchLatestExtensionRequest({
taskId,
});

if (latestExtensionRequest && latestExtensionRequest.assigneeId !== userId) {
allExtensionRequests = [];
} else {
// Add reviewer's name if status is not PENDING
if (latestExtensionRequest.status === "APPROVED" || latestExtensionRequest.status === "DENIED") {
const logs = await logsQuery.fetchLogs(
{ "meta.extensionRequestId": latestExtensionRequest.id, limit: 1 },
"extensionRequests"
);

if (
logs.length === 1 &&
logs[0]?.meta?.userId &&
(logs[0]?.body?.status === "APPROVED" || logs[0]?.body?.status === "DENIED") // Make sure log is only related to status change
) {
const superUserId = logs[0].meta.userId;
const name = await getFullName(superUserId);
latestExtensionRequest.reviewedBy = `${name?.first_name} ${name?.last_name}`;
latestExtensionRequest.reviewedAt = logs[0].timestamp._seconds;
}
if (userId) {
let allExtensionRequests;
if (taskId) {
const latestExtensionRequest = await extensionRequestsQuery.fetchLatestExtensionRequest({
taskId,
});

if (latestExtensionRequest && latestExtensionRequest.assigneeId !== userId) {
allExtensionRequests = [];
} else {
// Add reviewer's name if status is not PENDING
if (latestExtensionRequest.status === "APPROVED" || latestExtensionRequest.status === "DENIED") {
const logs = await logsQuery.fetchLogs(
{ "meta.extensionRequestId": latestExtensionRequest.id, limit: 1 },
"extensionRequests"
);

if (
logs.length === 1 &&
logs[0]?.meta?.userId &&
(logs[0]?.body?.status === "APPROVED" || logs[0]?.body?.status === "DENIED") // Make sure log is only related to status change
) {
const superUserId = logs[0].meta.userId;
const name = await getFullName(superUserId);
latestExtensionRequest.reviewedBy = `${name?.first_name} ${name?.last_name}`;
latestExtensionRequest.reviewedAt = logs[0].timestamp._seconds;
}
allExtensionRequests = [latestExtensionRequest];
}
} else {
allExtensionRequests = await extensionRequestsQuery.fetchExtensionRequests({
assignee: userId,
status: status || undefined,
});
allExtensionRequests = [latestExtensionRequest];
}
return res.json({ message: "Extension Requests returned successfully!", allExtensionRequests });
} else {
return res.boom.notFound("User doesn't exist");
}
} else {
if (userId) {
const allExtensionRequests = await extensionRequestsQuery.fetchExtensionRequests({
taskId,
allExtensionRequests = await extensionRequestsQuery.fetchExtensionRequests({
assignee: userId,
status: status || undefined,
});
return res.json({ message: "Extension Requests returned successfully!", allExtensionRequests });
} else {
return res.boom.notFound("User doesn't exist");
}
return res.json({ message: "Extension Requests returned successfully!", allExtensionRequests });
} else {
return res.boom.notFound("User doesn't exist");
}
} catch (error) {
logger.error(`Error while fetching extension requests: ${error}`);
Expand Down
99 changes: 99 additions & 0 deletions test/integration/extensionRequests.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ describe("Extension Requests", function () {
taskId2,
taskId3,
taskId4,
taskId5,
extensionRequestId1,
extensionRequestId2,
extensionRequestId3,
Expand Down Expand Up @@ -115,6 +116,22 @@ describe("Extension Requests", function () {
completionAward: { [DINERO]: 3, [NEELAM]: 300 },
lossRate: { [DINERO]: 1 },
},
{
title: "Test task 5",
purpose: "To Test mocha",
featureUrl: "<testUrl>",
type: "group",
links: ["test1"],
endsOn: 1234,
startedOn: 54321,
status: "active",
percentCompleted: 10,
dependsOn: ["d12", "d23"],
isNoteworthy: false,
assignee: appOwner.username,
completionAward: { [DINERO]: 3, [NEELAM]: 300 },
lossRate: { [DINERO]: 1 },
},
];

// Add the active task
Expand All @@ -127,6 +144,7 @@ describe("Extension Requests", function () {
// Add the completed task
taskId3 = (await tasks.updateTask(taskData[3])).taskId;
taskId4 = (await tasks.updateTask(taskData[4])).taskId;
taskId5 = (await tasks.updateTask(taskData[5])).taskId;

const extensionRequest = {
taskId: taskId3,
Expand Down Expand Up @@ -176,11 +194,22 @@ describe("Extension Requests", function () {
reason: "family event",
status: "PENDING",
};
const extensionRequest5 = {
taskId: taskId5,
title: "change ETA",
assignee: user.id,
oldEndsOn: 1234,
newEndsOn: 1235,
reason: "family event",
status: "APPROVED",
};

extensionRequestId1 = (await extensionRequests.createExtensionRequest(extensionRequest)).id;
extensionRequestId2 = (await extensionRequests.createExtensionRequest(extensionRequest1)).id;
extensionRequestId3 = (await extensionRequests.createExtensionRequest(extensionRequest2)).id;
extensionRequestId4 = (await extensionRequests.createExtensionRequest(extensionRequest3)).id;
extensionRequestId5 = (await extensionRequests.createExtensionRequest(extensionRequest4)).id;
await extensionRequests.createExtensionRequest(extensionRequest5);
});

after(async function () {
Expand All @@ -192,6 +221,14 @@ describe("Extension Requests", function () {
});

describe("GET /extension-requests/self", function () {
// beforeEach(function () {
// fetchLatestExtensionRequestStub = sinon.stub(extensionRequests, "fetchLatestExtensionRequest");
// });

// afterEach(function () {
// fetchLatestExtensionRequestStub.restore();
// });

it("should return success response and extension request of the authenticated user", function (done) {
chai
.request(app)
Expand Down Expand Up @@ -235,6 +272,68 @@ describe("Extension Requests", function () {
});
});

it("should return success response and an empty array of extensionRequest if assignee is not same as latest one", function (done) {
// fetchLatestExtensionRequestStub.returns({
// taskId: taskId5,
// title: "change ETA",
// assignee: "mayur",
// oldEndsOn: 1234,
// newEndsOn: 1237,
// reason: "family event",
// status: "APPROVED",
// requestNumber: 5,
// userId: "ajdf",
// });
chai
.request(app)
.get(`/extension-requests/self`)
.query({ taskId: taskId5 })
.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").with.lengthOf(0);
return done();
});
});

it("should return success response and a single latestExtensionRequest if assignee same as latest one", function (done) {
// fetchLatestExtensionRequestStub.returns({
// taskId: taskId5,
// title: "change ETA",
// assigneeId: user.id,
// assignee: "mayur",
// oldEndsOn: 1234,
// newEndsOn: 1237,
// reason: "family event",
// status: "APPROVED",
// requestNumber: 5,
// userId: user.id,
// id: "12234",
// });
chai
.request(app)
.get(`/extension-requests/self`)
.query({ taskId: taskId2 })
.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").with.lengthOf(1);
return done();
});
});

it("Should return 401 if not logged in", function (done) {
chai
.request(app)
Expand Down
95 changes: 0 additions & 95 deletions test/integration/multilpleExtensionRequest.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -280,99 +280,4 @@ describe("Multiple Extension Requests", function () {
expect(res.body.message).to.equal("New ETA must be greater than Old ETA");
});
});

let fetchLatestExtensionRequestStub;

describe("GET /extension-requests/self **when dev flag is true**", function () {
beforeEach(function () {
fetchLatestExtensionRequestStub = sinon.stub(extensionRequests, "fetchLatestExtensionRequest");
});

afterEach(function () {
fetchLatestExtensionRequestStub.restore();
});

it("Dev-flag true->should return success response and an empty array of extensionRequest if assignee is not same as latest one", function (done) {
fetchLatestExtensionRequestStub.returns({
taskId: taskId2,
title: "change ETA",
assignee: "mayur",
oldEndsOn: 1234,
newEndsOn: 1237,
reason: "family event",
status: "APPROVED",
requestNumber: 5,
userId: "ajdf",
});
chai
.request(app)
.get(`/extension-requests/self`)
.query({ taskId: taskId2, dev: "true" })
.set("cookie", `${cookieName}=${userJWT}`)
.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").with.lengthOf(0);
return done();
});
});

it("Dev-flag true->should return success response and a single latestExtensionRequest if assignee same as latest one", function (done) {
fetchLatestExtensionRequestStub.returns({
taskId: taskId2,
title: "change ETA",
assigneeId: user.id,
assignee: "mayur",
oldEndsOn: 1234,
newEndsOn: 1237,
reason: "family event",
status: "APPROVED",
requestNumber: 5,
userId: user.id,
id: "12234",
});
chai
.request(app)
.get(`/extension-requests/self`)
.query({ taskId: taskId2, dev: "true" })
.set("cookie", `${cookieName}=${userJWT}`)
.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").with.lengthOf(1);
return done();
});
});

it("Dev-flag true->it should return 401 if not logged in", function (done) {
chai
.request(app)
.get("/extension-requests/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();
});
});
});
});

0 comments on commit 0d414b1

Please sign in to comment.