From 4587285630d4a2441413d731e384125e02f5ddf2 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Sat, 9 Dec 2023 16:55:17 +0530 Subject: [PATCH 1/8] feat: adds route and controller functions for missed update --- constants/constants.ts | 12 ++++++- constants/tasks.ts | 5 +++ controllers/tasks.js | 32 ++++++++++++++++- middlewares/validators/tasks.js | 64 +++++++++++++++++++++++++++++++-- routes/tasks.js | 11 +++++- 5 files changed, 119 insertions(+), 5 deletions(-) diff --git a/constants/constants.ts b/constants/constants.ts index 692eec686..9d36b9094 100644 --- a/constants/constants.ts +++ b/constants/constants.ts @@ -1,5 +1,15 @@ const DOCUMENT_WRITE_SIZE = 500; +const daysOfWeek = { + sun: 0, + mon: 1, + tue: 2, + wed: 3, + thu: 4, + fri: 5, + sat: 6, +}; module.exports = { - DOCUMENT_WRITE_SIZE, + DOCUMENT_WRITE_SIZE, + daysOfWeek, }; diff --git a/constants/tasks.ts b/constants/tasks.ts index fa71d25f7..ba29fc2ee 100644 --- a/constants/tasks.ts +++ b/constants/tasks.ts @@ -44,6 +44,10 @@ const COMPLETED_TASK_STATUS = { }; const TASK_SIZE = 5; +const tasksUsersStatus = { + MISSED_UPDATES: "missed-updates", +}; + module.exports = { TASK_TYPE, TASK_STATUS, @@ -52,4 +56,5 @@ module.exports = { TASK_SIZE, DEFAULT_TASK_PRIORITY, COMPLETED_TASK_STATUS, + tasksUsersStatus, }; diff --git a/controllers/tasks.js b/controllers/tasks.js index cdfde8d54..e364dc37c 100644 --- a/controllers/tasks.js +++ b/controllers/tasks.js @@ -1,5 +1,5 @@ const tasks = require("../models/tasks"); -const { TASK_STATUS, TASK_STATUS_OLD } = require("../constants/tasks"); +const { TASK_STATUS, TASK_STATUS_OLD, tasksUsersStatus } = require("../constants/tasks"); const { addLog } = require("../models/logs"); const { USER_STATUS } = require("../constants/users"); const { addOrUpdate, getRdsUserInfoByGitHubUsername } = require("../models/users"); @@ -13,6 +13,9 @@ const { updateUserStatusOnTaskUpdate, updateStatusOnTaskCompletion } = require(" const dataAccess = require("../services/dataAccessLayer"); const { parseSearchQuery } = require("../utils/tasks"); const { addTaskCreatedAtAndUpdatedAtFields } = require("../services/tasks"); +const { RQLQueryParser } = require("../utils/RQLParser"); +const { getMissedProgressUpdatesUsers } = require("../models/discordactions"); +const { daysOfWeek } = require("../constants/constants"); /** * Creates new task * @@ -463,6 +466,32 @@ const updateStatus = async (req, res) => { } }; +const getUsersHandler = async (req, res) => { + try { + const { size, cursor, q: queryString } = req.query; + const rqlParser = new RQLQueryParser(queryString); + const { "days-count": daysGap, weekday, date, status } = rqlParser.getFilterQueries(); + if (!!status && status.length === 1 && status[0].value === tasksUsersStatus.MISSED_UPDATES) { + if (daysGap && daysGap > 1) { + return res.boom.badRequest("number of days gap provided cannot be greater than 1"); + } + const response = await getMissedProgressUpdatesUsers({ + cursor: cursor, + size: size && Number.parseInt(size), + excludedDates: date?.map((date) => Number.parseInt(date.value)), + excludedDays: weekday?.map((day) => daysOfWeek[day.value]), + dateGap: !!daysGap && daysGap.length === 1 && Number.parseInt(daysGap[0].value), + }); + return res.status(200).json(response); + } else { + return res.boom.badRequest("Unknown type and query"); + } + } catch (error) { + logger.error("Error in fetching users details of tasks", error); + return res.boom.badImplementation(INTERNAL_SERVER_ERROR); + } +}; + module.exports = { addNewTask, fetchTasks, @@ -474,4 +503,5 @@ module.exports = { overdueTasks, assignTask, updateStatus, + getUsersHandler, }; diff --git a/middlewares/validators/tasks.js b/middlewares/validators/tasks.js index ce1a69a14..bf3251bfa 100644 --- a/middlewares/validators/tasks.js +++ b/middlewares/validators/tasks.js @@ -1,7 +1,9 @@ const joi = require("joi"); const { DINERO, NEELAM } = require("../../constants/wallets"); -const { TASK_STATUS, TASK_STATUS_OLD, MAPPED_TASK_STATUS } = require("../../constants/tasks"); - +const { TASK_STATUS, TASK_STATUS_OLD, MAPPED_TASK_STATUS, tasksUsersStatus } = require("../../constants/tasks"); +const { RQLQueryParser } = require("../../utils/RQLParser"); +const { Operators } = require("../../typeDefinitions/rqlParser"); +const { daysOfWeek } = require("../../constants/constants"); const TASK_STATUS_ENUM = Object.values(TASK_STATUS); const MAPPED_TASK_STATUS_ENUM = Object.keys(MAPPED_TASK_STATUS); @@ -190,10 +192,68 @@ const getTasksValidator = async (req, res, next) => { res.boom.badRequest(error.details[0].message); } }; +const getUsersValidator = async (req, res, next) => { + const queryParamsSchema = joi.object().keys({ + cursor: joi.string().optional(), + q: joi.string().optional(), + size: joi.number().integer().min(1).max(2013), + }); + const filtersSchema = joi.object().keys({ + status: joi + .array() + .items( + joi.object().keys({ + value: joi.string().valid(...Object.values(tasksUsersStatus)), + operator: joi.string().valid(Operators.INCLUDE), + }) + ) + .required(), + "days-count": joi + .array() + .items( + joi.object().keys({ + value: joi.number().integer().min(1).max(10), + operator: joi.string().valid(Operators.EXCLUDE), + }) + ) + .optional(), + weekday: joi + .array() + .items( + joi.object().keys({ + value: joi.string().valid(...Object.keys(daysOfWeek)), + operator: joi.string().valid(Operators.EXCLUDE), + }) + ) + .optional(), + date: joi + .array() + .items( + joi.object().keys({ + value: joi.date().timestamp(), + operator: joi.string().valid(Operators.EXCLUDE), + }) + ) + .optional(), + }); + try { + const { q: queryString } = req.query; + const rqlQueryParser = new RQLQueryParser(queryString); + await Promise.all([ + queryParamsSchema.validateAsync(req.query), + filtersSchema.validateAsync(rqlQueryParser.getFilterQueries()), + ]); + next(); + } catch (error) { + logger.error(`Error validating get tasks for users query : ${error}`); + res.boom.badRequest(error.details[0].message); + } +}; module.exports = { createTask, updateTask, updateSelfTask, getTasksValidator, + getUsersValidator, }; diff --git a/routes/tasks.js b/routes/tasks.js index b62fc2478..862100fff 100644 --- a/routes/tasks.js +++ b/routes/tasks.js @@ -2,12 +2,19 @@ const express = require("express"); const router = express.Router(); const authenticate = require("../middlewares/authenticate"); const tasks = require("../controllers/tasks"); -const { createTask, updateTask, updateSelfTask, getTasksValidator } = require("../middlewares/validators/tasks"); +const { + createTask, + updateTask, + updateSelfTask, + getTasksValidator, + getUsersValidator, +} = require("../middlewares/validators/tasks"); const authorizeRoles = require("../middlewares/authorizeRoles"); const { APPOWNER, SUPERUSER } = require("../constants/roles"); const assignTask = require("../middlewares/assignTask"); const { cacheResponse, invalidateCache } = require("../utils/cache"); const { ALL_TASKS } = require("../constants/cacheKeys"); +const { verifyCronJob } = require("../middlewares/authorizeBot"); router.get("/", getTasksValidator, cacheResponse({ invalidationKey: ALL_TASKS, expiry: 10 }), tasks.fetchTasks); router.get("/self", authenticate, tasks.getSelfTasks); @@ -40,6 +47,8 @@ router.patch( ); router.patch("/assign/self", authenticate, invalidateCache({ invalidationKeys: [ALL_TASKS] }), tasks.assignTask); +router.get("/users/discord", verifyCronJob, getUsersValidator, tasks.getUsersHandler); + router.post("/migration", authenticate, authorizeRoles([SUPERUSER]), tasks.updateStatus); module.exports = router; From 55de2bb7c78f55b06179505d59d22ae6ff102b9e Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Sat, 9 Dec 2023 16:55:38 +0530 Subject: [PATCH 2/8] feat: adds tests for controller and validator of missed update script --- test/integration/tasks.test.js | 119 +++++++++++++++++- test/unit/middlewares/tasks-validator.test.js | 104 ++++++++++++++- 2 files changed, 219 insertions(+), 4 deletions(-) diff --git a/test/integration/tasks.test.js b/test/integration/tasks.test.js index e4202a32d..f0e7686a3 100644 --- a/test/integration/tasks.test.js +++ b/test/integration/tasks.test.js @@ -9,20 +9,30 @@ const tasks = require("../../models/tasks"); const authService = require("../../services/authService"); const addUser = require("../utils/addUser"); const userModel = require("../../models/users"); +const userStatusModel = require("../../models/userStatus"); const config = require("config"); const cookieName = config.get("userToken.cookieName"); const userData = require("../fixtures/user/user")(); const tasksData = require("../fixtures/tasks/tasks")(); const { DINERO, NEELAM } = require("../../constants/wallets"); const cleanDb = require("../utils/cleanDb"); -const { TASK_STATUS } = require("../../constants/tasks"); +const { TASK_STATUS, tasksUsersStatus } = require("../../constants/tasks"); const updateTaskStatus = require("../fixtures/tasks/tasks1")(); +const userStatusData = require("../fixtures/userStatus/userStatus"); +const tasksModel = firestore.collection("tasks"); +const discordService = require("../../services/discordService"); +const { CRON_JOB_HANDLER } = require("../../constants/bot"); chai.use(chaiHttp); const appOwner = userData[3]; const superUser = userData[4]; let jwt, superUserJwt; +const { createProgressDocument } = require("../../models/progresses"); +const { stubbedModelTaskProgressData } = require("../fixtures/progress/progresses"); +const { convertDaysToMilliseconds } = require("../../utils/time"); +const { getDiscordMembers } = require("../fixtures/discordResponse/discord-response"); +const { generateCronJobToken } = require("../utils/generateBotToken"); const taskData = [ { @@ -1292,4 +1302,111 @@ describe("Tasks", function () { expect(res.body.failedTasksIds.length).to.equal(4); }); }); + + describe("GET /tasks/users", function () { + let activeUserWithProgressUpdates; + let idleUser; + let userNotInDiscord; + let jwtToken; + beforeEach(async function () { + await cleanDb(); + idleUser = { ...userData[9], discordId: getDiscordMembers[0].user.id }; + activeUserWithProgressUpdates = { ...userData[10], discordId: getDiscordMembers[1].user.id }; + const activeUserWithNoUpdates = { ...userData[0], discordId: getDiscordMembers[2].user.id }; + userNotInDiscord = { ...userData[4], discordId: "Not in discord" }; + const { + idleStatus: idleUserStatus, + activeStatus: activeUserStatus, + userStatusDataForOooState: oooUserStatus, + } = userStatusData; + const userIdList = await Promise.all([ + await addUser(idleUser), // idle user with no task progress updates + await addUser(activeUserWithProgressUpdates), // active user with task progress updates + await addUser(activeUserWithNoUpdates), // active user with no task progress updates + await addUser(userNotInDiscord), // OOO user with + ]); + await Promise.all([ + await userStatusModel.updateUserStatus(userIdList[0], idleUserStatus), + await userStatusModel.updateUserStatus(userIdList[1], activeUserStatus), + await userStatusModel.updateUserStatus(userIdList[2], activeUserStatus), + await userStatusModel.updateUserStatus(userIdList[3], oooUserStatus), + ]); + + const tasksPromise = []; + + for (let index = 0; index < 4; index++) { + const task = tasksData[index]; + const validTask = { + ...task, + assignee: userIdList[index], + startedOn: (new Date().getTime() - convertDaysToMilliseconds(7)) / 1000, + endsOn: (new Date().getTime() + convertDaysToMilliseconds(4)) / 1000, + status: TASK_STATUS.IN_PROGRESS, + }; + + tasksPromise.push(tasksModel.add(validTask)); + } + const taskIdList = (await Promise.all(tasksPromise)).map((tasksDoc) => tasksDoc.id); + const progressDataList = []; + + const date = new Date(); + date.setDate(date.getDate() - 1); + const progressData = stubbedModelTaskProgressData(null, taskIdList[2], date.getTime(), date.valueOf()); + progressDataList.push(progressData); + + await Promise.all(progressDataList.map(async (progress) => await createProgressDocument(progress))); + const discordMembers = [...getDiscordMembers]; + discordMembers[0].roles.push("9876543210"); + discordMembers[1].roles.push("9876543210"); + sinon.stub(discordService, "getDiscordMembers").returns(discordMembers); + jwtToken = generateCronJobToken({ name: CRON_JOB_HANDLER }); + }); + afterEach(async function () { + sinon.restore(); + await cleanDb(); + }); + it("should return successful response with user id list", async function () { + const response = await chai + .request(app) + .get("/tasks/users/discord") + .query({ q: `status:${tasksUsersStatus.MISSED_UPDATES}` }) + .set("Authorization", `Bearer ${jwtToken}`); + expect(response.body).to.be.deep.equal({ + usersToAddRole: [activeUserWithProgressUpdates.discordId], + tasks: 4, + missedUpdatesTasks: 3, + }); + expect(response.status).to.be.equal(200); + }); + it("should return successful response with user id when all params are passed", async function () { + const response = await chai + .request(app) + .get("/tasks/users/discord") + .query({ + size: 3, + q: `status:${tasksUsersStatus.MISSED_UPDATES} -weekday:sun -weekday:mon -weekday:tue -weekday:wed -weekday:thu -weekday:fri -date:231423432 -days-count:4`, + }) + .set("Authorization", `Bearer ${jwtToken}`); + expect(response.body).to.be.deep.equal({ + usersToAddRole: [], + tasks: 0, + missedUpdatesTasks: 0, + }); + expect(response.status).to.be.equal(200); + }); + + it("should return bad request error when status is not passed", async function () { + const response = await chai + .request(app) + .get("/tasks/users/discord") + .query({}) + .set("Authorization", `Bearer ${jwtToken}`); + expect(response.body).to.be.deep.equal({ + error: "Bad Request", + message: '"status" is required', + statusCode: 400, + }); + expect(response.status).to.be.equal(400); + }); + }); }); diff --git a/test/unit/middlewares/tasks-validator.test.js b/test/unit/middlewares/tasks-validator.test.js index 19f2a2609..1a19eeeb0 100644 --- a/test/unit/middlewares/tasks-validator.test.js +++ b/test/unit/middlewares/tasks-validator.test.js @@ -1,7 +1,7 @@ -const Sinon = require("sinon"); -const { getTasksValidator, createTask } = require("../../../middlewares/validators/tasks"); +const Sinon = require("Sinon"); +const { getTasksValidator, createTask, getUsersValidator } = require("../../../middlewares/validators/tasks"); const { expect } = require("chai"); -const { TASK_STATUS } = require("../../../constants/tasks"); +const { TASK_STATUS, taskUsersType, tasksUsersStatus } = require("../../../constants/tasks"); describe("getTasks validator", function () { it("should pass the request when no values for query params dev or status is passed", async function () { @@ -520,4 +520,102 @@ describe("getTasks validator", function () { } expect(nextMiddlewareSpy.callCount).to.be.equal(0); }); + + describe("getUsersValidator | Validator", function () { + it("should pass the request when valid query parameters are provided", async function () { + const req = { + query: { + type: taskUsersType.DISCORD, + query: tasksUsersStatus.MISSED_UPDATES, + size: 10, + cursor: "someCursor", + q: "-days-count:2 -date:123423432 -weekday:sun", + }, + }; + const res = {}; + const nextMiddlewareSpy = Sinon.spy(); + await getUsersValidator(req, res, nextMiddlewareSpy); + expect(nextMiddlewareSpy.callCount).to.be.equal(1); + }); + it("should pass the request when multiple valid query parameters are provided", async function () { + const req = { + query: { + type: taskUsersType.DISCORD, + query: tasksUsersStatus.MISSED_UPDATES, + size: 10, + cursor: "someCursor", + q: "-days-count:2 -date:123423432 -weekday:sun -weekday:mon", + }, + }; + const res = {}; + const nextMiddlewareSpy = Sinon.spy(); + await getUsersValidator(req, res, nextMiddlewareSpy); + expect(nextMiddlewareSpy.callCount).to.be.equal(1); + }); + it("should pass the request when only required query parameters are provided", async function () { + const req = { + query: { + type: taskUsersType.DISCORD, + query: tasksUsersStatus.MISSED_UPDATES, + }, + }; + const res = {}; + const nextMiddlewareSpy = Sinon.spy(); + await getUsersValidator(req, res, nextMiddlewareSpy); + expect(nextMiddlewareSpy.callCount).to.be.equal(1); + }); + + it("should not pass validation when invalid query parameters are provided", async function () { + const req = { + query: { + invalidParam: "someValue", + }, + }; + const res = { + boom: { + badRequest: Sinon.spy(), + }, + }; + const nextMiddlewareSpy = Sinon.spy(); + await getUsersValidator(req, res, nextMiddlewareSpy); + expect(nextMiddlewareSpy.callCount).to.be.equal(0); + expect(res.boom.badRequest.callCount).to.be.equal(1); + }); + + it("should not pass validation when required parameters are missing", async function () { + const req = { + query: { + query: "someQuery", + }, + }; + const res = { + boom: { + badRequest: Sinon.spy(), + }, + }; + const nextMiddlewareSpy = Sinon.spy(); + await getUsersValidator(req, res, nextMiddlewareSpy); + expect(nextMiddlewareSpy.callCount).to.be.equal(0); + expect(res.boom.badRequest.callCount).to.be.equal(1); + }); + + it("should not pass validation when invalid filter parameters are provided", async function () { + const req = { + query: { + type: "someType", + query: "someQuery", + q: "date:invalidOperator:2023-01-01", + }, + }; + const res = { + boom: { + badRequest: Sinon.spy(), + }, + }; + const nextMiddlewareSpy = Sinon.spy(); + await getUsersValidator(req, res, nextMiddlewareSpy); + expect(nextMiddlewareSpy.callCount).to.be.equal(0); + expect(res.boom.badRequest.callCount).to.be.equal(1); + }); + }); }); From 72ba9b37b09aa20a57de42f2f4f66267068fd5f5 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Sat, 9 Dec 2023 17:07:31 +0530 Subject: [PATCH 3/8] fix: correct sinon import --- test/unit/middlewares/tasks-validator.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/middlewares/tasks-validator.test.js b/test/unit/middlewares/tasks-validator.test.js index 1a19eeeb0..c7ba8e37b 100644 --- a/test/unit/middlewares/tasks-validator.test.js +++ b/test/unit/middlewares/tasks-validator.test.js @@ -1,4 +1,4 @@ -const Sinon = require("Sinon"); +const Sinon = require("sinon"); const { getTasksValidator, createTask, getUsersValidator } = require("../../../middlewares/validators/tasks"); const { expect } = require("chai"); const { TASK_STATUS, taskUsersType, tasksUsersStatus } = require("../../../constants/tasks"); From c507ff2e17296236bb621b681b964d748f1a1df9 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Sat, 9 Dec 2023 17:34:03 +0530 Subject: [PATCH 4/8] fix: update validator test for query params --- test/unit/middlewares/tasks-validator.test.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/test/unit/middlewares/tasks-validator.test.js b/test/unit/middlewares/tasks-validator.test.js index c7ba8e37b..141fbc3ea 100644 --- a/test/unit/middlewares/tasks-validator.test.js +++ b/test/unit/middlewares/tasks-validator.test.js @@ -1,7 +1,7 @@ const Sinon = require("sinon"); const { getTasksValidator, createTask, getUsersValidator } = require("../../../middlewares/validators/tasks"); const { expect } = require("chai"); -const { TASK_STATUS, taskUsersType, tasksUsersStatus } = require("../../../constants/tasks"); +const { TASK_STATUS, tasksUsersStatus } = require("../../../constants/tasks"); describe("getTasks validator", function () { it("should pass the request when no values for query params dev or status is passed", async function () { @@ -525,11 +525,9 @@ describe("getTasks validator", function () { it("should pass the request when valid query parameters are provided", async function () { const req = { query: { - type: taskUsersType.DISCORD, - query: tasksUsersStatus.MISSED_UPDATES, size: 10, cursor: "someCursor", - q: "-days-count:2 -date:123423432 -weekday:sun", + q: `status:${tasksUsersStatus.MISSED_UPDATES} -days-count:2 -date:123423432 -weekday:sun`, }, }; const res = {}; @@ -540,11 +538,9 @@ describe("getTasks validator", function () { it("should pass the request when multiple valid query parameters are provided", async function () { const req = { query: { - type: taskUsersType.DISCORD, - query: tasksUsersStatus.MISSED_UPDATES, size: 10, cursor: "someCursor", - q: "-days-count:2 -date:123423432 -weekday:sun -weekday:mon", + q: `status:${tasksUsersStatus.MISSED_UPDATES} -days-count:2 -date:123423432 -weekday:sun -weekday:mon`, }, }; const res = {}; @@ -555,8 +551,7 @@ describe("getTasks validator", function () { it("should pass the request when only required query parameters are provided", async function () { const req = { query: { - type: taskUsersType.DISCORD, - query: tasksUsersStatus.MISSED_UPDATES, + q: `status:${tasksUsersStatus.MISSED_UPDATES}`, }, }; const res = {}; @@ -585,7 +580,7 @@ describe("getTasks validator", function () { it("should not pass validation when required parameters are missing", async function () { const req = { query: { - query: "someQuery", + size: "someQuery", }, }; const res = { @@ -602,8 +597,6 @@ describe("getTasks validator", function () { it("should not pass validation when invalid filter parameters are provided", async function () { const req = { query: { - type: "someType", - query: "someQuery", q: "date:invalidOperator:2023-01-01", }, }; From 9fc001cf41ca8129c2ef31bf34a961ba70bf4f69 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Sat, 9 Dec 2023 18:38:18 +0530 Subject: [PATCH 5/8] fix: failing test due modification of shallow copy of test data --- test/integration/tasks.test.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/integration/tasks.test.js b/test/integration/tasks.test.js index f0e7686a3..468ede37c 100644 --- a/test/integration/tasks.test.js +++ b/test/integration/tasks.test.js @@ -1355,10 +1355,14 @@ describe("Tasks", function () { progressDataList.push(progressData); await Promise.all(progressDataList.map(async (progress) => await createProgressDocument(progress))); - const discordMembers = [...getDiscordMembers]; - discordMembers[0].roles.push("9876543210"); - discordMembers[1].roles.push("9876543210"); - sinon.stub(discordService, "getDiscordMembers").returns(discordMembers); + const discordMembers = [...getDiscordMembers].map((user) => { + return { ...user }; + }); + const roles1 = [...discordMembers[0].roles, "9876543210"]; + const roles2 = [...discordMembers[1].roles, "9876543210"]; + discordMembers[0].roles = roles1; + discordMembers[0].roles = roles2; + sinon.stub(discordService, "getDiscordMembers").returns(...discordMembers); jwtToken = generateCronJobToken({ name: CRON_JOB_HANDLER }); }); afterEach(async function () { From cdfa750909291d0f3d2b9b0ec5ac892afaafd199 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna <98796547+Ajeyakrishna-k@users.noreply.github.com> Date: Sat, 9 Dec 2023 19:17:39 +0530 Subject: [PATCH 6/8] chore: remove unnecessary array spreading --- test/integration/tasks.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/tasks.test.js b/test/integration/tasks.test.js index 468ede37c..08baa7a58 100644 --- a/test/integration/tasks.test.js +++ b/test/integration/tasks.test.js @@ -1362,7 +1362,7 @@ describe("Tasks", function () { const roles2 = [...discordMembers[1].roles, "9876543210"]; discordMembers[0].roles = roles1; discordMembers[0].roles = roles2; - sinon.stub(discordService, "getDiscordMembers").returns(...discordMembers); + sinon.stub(discordService, "getDiscordMembers").returns(discordMembers); jwtToken = generateCronJobToken({ name: CRON_JOB_HANDLER }); }); afterEach(async function () { From a71b3a6d8306145c4cda4f60b10ae5eaf724ced7 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna <98796547+Ajeyakrishna-k@users.noreply.github.com> Date: Sat, 9 Dec 2023 19:28:26 +0530 Subject: [PATCH 7/8] chore: fix typo in discord member mock data index --- test/integration/tasks.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/tasks.test.js b/test/integration/tasks.test.js index 08baa7a58..eabcba0a2 100644 --- a/test/integration/tasks.test.js +++ b/test/integration/tasks.test.js @@ -1361,7 +1361,7 @@ describe("Tasks", function () { const roles1 = [...discordMembers[0].roles, "9876543210"]; const roles2 = [...discordMembers[1].roles, "9876543210"]; discordMembers[0].roles = roles1; - discordMembers[0].roles = roles2; + discordMembers[1].roles = roles2; sinon.stub(discordService, "getDiscordMembers").returns(discordMembers); jwtToken = generateCronJobToken({ name: CRON_JOB_HANDLER }); }); From 013c5a58e769976508e4ed3f12d837717a4c723c Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Sun, 10 Dec 2023 22:47:47 +0530 Subject: [PATCH 8/8] chore: fixes lint issues --- test/unit/middlewares/tasks-validator.test.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/test/unit/middlewares/tasks-validator.test.js b/test/unit/middlewares/tasks-validator.test.js index a06a2bf89..2189b6825 100644 --- a/test/unit/middlewares/tasks-validator.test.js +++ b/test/unit/middlewares/tasks-validator.test.js @@ -1,5 +1,10 @@ const Sinon = require("sinon"); -const { getTasksValidator, createTask, getUsersValidator, updateTask: updateTaskValidator } = require("../../../middlewares/validators/tasks"); +const { + getTasksValidator, + createTask, + getUsersValidator, + updateTask: updateTaskValidator, +} = require("../../../middlewares/validators/tasks"); const { expect } = require("chai"); const { TASK_STATUS, tasksUsersStatus } = require("../../../constants/tasks"); @@ -611,7 +616,7 @@ describe("getTasks validator", function () { await updateTaskValidator(req, res, nextMiddlewareSpy); expect(nextMiddlewareSpy.callCount).to.be.equal(0); }); - describe("getUsersValidator | Validator", function () { + describe("getUsersValidator | Validator", function () { it("should pass the request when valid query parameters are provided", async function () { const req = { query: { @@ -700,5 +705,5 @@ describe("getTasks validator", function () { expect(nextMiddlewareSpy.callCount).to.be.equal(0); expect(res.boom.badRequest.callCount).to.be.equal(1); }); - }); + }); });