@@ -9,20 +9,30 @@ const tasks = require("../../models/tasks");
99const authService = require ( "../../services/authService" ) ;
1010const addUser = require ( "../utils/addUser" ) ;
1111const userModel = require ( "../../models/users" ) ;
12+ const userStatusModel = require ( "../../models/userStatus" ) ;
1213const config = require ( "config" ) ;
1314const cookieName = config . get ( "userToken.cookieName" ) ;
1415const userData = require ( "../fixtures/user/user" ) ( ) ;
1516const tasksData = require ( "../fixtures/tasks/tasks" ) ( ) ;
1617const { DINERO , NEELAM } = require ( "../../constants/wallets" ) ;
1718const cleanDb = require ( "../utils/cleanDb" ) ;
18- const { TASK_STATUS } = require ( "../../constants/tasks" ) ;
19+ const { TASK_STATUS , tasksUsersStatus } = require ( "../../constants/tasks" ) ;
1920const updateTaskStatus = require ( "../fixtures/tasks/tasks1" ) ( ) ;
21+ const userStatusData = require ( "../fixtures/userStatus/userStatus" ) ;
22+ const tasksModel = firestore . collection ( "tasks" ) ;
23+ const discordService = require ( "../../services/discordService" ) ;
24+ const { CRON_JOB_HANDLER } = require ( "../../constants/bot" ) ;
2025chai . use ( chaiHttp ) ;
2126
2227const appOwner = userData [ 3 ] ;
2328const superUser = userData [ 4 ] ;
2429
2530let jwt , superUserJwt ;
31+ const { createProgressDocument } = require ( "../../models/progresses" ) ;
32+ const { stubbedModelTaskProgressData } = require ( "../fixtures/progress/progresses" ) ;
33+ const { convertDaysToMilliseconds } = require ( "../../utils/time" ) ;
34+ const { getDiscordMembers } = require ( "../fixtures/discordResponse/discord-response" ) ;
35+ const { generateCronJobToken } = require ( "../utils/generateBotToken" ) ;
2636
2737const taskData = [
2838 {
@@ -1293,6 +1303,117 @@ describe("Tasks", function () {
12931303 } ) ;
12941304 } ) ;
12951305
1306+ describe ( "GET /tasks/users" , function ( ) {
1307+ let activeUserWithProgressUpdates ;
1308+ let idleUser ;
1309+ let userNotInDiscord ;
1310+ let jwtToken ;
1311+ beforeEach ( async function ( ) {
1312+ await cleanDb ( ) ;
1313+ idleUser = { ...userData [ 9 ] , discordId : getDiscordMembers [ 0 ] . user . id } ;
1314+ activeUserWithProgressUpdates = { ...userData [ 10 ] , discordId : getDiscordMembers [ 1 ] . user . id } ;
1315+ const activeUserWithNoUpdates = { ...userData [ 0 ] , discordId : getDiscordMembers [ 2 ] . user . id } ;
1316+ userNotInDiscord = { ...userData [ 4 ] , discordId : "Not in discord" } ;
1317+ const {
1318+ idleStatus : idleUserStatus ,
1319+ activeStatus : activeUserStatus ,
1320+ userStatusDataForOooState : oooUserStatus ,
1321+ } = userStatusData ;
1322+ const userIdList = await Promise . all ( [
1323+ await addUser ( idleUser ) , // idle user with no task progress updates
1324+ await addUser ( activeUserWithProgressUpdates ) , // active user with task progress updates
1325+ await addUser ( activeUserWithNoUpdates ) , // active user with no task progress updates
1326+ await addUser ( userNotInDiscord ) , // OOO user with
1327+ ] ) ;
1328+ await Promise . all ( [
1329+ await userStatusModel . updateUserStatus ( userIdList [ 0 ] , idleUserStatus ) ,
1330+ await userStatusModel . updateUserStatus ( userIdList [ 1 ] , activeUserStatus ) ,
1331+ await userStatusModel . updateUserStatus ( userIdList [ 2 ] , activeUserStatus ) ,
1332+ await userStatusModel . updateUserStatus ( userIdList [ 3 ] , oooUserStatus ) ,
1333+ ] ) ;
1334+
1335+ const tasksPromise = [ ] ;
1336+
1337+ for ( let index = 0 ; index < 4 ; index ++ ) {
1338+ const task = tasksData [ index ] ;
1339+ const validTask = {
1340+ ...task ,
1341+ assignee : userIdList [ index ] ,
1342+ startedOn : ( new Date ( ) . getTime ( ) - convertDaysToMilliseconds ( 7 ) ) / 1000 ,
1343+ endsOn : ( new Date ( ) . getTime ( ) + convertDaysToMilliseconds ( 4 ) ) / 1000 ,
1344+ status : TASK_STATUS . IN_PROGRESS ,
1345+ } ;
1346+
1347+ tasksPromise . push ( tasksModel . add ( validTask ) ) ;
1348+ }
1349+ const taskIdList = ( await Promise . all ( tasksPromise ) ) . map ( ( tasksDoc ) => tasksDoc . id ) ;
1350+ const progressDataList = [ ] ;
1351+
1352+ const date = new Date ( ) ;
1353+ date . setDate ( date . getDate ( ) - 1 ) ;
1354+ const progressData = stubbedModelTaskProgressData ( null , taskIdList [ 2 ] , date . getTime ( ) , date . valueOf ( ) ) ;
1355+ progressDataList . push ( progressData ) ;
1356+
1357+ await Promise . all ( progressDataList . map ( async ( progress ) => await createProgressDocument ( progress ) ) ) ;
1358+ const discordMembers = [ ...getDiscordMembers ] . map ( ( user ) => {
1359+ return { ...user } ;
1360+ } ) ;
1361+ const roles1 = [ ...discordMembers [ 0 ] . roles , "9876543210" ] ;
1362+ const roles2 = [ ...discordMembers [ 1 ] . roles , "9876543210" ] ;
1363+ discordMembers [ 0 ] . roles = roles1 ;
1364+ discordMembers [ 1 ] . roles = roles2 ;
1365+ sinon . stub ( discordService , "getDiscordMembers" ) . returns ( discordMembers ) ;
1366+ jwtToken = generateCronJobToken ( { name : CRON_JOB_HANDLER } ) ;
1367+ } ) ;
1368+ afterEach ( async function ( ) {
1369+ sinon . restore ( ) ;
1370+ await cleanDb ( ) ;
1371+ } ) ;
1372+ it ( "should return successful response with user id list" , async function ( ) {
1373+ const response = await chai
1374+ . request ( app )
1375+ . get ( "/tasks/users/discord" )
1376+ . query ( { q : `status:${ tasksUsersStatus . MISSED_UPDATES } ` } )
1377+ . set ( "Authorization" , `Bearer ${ jwtToken } ` ) ;
1378+ expect ( response . body ) . to . be . deep . equal ( {
1379+ usersToAddRole : [ activeUserWithProgressUpdates . discordId ] ,
1380+ tasks : 4 ,
1381+ missedUpdatesTasks : 3 ,
1382+ } ) ;
1383+ expect ( response . status ) . to . be . equal ( 200 ) ;
1384+ } ) ;
1385+ it ( "should return successful response with user id when all params are passed" , async function ( ) {
1386+ const response = await chai
1387+ . request ( app )
1388+ . get ( "/tasks/users/discord" )
1389+ . query ( {
1390+ size : 3 ,
1391+ q : `status:${ tasksUsersStatus . MISSED_UPDATES } -weekday:sun -weekday:mon -weekday:tue -weekday:wed -weekday:thu -weekday:fri -date:231423432 -days-count:4` ,
1392+ } )
1393+ . set ( "Authorization" , `Bearer ${ jwtToken } ` ) ;
1394+ expect ( response . body ) . to . be . deep . equal ( {
1395+ usersToAddRole : [ ] ,
1396+ tasks : 0 ,
1397+ missedUpdatesTasks : 0 ,
1398+ } ) ;
1399+ expect ( response . status ) . to . be . equal ( 200 ) ;
1400+ } ) ;
1401+
1402+ it ( "should return bad request error when status is not passed" , async function ( ) {
1403+ const response = await chai
1404+ . request ( app )
1405+ . get ( "/tasks/users/discord" )
1406+ . query ( { } )
1407+ . set ( "Authorization" , `Bearer ${ jwtToken } ` ) ;
1408+ expect ( response . body ) . to . be . deep . equal ( {
1409+ error : "Bad Request" ,
1410+ message : '"status" is required' ,
1411+ statusCode : 400 ,
1412+ } ) ;
1413+ expect ( response . status ) . to . be . equal ( 400 ) ;
1414+ } ) ;
1415+ } ) ;
1416+
12961417 describe ( "PATCH /tasks/:id should update the tasks by SuperUser" , function ( ) {
12971418 beforeEach ( async function ( ) {
12981419 const superUserId = await addUser ( superUser ) ;
0 commit comments