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 } ;
@@ -186,6 +193,195 @@ describe("/requests OOO", function () {
186
193
} ) ;
187
194
} ) ;
188
195
196
+ describe ( "PATCH /requests/:id" , function ( ) {
197
+ let pendingOooRequestId1 : string ;
198
+ let pendingOooRequestId2 : string ;
199
+ let pendingOooRequestId3 : string ;
200
+ let oooRequestData3 : any ;
201
+ let invalidRequestId : string ;
202
+ let approvedOooRequestId : string ;
203
+ let rejectedOooRequestId : string ;
204
+
205
+ beforeEach ( async function ( ) {
206
+ oooRequestData3 = { ...createOooRequests3 , requestedBy : testUserId } ;
207
+
208
+ const { id : pendingOooId1 } : any = await createRequest ( oooRequestData3 ) ;
209
+ pendingOooRequestId1 = pendingOooId1 ;
210
+
211
+ const { id : pendingOooId2 } : any = await createRequest ( oooRequestData3 ) ;
212
+ pendingOooRequestId2 = pendingOooId2 ;
213
+
214
+ const { id : pendingOooId3 } : any = await createRequest ( oooRequestData3 ) ;
215
+ pendingOooRequestId3 = pendingOooId3 ;
216
+
217
+ const { id : invalidId } : any = await createRequest ( { ...oooRequestData3 , type : "XYZ" } ) ;
218
+ invalidRequestId = invalidId ;
219
+
220
+ const { id : approvedOooId } : any = await updateRequest ( pendingOooRequestId2 , { status : REQUEST_STATE . APPROVED } , testSuperUserId , REQUEST_TYPE . OOO ) ;
221
+ approvedOooRequestId = approvedOooId ;
222
+
223
+ const { id : rejectedOooId } : any = await updateRequest ( pendingOooRequestId3 , { status : REQUEST_STATE . REJECTED } , testSuperUserId , REQUEST_TYPE . OOO ) ;
224
+ rejectedOooRequestId = rejectedOooId ;
225
+ } ) ;
226
+
227
+ it ( "should return 401 if user is not logged in" , function ( done ) {
228
+ chai
229
+ . request ( app )
230
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
231
+ . send ( acknowledgeOooRequest )
232
+ . end ( function ( err , res ) {
233
+ expect ( res ) . to . have . status ( 401 ) ;
234
+ expect ( res . body . error ) . to . equal ( "Unauthorized" ) ;
235
+ expect ( res . body . message ) . to . equal ( "Unauthenticated User" ) ;
236
+ done ( ) ;
237
+ } ) ;
238
+ } ) ;
239
+
240
+ it ( "should return 501 and 'Feature not implemented' message when dev is false" , function ( done ) {
241
+ chai
242
+ . request ( app )
243
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=false` )
244
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
245
+ . send ( acknowledgeOooRequest )
246
+ . end ( function ( err , res ) {
247
+ if ( err ) {
248
+ return done ( err ) ;
249
+ }
250
+ expect ( res . statusCode ) . to . equal ( 501 ) ;
251
+ expect ( res . body . message ) . to . equal ( "Feature not implemented" ) ;
252
+ done ( ) ;
253
+ } ) ;
254
+ } ) ;
255
+
256
+ it ( "should return 404 if request does not exist" , function ( done ) {
257
+ chai
258
+ . request ( app )
259
+ . patch ( `/requests/111111?dev=true` )
260
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
261
+ . send ( acknowledgeOooRequest )
262
+ . end ( function ( err , res ) {
263
+ if ( err ) {
264
+ return done ( err ) ;
265
+ }
266
+ expect ( res . statusCode ) . to . equal ( 404 ) ;
267
+ expect ( res . body . message ) . to . equal ( REQUEST_DOES_NOT_EXIST ) ;
268
+ done ( ) ;
269
+ } ) ;
270
+ } ) ;
271
+
272
+ it ( "should return 401 if user does not have super user permission" , function ( done ) {
273
+ chai
274
+ . request ( app )
275
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
276
+ . set ( "cookie" , `${ cookieName } =${ authToken } ` )
277
+ . send ( acknowledgeOooRequest )
278
+ . end ( function ( err , res ) {
279
+ if ( err ) {
280
+ return done ( err ) ;
281
+ }
282
+ expect ( res . statusCode ) . to . equal ( 401 ) ;
283
+ expect ( res . body . message ) . to . equal ( UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST ) ;
284
+ done ( ) ;
285
+ } ) ;
286
+ } ) ;
287
+
288
+ it ( "should return 400 if OOO request is already approved" , function ( done ) {
289
+ chai
290
+ . request ( app )
291
+ . patch ( `/requests/${ approvedOooRequestId } ?dev=true` )
292
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
293
+ . send ( acknowledgeOooRequest )
294
+ . end ( function ( err , res ) {
295
+ if ( err ) {
296
+ return done ( err ) ;
297
+ }
298
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
299
+ expect ( res . body . message ) . to . equal ( REQUEST_ALREADY_APPROVED ) ;
300
+ done ( ) ;
301
+ } ) ;
302
+ } ) ;
303
+
304
+ it ( "should return 400 if OOO request is already rejected" , function ( done ) {
305
+ chai
306
+ . request ( app )
307
+ . patch ( `/requests/${ rejectedOooRequestId } ?dev=true` )
308
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
309
+ . send ( acknowledgeOooRequest )
310
+ . end ( function ( err , res ) {
311
+ if ( err ) {
312
+ return done ( err ) ;
313
+ }
314
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
315
+ expect ( res . body . message ) . to . equal ( REQUEST_ALREADY_REJECTED ) ;
316
+ done ( ) ;
317
+ } ) ;
318
+ } ) ;
319
+
320
+ it ( "should return 400 if request type is not OOO" , function ( done ) {
321
+ chai
322
+ . request ( app )
323
+ . patch ( `/requests/${ invalidRequestId } ?dev=true` )
324
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
325
+ . send ( acknowledgeOooRequest )
326
+ . end ( function ( err , res ) {
327
+ if ( err ) {
328
+ return done ( err ) ;
329
+ }
330
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
331
+ expect ( res . body . message ) . to . equal ( INVALID_REQUEST_TYPE ) ;
332
+ done ( ) ;
333
+ } ) ;
334
+ } ) ;
335
+
336
+ it ( "should approve OOO request when dev is true" , function ( done ) {
337
+ chai
338
+ . request ( app )
339
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
340
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
341
+ . send ( acknowledgeOooRequest )
342
+ . end ( function ( err , res ) {
343
+ if ( err ) {
344
+ return done ( err ) ;
345
+ }
346
+ expect ( res . statusCode ) . to . equal ( 200 ) ;
347
+ expect ( res . body . message ) . to . equal ( REQUEST_APPROVED_SUCCESSFULLY ) ;
348
+ done ( ) ;
349
+ } ) ;
350
+ } ) ;
351
+
352
+ it ( "should reject OOO request when dev is true" , function ( done ) {
353
+ chai
354
+ . request ( app )
355
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
356
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
357
+ . send ( { ...acknowledgeOooRequest , status : REQUEST_STATE . REJECTED } )
358
+ . end ( function ( err , res ) {
359
+ if ( err ) {
360
+ return done ( err ) ;
361
+ }
362
+ expect ( res . statusCode ) . to . equal ( 200 ) ;
363
+ expect ( res . body . message ) . to . equal ( REQUEST_REJECTED_SUCCESSFULLY ) ;
364
+ done ( ) ;
365
+ } ) ;
366
+ } ) ;
367
+
368
+ it ( "should return 500 response for unexpected error" , function ( done ) {
369
+ sinon . stub ( logUtils , "addLog" ) . throws ( "Error" ) ;
370
+ chai
371
+ . request ( app )
372
+ . patch ( `/requests/${ pendingOooRequestId1 } ?dev=true` )
373
+ . set ( "cookie" , `${ cookieName } =${ superUserToken } ` )
374
+ . send ( acknowledgeOooRequest )
375
+ . end ( function ( err , res ) {
376
+ if ( err ) return done ( err ) ;
377
+ expect ( res . statusCode ) . to . equal ( 500 ) ;
378
+ expect ( res . body . error ) . to . equal ( "Internal Server Error" ) ;
379
+ expect ( res . body . message ) . to . equal ( "An internal server error occurred" ) ;
380
+ done ( ) ;
381
+ } ) ;
382
+ } ) ;
383
+ } ) ;
384
+
189
385
describe ( "PUT /requests/:id" , function ( ) {
190
386
it ( "should return 401 if user is not logged in" , function ( done ) {
191
387
chai
0 commit comments