Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 0 additions & 2 deletions controllers/oooRequests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,7 @@ export const createOooRequestController = async (
const requestBody = req.body;
const { id: userId, username } = req.userData;
const isUserPartOfDiscord = req.userData.roles.in_discord;
const dev = req.query.dev === "true";

if (!dev) return res.boom.notImplemented("Feature not implemented");

if (!isUserPartOfDiscord) {
return res.boom.forbidden(UNAUTHORIZED_TO_CREATE_OOO_REQUEST);
Expand Down
15 changes: 5 additions & 10 deletions middlewares/oooRoleCheckMiddleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,11 @@ export const oooRoleCheckMiddleware = (
const requestType = req.body?.type;

if (requestType === REQUEST_TYPE.OOO) {
// TODO: Remove this middleware once the OOO feature is tested and ready
return devFlagMiddleware(req, res, (err) => {
if (err) return next(err);

try {
return authorizeRoles([SUPERUSER])(req, res, next);
} catch (authErr) {
return next(authErr);
}
});
try {
return authorizeRoles([SUPERUSER])(req, res, next);
} catch (authErr) {
return next(authErr);
}
}

return next();
Expand Down
2 changes: 1 addition & 1 deletion middlewares/validators/requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ export const updateRequestsMiddleware = async (

export const getRequestsMiddleware = async (req: OooRequestCreateRequest, res: OooRequestResponse, next: NextFunction) => {
const schema = joi.object().keys({
dev: joi.bool().sensitive().optional(), // TODO: Remove this validator once feature is tested and ready to be used
id: joi.string().optional(),
type: joi
.string()
Expand All @@ -96,6 +95,7 @@ export const getRequestsMiddleware = async (req: OooRequestCreateRequest, res: O
.string()
.valid(REQUEST_STATE.APPROVED, REQUEST_STATE.PENDING, REQUEST_STATE.REJECTED)
.optional(),
dev: joi.boolean().optional(),
page: joi.number().integer().min(0).when("next", {
is: joi.exist(),
then: joi.forbidden().messages({
Expand Down
2 changes: 1 addition & 1 deletion models/requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ export const getRequests = async (query: any) => {
return null;
}

allRequests = transformRequestResponse(allRequests, dev);
allRequests = transformRequestResponse(allRequests);

return {
allRequests,
Expand Down
2 changes: 1 addition & 1 deletion services/oooRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export const validateUserStatus = async (
};
}

if (userStatus.data.currentStatus.state === userState.OOO) {
if (userStatus.data.currentStatus.state=== userState.OOO) {
await addLog(logType.OOO_STATUS_FOUND,
{ userId, userStatus: userState.OOO },
{ message: OOO_STATUS_ALREADY_EXIST }
Expand Down
72 changes: 21 additions & 51 deletions test/integration/requests.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ let testArchivedUserId: string;

describe("/requests OOO", function () {

const requestsEndpoint: string = "/requests?dev=true";
const requestsEndpoint: string = "/requests";

beforeEach(async function () {
const userIdPromises = [addUser(userData[16]), addUser(userData[4]), addUser(userData[18])];
Expand Down Expand Up @@ -113,22 +113,6 @@ describe("/requests OOO", function () {
await cleanDb();
});

it("should return 501 and 'Feature not implemented' message when dev is false", function (done) {
chai
.request(app)
.post("/requests?dev=false")
.set("cookie", `${cookieName}=${authToken}`)
.send(validOooStatusRequests)
.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 401 if user is not logged in", function (done) {
chai
.request(app)
Expand Down Expand Up @@ -174,7 +158,7 @@ describe("/requests OOO", function () {
});
});

it("should create a new request when dev is true", function (done) {
it("should create a new OOO request", function (done) {
chai
.request(app)
.post(requestsEndpoint)
Expand Down Expand Up @@ -218,7 +202,7 @@ describe("/requests OOO", function () {
.request(app)
.post(requestsEndpoint)
.set("cookie", `${cookieName}=${authToken}`)
.send({...validOooStatusRequests, until: Date.now()})
.send({ ...validOooStatusRequests, until: Date.now() })
.end(function (err, res) {
if (err) return done(err);
expect(res).to.have.status(400);
Expand All @@ -233,7 +217,7 @@ describe("/requests OOO", function () {
.request(app)
.post(requestsEndpoint)
.set("cookie", `${cookieName}=${authToken}`)
.send({...validOooStatusRequests, from: Date.now() - 1 * 24 * 60 * 60 * 1000 })
.send({ ...validOooStatusRequests, from: Date.now() - 1 * 24 * 60 * 60 * 1000 })
.end(function (err, res) {
if (err) return done(err);
expect(res).to.have.status(400);
Expand Down Expand Up @@ -350,7 +334,7 @@ describe("/requests OOO", function () {
it("should return 401 if user is not logged in", function (done) {
chai
.request(app)
.patch(`/requests/${testOooRequest.id}?dev=true`)
.patch(`/requests/${testOooRequest.id}`)
.send(testAcknowledgeOooRequest)
.end(function (err, res) {
expect(res).to.have.status(401);
Expand All @@ -360,26 +344,12 @@ describe("/requests OOO", function () {
});
});

it("should return 501 and 'Feature not implemented' message when dev is false", function (done) {
chai
.request(app)
.patch(`/requests/${testOooRequest.id}?dev=false`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(testAcknowledgeOooRequest)
.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/11111111111111?dev=true`)
.patch(`/requests/11111111111111`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(testAcknowledgeOooRequest)
.end(function (err, res) {
Expand All @@ -395,7 +365,7 @@ describe("/requests OOO", function () {
it("should return 403 if user does not have super user permission", function (done) {
chai
.request(app)
.patch(`/requests/${testOooRequest.id}?dev=true`)
.patch(`/requests/${testOooRequest.id}`)
.set("cookie", `${cookieName}=${authToken}`)
.send(testAcknowledgeOooRequest)
.end(function (err, res) {
Expand All @@ -411,7 +381,7 @@ describe("/requests OOO", function () {
it("should return 409 if OOO request is already approved", function (done) {
chai
.request(app)
.patch(`/requests/${approvedOooRequest.id}?dev=true`)
.patch(`/requests/${approvedOooRequest.id}`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(testAcknowledgeOooRequest)
.end(function (err, res) {
Expand All @@ -427,7 +397,7 @@ describe("/requests OOO", function () {
it("should return 409 if OOO request is already rejected", function (done) {
chai
.request(app)
.patch(`/requests/${rejectedOooRequest.id}?dev=true`)
.patch(`/requests/${rejectedOooRequest.id}`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(testAcknowledgeOooRequest)
.end(function (err, res) {
Expand All @@ -443,7 +413,7 @@ describe("/requests OOO", function () {
it("should return 400 when the request type for the given ID is not 'OOO'", function (done) {
chai
.request(app)
.patch(`/requests/${onboardingRequest.id}?dev=true`)
.patch(`/requests/${onboardingRequest.id}`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(testAcknowledgeOooRequest)
.end(function (err, res) {
Expand All @@ -456,10 +426,10 @@ describe("/requests OOO", function () {
});
});

it("should approve OOO request when dev is true", function (done) {
it("should approve OOO request", function (done) {
chai
.request(app)
.patch(`/requests/${testOooRequest.id}?dev=true`)
.patch(`/requests/${testOooRequest.id}`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(testAcknowledgeOooRequest)
.end(function (err, res) {
Expand All @@ -472,12 +442,12 @@ describe("/requests OOO", function () {
});
});

it("should reject OOO request when dev is true", function (done) {
it("should reject OOO request", function (done) {
chai
.request(app)
.patch(`/requests/${testOooRequest.id}?dev=true`)
.patch(`/requests/${testOooRequest.id}`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send({...testAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED})
.send({ ...testAcknowledgeOooRequest, status: REQUEST_STATE.REJECTED })
.end(function (err, res) {
if (err) {
return done(err);
Expand All @@ -492,7 +462,7 @@ describe("/requests OOO", function () {
sinon.stub(logUtils, "addLog").throws("Error");
chai
.request(app)
.patch(`/requests/${testOooRequest.id}?dev=true`)
.patch(`/requests/${testOooRequest.id}`)
.set("cookie", `${cookieName}=${superUserToken}`)
.send(testAcknowledgeOooRequest)
.end(function (err, res) {
Expand Down Expand Up @@ -579,15 +549,15 @@ describe("/requests OOO", function () {
it("should return all requests", function (done) {
chai
.request(app)
.get("/requests?dev=true")
.get("/requests")
.end(function (err, res) {
expect(res).to.have.status(200);
expect(res.body.data).to.have.lengthOf(2);
expect(res.body.data[0]).to.have.property("id");
expect(res.body.data[0]).to.have.property("requestedBy");
expect(res.body.data[0]).to.have.property("type");
expect(res.body.data[0]).to.have.property("state");
expect(res.body.data[0]).to.have.property("message");
expect(res.body.data[0]).to.have.property("status");
expect(res.body.data[0]).to.have.property("reason");
done();
});
});
Expand Down Expand Up @@ -620,7 +590,7 @@ describe("/requests OOO", function () {
.get(`/requests?state=APPROVED&requestedBy=${userData[16].username}`)
.end(function (err, res) {
expect(res).to.have.status(200);
expect(res.body.data.every((e: any) => e.state === "APPROVED"));
expect(res.body.data.every((e: any) => e.status === "APPROVED"));
expect(res.body.data.every((e: any) => e.requestedBy === testUserId));
done();
});
Expand Down
34 changes: 17 additions & 17 deletions test/unit/models/requests.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,26 +94,26 @@ describe("models/oooRequests", () => {
describe("getRequests", () => {
it("Should return the request with the specified ID", async () => {
const oooRequest = await createRequest(createOooRequests2);
const query = { id: oooRequest.id, dev: "true" };
const query = { id: oooRequest.id };
const oooRequestData: any = await getRequests(query);
expect(oooRequestData.id).to.be.equal(oooRequest.id);
});

it("Should return null if the request with the specified ID does not exist", async () => {
const query = { id: "randomId", dev: "true" };
const query = { id: "randomId" };
const oooRequestData = await getRequests(query);
expect(oooRequestData).to.be.equal(null);
});

it("Should return a list of all the GET requests", async () => {
await createRequest(createOooRequests);
await createRequest(createOooRequests2);
const query = { dev: "true" };
const query = { };
const oooRequestData = await getRequests(query);
expect(oooRequestData.allRequests).to.be.have.length(2);
});

it("Should return APPROVED state in old schema when dev=false", async () => {
it("Should return APPROVED state", async () => {
const oooRequest: OooStatusRequest = await createRequest(createOooStatusRequests);
await updateRequest(
oooRequest.id,
Expand All @@ -126,31 +126,31 @@ describe("models/oooRequests", () => {
expect(oooRequestData.allRequests[0].status).to.be.equal(REQUEST_STATE.APPROVED);
});

it("Should return APPROVED status in new schema when dev=true", async () => {
it("Should return APPROVED status in new schema", async () => {
const oooRequest: OooStatusRequest = await createRequest(createOooStatusRequests);
await updateRequest(
oooRequest.id,
updateOooApprovedRequests,
updateOooApprovedRequests.lastModifiedBy,
REQUEST_TYPE.OOO
);
const query = { dev: "true", state: REQUEST_STATE.APPROVED };
const query = { state: REQUEST_STATE.APPROVED };
const oooRequestData = await getRequests(query);
expect(oooRequestData.allRequests[0].state).to.be.equal(REQUEST_STATE.APPROVED);
expect(oooRequestData.allRequests[0].status).to.be.equal(REQUEST_STATE.APPROVED);
});

it("Should return PENDING state in old schema when dev=false", async () => {
it("Should return PENDING state in new schema", async () => {
await createRequest(createOooStatusRequests);
const query = { dev: "false", status: REQUEST_STATE.PENDING };
const query = { status: REQUEST_STATE.PENDING };
const oooRequestData = await getRequests(query);
expect(oooRequestData.allRequests[0].status).to.be.equal(REQUEST_STATE.PENDING);
expect(oooRequestData.allRequests[0].status ).to.be.equal(REQUEST_STATE.PENDING);
});

it("Should return PENDING status in new schema when dev=true", async () => {
it("Should return PENDING status", async () => {
await createRequest(createOooStatusRequests);
const query = { dev: "true", status: REQUEST_STATE.PENDING };
const query = { status: REQUEST_STATE.PENDING };
const oooRequestData = await getRequests(query);
expect(oooRequestData.allRequests[0].state).to.be.equal(REQUEST_STATE.PENDING);
expect(oooRequestData.allRequests[0].status).to.be.equal(REQUEST_STATE.PENDING);
});

it("Should return a list of all the requests by specific user ", async () => {
Expand All @@ -164,29 +164,29 @@ describe("models/oooRequests", () => {

it("Should return a list of all the requests for specific type ", async () => {
await createRequest(createOooRequests);
const query = { dev: "true", type: REQUEST_TYPE.OOO };
const query = { type: REQUEST_TYPE.OOO };
const oooRequestData = await getRequests(query);
expect(oooRequestData.allRequests[0].type).to.be.equal(REQUEST_TYPE.OOO);
});

it("Should return empty array if no data is found", async () => {
const query = { dev: "true", status: REQUEST_STATE.PENDING };
const query = { status: REQUEST_STATE.PENDING };
const oooRequestData = await getRequests(query);
expect(oooRequestData).to.be.equal(null);
});

it("Should return a list of all the requests by page ", async () => {
await createRequest(createOooRequests);
await createRequest(createOooRequests2);
const query = { dev: "true", page: 1 };
const query = { page: 1 };
const oooRequestData = await getRequests(query);
expect(oooRequestData.page).to.be.equal(2);
});

it("Should return a list of all the requests by size ", async () => {
await createRequest(createOooRequests);
await createRequest(createOooRequests2);
const query = { dev: "true", size: 1 };
const query = { size: 1 };
const oooRequestData = await getRequests(query);
expect(oooRequestData.allRequests).to.have.lengthOf(1);
});
Expand Down
11 changes: 5 additions & 6 deletions utils/requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,21 +68,20 @@ export const newOOOSchema = (request: oldOooStatusRequest) => ({
* Transforms request responses based on request type and dev flag
* @param {boolean} dev - Development flag to determine transformation logic
*/
export const transformRequestResponse = (allRequests: (OooStatusRequest | oldOooStatusRequest)[], dev: boolean = false): (OooStatusRequest | oldOooStatusRequest)[] => {
export const transformRequestResponse = (allRequests: (OooStatusRequest | oldOooStatusRequest)[]): (OooStatusRequest | oldOooStatusRequest)[] => {
return allRequests.map(request => {

if (request.type !== REQUEST_TYPE.OOO) {
return request;
}

if (dev && 'status' in request) {
if ('status' in request) {
return oldOOOSchema(request as OooStatusRequest);
}

if (!dev && 'state' in request) {
if ('state' in request) {
return newOOOSchema(request as oldOooStatusRequest);
}

return request;
});

};
Loading