1
+ /* eslint-disable consistent-return */
1
2
const chai = require ( "chai" ) ;
2
3
const { expect } = chai ;
3
4
const chaiHttp = require ( "chai-http" ) ;
@@ -24,6 +25,8 @@ const { userState } = require("../../constants/userStatus");
24
25
const cookieName = config . get ( "userToken.cookieName" ) ;
25
26
const userStatusModel = require ( "../../models/userStatus" ) ;
26
27
const { convertTimestampToUTCStartOrEndOfDay } = require ( "../../utils/time" ) ;
28
+ const bot = require ( "../utils/generateBotToken" ) ;
29
+ const { CRON_JOB_HANDLER } = require ( "../../constants/bot" ) ;
27
30
28
31
chai . use ( chaiHttp ) ;
29
32
@@ -32,13 +35,15 @@ describe("UserStatus", function () {
32
35
let superUserId ;
33
36
let superUserAuthToken ;
34
37
let userId = "" ;
38
+ let cronjobJwtToken ;
35
39
36
40
beforeEach ( async function ( ) {
37
41
userId = await addUser ( ) ;
38
42
jwt = authService . generateAuthToken ( { userId } ) ;
39
43
superUserId = await addUser ( superUser ) ;
40
44
superUserAuthToken = authService . generateAuthToken ( { userId : superUserId } ) ;
41
45
await updateUserStatus ( userId , userStatusDataForNewUser ) ;
46
+ cronjobJwtToken = bot . generateCronJobToken ( { name : CRON_JOB_HANDLER } ) ;
42
47
} ) ;
43
48
44
49
afterEach ( async function ( ) {
@@ -276,7 +281,89 @@ describe("UserStatus", function () {
276
281
} ) ;
277
282
278
283
describe ( "PATCH /users/status/sync" , function ( ) {
279
- // TODO: Added test cases here
284
+ describe ( "PATCH /users/status/sync" , function ( ) {
285
+ it ( "should return all user statuses" , function ( done ) {
286
+ const fakeResponse = {
287
+ message : "All User Status updated successfully." ,
288
+ data : {
289
+ usersCount : 5 ,
290
+ oooUsersAltered : 0 ,
291
+ oooUsersUnaltered : 0 ,
292
+ nonOooUsersAltered : 3 ,
293
+ nonOooUsersUnaltered : 0 ,
294
+ } ,
295
+ } ;
296
+
297
+ const chaiRequestStub = sinon . stub ( chai , "request" ) . returns ( {
298
+ patch : sinon . stub ( ) . returnsThis ( ) ,
299
+ set : sinon . stub ( ) . returnsThis ( ) ,
300
+ end : ( callback ) => {
301
+ callback ( null , { body : fakeResponse , status : 200 } ) ;
302
+ } ,
303
+ } ) ;
304
+
305
+ chai
306
+ . request ( app )
307
+ . patch ( "/users/status/sync" )
308
+ . set ( "Authorization" , `Bearer ${ cronjobJwtToken } ` )
309
+ . end ( ( err , res ) => {
310
+ chaiRequestStub . restore ( ) ;
311
+ if ( err ) {
312
+ return done ( err ) ;
313
+ }
314
+ expect ( res ) . to . have . status ( 200 ) ;
315
+ expect ( res . body . message ) . to . equal ( "All User Status updated successfully." ) ;
316
+ expect ( res . body . data ) . to . deep . equal ( fakeResponse . data ) ;
317
+ done ( ) ;
318
+ } ) ;
319
+ } ) ;
320
+
321
+ describe ( "No users found for status update" , function ( ) {
322
+ it ( "should return 500 error with appropriate message" , function ( done ) {
323
+ const updateAllUserStatusStub = sinon . stub ( ) . resolves ( ) ;
324
+ const getTaskBasedUsersStatusStub = sinon . stub ( ) . resolves ( { data : { users : [ ] } } ) ;
325
+
326
+ sinon . replace ( userStatusModel , "updateAllUserStatus" , updateAllUserStatusStub ) ;
327
+ sinon . replace ( userStatusModel , "getTaskBasedUsersStatus" , getTaskBasedUsersStatusStub ) ;
328
+
329
+ chai
330
+ . request ( app )
331
+ . patch ( "/users/status/sync" )
332
+ . set ( "Authorization" , `Bearer ${ cronjobJwtToken } ` )
333
+ . end ( ( err , res ) => {
334
+ sinon . restore ( ) ;
335
+ if ( err ) {
336
+ return done ( err ) ;
337
+ }
338
+ expect ( res ) . to . have . status ( 500 ) ;
339
+ expect ( res . body . message ) . to . equal ( "Error: Users data is not in the expected format or no users found" ) ;
340
+ done ( ) ;
341
+ } ) ;
342
+ } ) ;
343
+ } ) ;
344
+
345
+ describe ( "Error while updating user statuses" , function ( ) {
346
+ it ( "should return 500 error with appropriate message" , function ( done ) {
347
+ const updateAllUserStatusStub = sinon . stub ( ) . rejects ( new Error ( "Failed to update user statuses" ) ) ;
348
+ sinon . replace ( userStatusModel , "updateAllUserStatus" , updateAllUserStatusStub ) ;
349
+ chai
350
+ . request ( app )
351
+ . patch ( "/users/status/sync" )
352
+ . set ( "Authorization" , `Bearer ${ cronjobJwtToken } ` )
353
+ . end ( ( err , res ) => {
354
+ sinon . restore ( ) ;
355
+ if ( err ) {
356
+ return done ( err ) ;
357
+ }
358
+ expect ( res ) . to . have . status ( 500 ) ;
359
+ expect ( res . body . message ) . to . equal (
360
+ "The server has encountered an unexpected error. Please contact the administrator for more information."
361
+ ) ;
362
+ done ( ) ;
363
+ } ) ;
364
+ } ) ;
365
+ } ) ;
366
+ } ) ;
280
367
} ) ;
281
368
282
369
describe ( "PATCH /users/status/:userid" , function ( ) {
0 commit comments