11import chai from "chai" ;
22const { expect } = chai ;
3+ import sinon from "sinon" ;
34import chaiHttp from "chai-http" ;
45import _ from "lodash" ;
56import config from "config" ;
@@ -14,6 +15,8 @@ import {
1415 validOooStatusRequests ,
1516 validOooStatusUpdate ,
1617 createOooRequests2 ,
18+ acknowledgeOooRequest ,
19+ createOooRequests3 ,
1720} from "../fixtures/oooRequest/oooRequest" ;
1821import { createRequest , updateRequest } from "../../models/requests" ;
1922import {
@@ -26,10 +29,12 @@ import {
2629 REQUEST_ALREADY_PENDING ,
2730 REQUEST_REJECTED_SUCCESSFULLY ,
2831 REQUEST_ALREADY_REJECTED ,
32+ UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST ,
33+ INVALID_REQUEST_TYPE ,
2934} from "../../constants/requests" ;
3035import { updateTask } from "../../models/tasks" ;
3136import { validTaskAssignmentRequest , validTaskCreqtionRequest } from "../fixtures/taskRequests/taskRequests" ;
32-
37+ import * as logUtils from "../../services/logService" ;
3338const userData = userDataFixture ( ) ;
3439chai . use ( chaiHttp ) ;
3540
@@ -41,12 +46,14 @@ let approvedOooRequestId: string;
4146let oooRequestData : any ;
4247let oooRequestData2 : any ;
4348let testUserId : string ;
49+ let testSuperUserId : string ;
4450
4551describe ( "/requests OOO" , function ( ) {
4652 beforeEach ( async function ( ) {
4753 const userIdPromises = [ addUser ( userData [ 16 ] ) , addUser ( userData [ 4 ] ) ] ;
4854 const [ userId , superUserId ] = await Promise . all ( userIdPromises ) ;
4955 testUserId = userId ;
56+ testSuperUserId = superUserId ;
5057
5158 oooRequestData = { ...createOooRequests , requestedBy : userId } ;
5259 oooRequestData2 = { ...createOooRequests2 , requestedBy : superUserId } ;
@@ -186,6 +193,191 @@ describe("/requests OOO", function () {
186193 } ) ;
187194 } ) ;
188195
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+
189381 describe ( "PUT /requests/:id" , function ( ) {
190382 it ( "should return 401 if user is not logged in" , function ( done ) {
191383 chai
0 commit comments