@@ -9,20 +9,30 @@ const tasks = require("../../models/tasks");
9
9
const authService = require ( "../../services/authService" ) ;
10
10
const addUser = require ( "../utils/addUser" ) ;
11
11
const userModel = require ( "../../models/users" ) ;
12
+ const userStatusModel = require ( "../../models/userStatus" ) ;
12
13
const config = require ( "config" ) ;
13
14
const cookieName = config . get ( "userToken.cookieName" ) ;
14
15
const userData = require ( "../fixtures/user/user" ) ( ) ;
15
16
const tasksData = require ( "../fixtures/tasks/tasks" ) ( ) ;
16
17
const { DINERO , NEELAM } = require ( "../../constants/wallets" ) ;
17
18
const cleanDb = require ( "../utils/cleanDb" ) ;
18
- const { TASK_STATUS } = require ( "../../constants/tasks" ) ;
19
+ const { TASK_STATUS , tasksUsersStatus } = require ( "../../constants/tasks" ) ;
19
20
const 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" ) ;
20
25
chai . use ( chaiHttp ) ;
21
26
22
27
const appOwner = userData [ 3 ] ;
23
28
const superUser = userData [ 4 ] ;
24
29
25
30
let 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" ) ;
26
36
27
37
const taskData = [
28
38
{
@@ -1293,6 +1303,117 @@ describe("Tasks", function () {
1293
1303
} ) ;
1294
1304
} ) ;
1295
1305
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
+
1296
1417
describe ( "PATCH /tasks/:id should update the tasks by SuperUser" , function ( ) {
1297
1418
beforeEach ( async function ( ) {
1298
1419
const superUserId = await addUser ( superUser ) ;
0 commit comments