1
1
import chai from "chai" ;
2
2
const { expect } = chai ;
3
+ import sinon from "sinon" ;
3
4
import chaiHttp from "chai-http" ;
4
5
import _ from "lodash" ;
5
6
import config from "config" ;
@@ -14,6 +15,8 @@ import {
14
15
validOooStatusRequests ,
15
16
validOooStatusUpdate ,
16
17
createOooRequests2 ,
18
+ acknowledgeOooRequest ,
19
+ createOooRequests3 ,
17
20
} from "../fixtures/oooRequest/oooRequest" ;
18
21
import { createRequest , updateRequest } from "../../models/requests" ;
19
22
import {
@@ -26,10 +29,12 @@ import {
26
29
REQUEST_ALREADY_PENDING ,
27
30
REQUEST_REJECTED_SUCCESSFULLY ,
28
31
REQUEST_ALREADY_REJECTED ,
32
+ UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST ,
33
+ INVALID_REQUEST_TYPE ,
29
34
} from "../../constants/requests" ;
30
35
import { updateTask } from "../../models/tasks" ;
31
36
import { validTaskAssignmentRequest , validTaskCreqtionRequest } from "../fixtures/taskRequests/taskRequests" ;
32
-
37
+ import * as logUtils from "../../services/logService" ;
33
38
const userData = userDataFixture ( ) ;
34
39
chai . use ( chaiHttp ) ;
35
40
@@ -41,12 +46,14 @@ let approvedOooRequestId: string;
41
46
let oooRequestData : any ;
42
47
let oooRequestData2 : any ;
43
48
let testUserId : string ;
49
+ let testSuperUserId : string ;
44
50
45
51
describe ( "/requests OOO" , function ( ) {
46
52
beforeEach ( async function ( ) {
47
53
const userIdPromises = [ addUser ( userData [ 16 ] ) , addUser ( userData [ 4 ] ) ] ;
48
54
const [ userId , superUserId ] = await Promise . all ( userIdPromises ) ;
49
55
testUserId = userId ;
56
+ testSuperUserId = superUserId ;
50
57
51
58
oooRequestData = { ...createOooRequests , requestedBy : userId } ;
52
59
oooRequestData2 = { ...createOooRequests2 , requestedBy : superUserId } ;
@@ -202,6 +209,191 @@ describe("/requests OOO", function () {
202
209
} ) ;
203
210
} ) ;
204
211
212
+ describe ( "PATCH /requests/:id" , function ( ) {
213
+ let pendingOooRequestId1 : string ;
214
+ let oooRequestData3 : any ;
215
+ let invalidRequestId : string ;
216
+ let approvedOooRequestId : string ;
217
+ let rejectedOooRequestId : string ;
218
+
219
+ beforeEach ( async function ( ) {
220
+ oooRequestData3 = { ...createOooRequests3 , requestedBy : testUserId } ;
221
+
222
+ const { id : pendingOooId1 } : any = await createRequest ( oooRequestData3 ) ;
223
+ pendingOooRequestId1 = pendingOooId1 ;
224
+
225
+ const { id : pendingOooId2 } : any = await createRequest ( oooRequestData3 ) ;
226
+
227
+ const { id : pendingOooId3 } : any = await createRequest ( oooRequestData3 ) ;
228
+
229
+ const { id : invalidId } : any = await createRequest ( { ...oooRequestData3 , type : "XYZ" } ) ;
230
+ invalidRequestId = invalidId ;
231
+
232
+ const { id : approvedOooId } : any = await updateRequest ( pendingOooId2 , { status : REQUEST_STATE . APPROVED } , testSuperUserId , REQUEST_TYPE . OOO ) ;
233
+ approvedOooRequestId = approvedOooId ;
234
+
235
+ const { id : rejectedOooId } : any = await updateRequest ( pendingOooId3 , { status : REQUEST_STATE . REJECTED } , testSuperUserId , REQUEST_TYPE . OOO ) ;
236
+ rejectedOooRequestId = rejectedOooId ;
237
+ } ) ;
238
+
239
+ it ( "should return 401 if user is not logged in" , function ( done ) {
240
+ chai
241
+ . request ( app )
242
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
243
+ . send ( acknowledgeOooRequest )
244
+ . end ( function ( err , res ) {
245
+ expect ( res ) . to . have . status ( 401 ) ;
246
+ expect ( res . body . error ) . to . equal ( "Unauthorized" ) ;
247
+ expect ( res . body . message ) . to . equal ( "Unauthenticated User" ) ;
248
+ done ( ) ;
249
+ } ) ;
250
+ } ) ;
251
+
252
+ it ( "should return 501 and 'Feature not implemented' message when dev is false" , function ( done ) {
253
+ chai
254
+ . request ( app )
255
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=false` )
256
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
257
+ . send ( acknowledgeOooRequest )
258
+ . end ( function ( err , res ) {
259
+ if ( err ) {
260
+ return done ( err ) ;
261
+ }
262
+ expect ( res . statusCode ) . to . equal ( 501 ) ;
263
+ expect ( res . body . message ) . to . equal ( "Feature not implemented" ) ;
264
+ done ( ) ;
265
+ } ) ;
266
+ } ) ;
267
+
268
+ it ( "should return 404 if request does not exist" , function ( done ) {
269
+ chai
270
+ . request ( app )
271
+ . patch ( `/requests/111111?dev=true` )
272
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
273
+ . send ( acknowledgeOooRequest )
274
+ . end ( function ( err , res ) {
275
+ if ( err ) {
276
+ return done ( err ) ;
277
+ }
278
+ expect ( res . statusCode ) . to . equal ( 404 ) ;
279
+ expect ( res . body . message ) . to . equal ( REQUEST_DOES_NOT_EXIST ) ;
280
+ done ( ) ;
281
+ } ) ;
282
+ } ) ;
283
+
284
+ it ( "should return 401 if user does not have super user permission" , function ( done ) {
285
+ chai
286
+ . request ( app )
287
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
288
+ . set ( "cookie" , `${ cookieName } =${ authToken } ` )
289
+ . send ( acknowledgeOooRequest )
290
+ . end ( function ( err , res ) {
291
+ if ( err ) {
292
+ return done ( err ) ;
293
+ }
294
+ expect ( res . statusCode ) . to . equal ( 401 ) ;
295
+ expect ( res . body . message ) . to . equal ( UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST ) ;
296
+ done ( ) ;
297
+ } ) ;
298
+ } ) ;
299
+
300
+ it ( "should return 400 if OOO request is already approved" , function ( done ) {
301
+ chai
302
+ . request ( app )
303
+ . patch ( `/requests/${ approvedOooRequestId } ?dev=true` )
304
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
305
+ . send ( acknowledgeOooRequest )
306
+ . end ( function ( err , res ) {
307
+ if ( err ) {
308
+ return done ( err ) ;
309
+ }
310
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
311
+ expect ( res . body . message ) . to . equal ( REQUEST_ALREADY_APPROVED ) ;
312
+ done ( ) ;
313
+ } ) ;
314
+ } ) ;
315
+
316
+ it ( "should return 400 if OOO request is already rejected" , function ( done ) {
317
+ chai
318
+ . request ( app )
319
+ . patch ( `/requests/${ rejectedOooRequestId } ?dev=true` )
320
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
321
+ . send ( acknowledgeOooRequest )
322
+ . end ( function ( err , res ) {
323
+ if ( err ) {
324
+ return done ( err ) ;
325
+ }
326
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
327
+ expect ( res . body . message ) . to . equal ( REQUEST_ALREADY_REJECTED ) ;
328
+ done ( ) ;
329
+ } ) ;
330
+ } ) ;
331
+
332
+ it ( "should return 400 if request type is not OOO" , function ( done ) {
333
+ chai
334
+ . request ( app )
335
+ . patch ( `/requests/${ invalidRequestId } ?dev=true` )
336
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
337
+ . send ( acknowledgeOooRequest )
338
+ . end ( function ( err , res ) {
339
+ if ( err ) {
340
+ return done ( err ) ;
341
+ }
342
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
343
+ expect ( res . body . message ) . to . equal ( INVALID_REQUEST_TYPE ) ;
344
+ done ( ) ;
345
+ } ) ;
346
+ } ) ;
347
+
348
+ it ( "should approve OOO request when dev is true" , function ( done ) {
349
+ chai
350
+ . request ( app )
351
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
352
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
353
+ . send ( acknowledgeOooRequest )
354
+ . end ( function ( err , res ) {
355
+ if ( err ) {
356
+ return done ( err ) ;
357
+ }
358
+ expect ( res . statusCode ) . to . equal ( 200 ) ;
359
+ expect ( res . body . message ) . to . equal ( REQUEST_APPROVED_SUCCESSFULLY ) ;
360
+ done ( ) ;
361
+ } ) ;
362
+ } ) ;
363
+
364
+ it ( "should reject OOO request when dev is true" , function ( done ) {
365
+ chai
366
+ . request ( app )
367
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
368
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
369
+ . send ( { ...acknowledgeOooRequest , status : REQUEST_STATE . REJECTED } )
370
+ . end ( function ( err , res ) {
371
+ if ( err ) {
372
+ return done ( err ) ;
373
+ }
374
+ expect ( res . statusCode ) . to . equal ( 200 ) ;
375
+ expect ( res . body . message ) . to . equal ( REQUEST_REJECTED_SUCCESSFULLY ) ;
376
+ done ( ) ;
377
+ } ) ;
378
+ } ) ;
379
+
380
+ it ( "should return 500 response for unexpected error" , function ( done ) {
381
+ sinon . stub ( logUtils , "addLog" ) . throws ( "Error" ) ;
382
+ chai
383
+ . request ( app )
384
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
385
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
386
+ . send ( acknowledgeOooRequest )
387
+ . end ( function ( err , res ) {
388
+ if ( err ) return done ( err ) ;
389
+ expect ( res . statusCode ) . to . equal ( 500 ) ;
390
+ expect ( res . body . error ) . to . equal ( "Internal Server Error" ) ;
391
+ expect ( res . body . message ) . to . equal ( "An internal server error occurred" ) ;
392
+ done ( ) ;
393
+ } ) ;
394
+ } ) ;
395
+ } ) ;
396
+
205
397
describe ( "PUT /requests/:id" , function ( ) {
206
398
it ( "should return 401 if user is not logged in" , function ( done ) {
207
399
chai
0 commit comments