@@ -5,7 +5,7 @@ import userDataFixture from "../fixtures/user/user";
5
5
import sinon from "sinon" ;
6
6
import chaiHttp from "chai-http" ;
7
7
import cleanDb from "../utils/cleanDb" ;
8
- import { CreateOnboardingExtensionBody } from "../../types/onboardingExtension" ;
8
+ import { CreateOnboardingExtensionBody , OnboardingExtension } from "../../types/onboardingExtension" ;
9
9
import {
10
10
REQUEST_ALREADY_PENDING ,
11
11
REQUEST_STATE , REQUEST_TYPE ,
@@ -20,6 +20,7 @@ const firestore = require("../../utils/firestore");
20
20
const userStatusModel = firestore . collection ( "usersStatus" ) ;
21
21
import * as requestsQuery from "../../models/requests"
22
22
import { userState } from "../../constants/userStatus" ;
23
+ import { generateAuthToken } from "../../services/authService" ;
23
24
const { CLOUDFLARE_WORKER , BAD_TOKEN } = require ( "../../constants/bot" ) ;
24
25
const userData = userDataFixture ( ) ;
25
26
chai . use ( chaiHttp ) ;
@@ -378,4 +379,223 @@ describe("/requests Onboarding Extension", () => {
378
379
} ) ;
379
380
} ) ;
380
381
} ) ;
382
+
383
+ describe ( "PUT /requests" , ( ) => {
384
+ const body = {
385
+ type : REQUEST_TYPE . ONBOARDING ,
386
+ state : REQUEST_STATE . APPROVED ,
387
+ message : "test-message"
388
+ } ;
389
+ let latestExtension : OnboardingExtension ;
390
+ let userId : string ;
391
+ let putEndpoint : string ;
392
+ let authToken : string ;
393
+ let latestApprovedExtension : OnboardingExtension ;
394
+ let latestRejectedExtension : OnboardingExtension ;
395
+
396
+ beforeEach ( async ( ) => {
397
+ userId = await addUser ( userData [ 4 ] ) ;
398
+ latestExtension = await requestsQuery . createRequest ( {
399
+ state : REQUEST_STATE . PENDING ,
400
+ type : REQUEST_TYPE . ONBOARDING ,
401
+ requestNumber : 1
402
+ } ) ;
403
+ latestApprovedExtension = await requestsQuery . createRequest ( {
404
+ state : REQUEST_STATE . APPROVED ,
405
+ type : REQUEST_TYPE . ONBOARDING , requestNumber : 2
406
+ } ) ;
407
+ latestRejectedExtension = await requestsQuery . createRequest ( {
408
+ state : REQUEST_STATE . REJECTED ,
409
+ type : REQUEST_TYPE . ONBOARDING ,
410
+ requestNumber : 2
411
+ } ) ;
412
+ putEndpoint = `/requests/${ latestExtension . id } ?dev=true` ;
413
+ authToken = generateAuthToken ( { userId} ) ;
414
+ } )
415
+
416
+ afterEach ( async ( ) => {
417
+ sinon . restore ( ) ;
418
+ await cleanDb ( ) ;
419
+ } )
420
+
421
+ it ( "should return 401 response when user is not a super user" , ( done ) => {
422
+ chai . request ( app )
423
+ . put ( putEndpoint )
424
+ . set ( "authorization" , `Bearer ${ generateAuthToken ( { userId : "111" } ) } ` )
425
+ . send ( body )
426
+ . end ( ( err , res ) => {
427
+ if ( err ) return done ( err ) ;
428
+ expect ( res . statusCode ) . to . equal ( 401 ) ;
429
+ expect ( res . body . error ) . to . equal ( "Unauthorized" ) ;
430
+ expect ( res . body . message ) . to . equal ( "You are not authorized for this action." ) ;
431
+ done ( ) ;
432
+ } )
433
+ } )
434
+
435
+ it ( "should return Invalid request type for incorrect value of type" , ( done ) => {
436
+ chai . request ( app )
437
+ . put ( "/requests/1111?dev=true" )
438
+ . set ( "authorization" , `Bearer ${ authToken } ` )
439
+ . send ( { ...body , type : "<InvalidType>" } )
440
+ . end ( ( err , res ) => {
441
+ if ( err ) return done ( err ) ;
442
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
443
+ expect ( res . body . error ) . to . equal ( "Bad Request" ) ;
444
+ expect ( res . body . message ) . to . equal ( '"type" must be one of [OOO, EXTENSION, ONBOARDING]' ) ;
445
+ done ( ) ;
446
+ } )
447
+ } )
448
+
449
+ it ( "should return Feature not implemented when dev is not true" , ( done ) => {
450
+ chai . request ( app )
451
+ . put ( `/requests/1111?dev=false` )
452
+ . send ( body )
453
+ . set ( "authorization" , `Bearer ${ authToken } ` )
454
+ . end ( ( err , res ) => {
455
+ if ( err ) return done ( err ) ;
456
+ expect ( res . statusCode ) . to . equal ( 501 ) ;
457
+ expect ( res . body . message ) . to . equal ( "Feature not implemented" ) ;
458
+ done ( ) ;
459
+ } )
460
+ } )
461
+
462
+ it ( "should return Unauthenticated User when authorization header is missing" , ( done ) => {
463
+ chai . request ( app )
464
+ . put ( putEndpoint )
465
+ . set ( "authorization" , "" )
466
+ . send ( body )
467
+ . end ( ( err , res ) => {
468
+ if ( err ) return done ( err ) ;
469
+ expect ( res . statusCode ) . to . equal ( 401 ) ;
470
+ expect ( res . body . message ) . to . equal ( "Unauthenticated User" ) ;
471
+ done ( ) ;
472
+ } )
473
+ } )
474
+
475
+ it ( "should return Unauthenticated User for invalid token" , ( done ) => {
476
+ chai . request ( app )
477
+ . put ( putEndpoint )
478
+ . set ( "authorization" , `Bearer ${ BAD_TOKEN } ` )
479
+ . send ( body )
480
+ . end ( ( err , res ) => {
481
+ if ( err ) return done ( err ) ;
482
+ expect ( res . statusCode ) . to . equal ( 401 ) ;
483
+ expect ( res . body . message ) . to . equal ( "Unauthenticated User" ) ;
484
+ done ( ) ;
485
+ } )
486
+ } )
487
+
488
+ it ( "should return 400 response for invalid value of state" , ( done ) => {
489
+ chai . request ( app )
490
+ . put ( putEndpoint )
491
+ . set ( "authorization" , `Bearer ${ authToken } ` )
492
+ . send ( { ...body , state : REQUEST_STATE . PENDING } )
493
+ . end ( ( err , res ) => {
494
+ if ( err ) return done ( err ) ;
495
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
496
+ expect ( res . body . message ) . to . equal ( "state must be APPROVED or REJECTED" ) ;
497
+ expect ( res . body . error ) . to . equal ( "Bad Request" ) ;
498
+ done ( ) ;
499
+ } )
500
+ } )
501
+
502
+ it ( "should return 404 response for invalid extension id" , ( done ) => {
503
+ chai . request ( app )
504
+ . put ( `/requests/1111?dev=true` )
505
+ . set ( "authorization" , `Bearer ${ authToken } ` )
506
+ . send ( body )
507
+ . end ( ( err , res ) => {
508
+ if ( err ) return done ( err ) ;
509
+ expect ( res . statusCode ) . to . equal ( 404 ) ;
510
+ expect ( res . body . message ) . to . equal ( "Request does not exist" ) ;
511
+ expect ( res . body . error ) . to . equal ( "Not Found" ) ;
512
+ done ( ) ;
513
+ } )
514
+ } )
515
+
516
+ it ( "should return 400 response when type is not onboarding and extensionId is correct" , ( done ) => {
517
+ chai . request ( app )
518
+ . put ( putEndpoint )
519
+ . set ( "authorization" , `Bearer ${ authToken } ` )
520
+ . send ( { ...body , type : REQUEST_TYPE . OOO } )
521
+ . end ( ( err , res ) => {
522
+ if ( err ) return done ( err ) ;
523
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
524
+ expect ( res . body . message ) . to . equal ( "Request does not exist" ) ;
525
+ expect ( res . body . error ) . to . equal ( "Bad Request" ) ;
526
+ done ( ) ;
527
+ } )
528
+ } )
529
+
530
+ it ( "should return 400 response when extension state is approved" , ( done ) => {
531
+ chai . request ( app )
532
+ . put ( `/requests/${ latestApprovedExtension . id } ?dev=true` )
533
+ . set ( "authorization" , `Bearer ${ authToken } ` )
534
+ . send ( body )
535
+ . end ( ( err , res ) => {
536
+ if ( err ) return done ( err ) ;
537
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
538
+ expect ( res . body . message ) . to . equal ( "Request already approved" ) ;
539
+ expect ( res . body . error ) . to . equal ( "Bad Request" ) ;
540
+ done ( ) ;
541
+ } )
542
+ } )
543
+
544
+ it ( "should return 400 response when extension state is rejected" , ( done ) => {
545
+ chai . request ( app )
546
+ . put ( `/requests/${ latestRejectedExtension . id } ?dev=true` )
547
+ . set ( "authorization" , `Bearer ${ authToken } ` )
548
+ . send ( body )
549
+ . end ( ( err , res ) => {
550
+ if ( err ) return done ( err ) ;
551
+ expect ( res . statusCode ) . to . equal ( 400 ) ;
552
+ expect ( res . body . message ) . to . equal ( "Request already rejected" ) ;
553
+ expect ( res . body . error ) . to . equal ( "Bad Request" ) ;
554
+ done ( ) ;
555
+ } )
556
+ } )
557
+
558
+ it ( "should return 200 for success response when request is approved" , ( done ) => {
559
+ chai . request ( app )
560
+ . put ( putEndpoint )
561
+ . set ( "authorization" , `Bearer ${ authToken } ` )
562
+ . send ( body )
563
+ . end ( ( err , res ) => {
564
+ if ( err ) return done ( err ) ;
565
+ expect ( res . statusCode ) . to . equal ( 200 ) ;
566
+ expect ( res . body . message ) . to . equal ( "Request approved successfully" ) ;
567
+ done ( ) ;
568
+ } )
569
+ } )
570
+
571
+ it ( "should return 200 for success response when request is rejected" , ( done ) => {
572
+ chai . request ( app )
573
+ . put ( putEndpoint )
574
+ . set ( "authorization" , `Bearer ${ authToken } ` )
575
+ . send ( { ...body , state : REQUEST_STATE . REJECTED } )
576
+ . end ( ( err , res ) => {
577
+ if ( err ) return done ( err ) ;
578
+ expect ( res . statusCode ) . to . equal ( 200 ) ;
579
+ expect ( res . body . message ) . to . equal ( "Request rejected successfully" ) ;
580
+ done ( ) ;
581
+ } )
582
+ } )
583
+
584
+ it ( "should return 500 response when fails to update extension request" , ( done ) => {
585
+ sinon . stub ( requestsQuery , "updateRequest" )
586
+ . throws ( "Error while creating extension request" ) ;
587
+ chai . request ( app )
588
+ . put ( putEndpoint )
589
+ . set ( "authorization" , `Bearer ${ authToken } ` )
590
+ . send ( body )
591
+ . end ( ( err , res ) => {
592
+ if ( err ) return done ( err ) ;
593
+ expect ( res . statusCode ) . to . equal ( 500 ) ;
594
+ expect ( res . body . message ) . to . equal ( "An internal server error occurred" ) ;
595
+ expect ( res . body . error ) . to . equal ( "Internal Server Error" )
596
+ done ( ) ;
597
+ } )
598
+ } )
599
+ } ) ;
381
600
} ) ;
601
+
0 commit comments