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