@@ -5,7 +5,7 @@ const firestore = require("../../utils/firestore");
5
5
const app = require ( "../../server" ) ;
6
6
const authService = require ( "../../services/authService" ) ;
7
7
const tasks = require ( "../../models/tasks" ) ;
8
-
8
+ const progressesModel = require ( "../../models/progresses" ) ;
9
9
const addUser = require ( "../utils/addUser" ) ;
10
10
const cleanDb = require ( "../utils/cleanDb" ) ;
11
11
const {
@@ -16,7 +16,7 @@ const {
16
16
17
17
const userData = require ( "../fixtures/user/user" ) ( ) ;
18
18
const taskData = require ( "../fixtures/tasks/tasks" ) ( ) ;
19
-
19
+ const { INTERNAL_SERVER_ERROR_MESSAGE } = require ( "../../constants/progresses" ) ;
20
20
const cookieName = config . get ( "userToken.cookieName" ) ;
21
21
const { expect } = chai ;
22
22
@@ -615,4 +615,155 @@ describe("Test Progress Updates API for Tasks", function () {
615
615
} ) ;
616
616
} ) ;
617
617
} ) ;
618
+
619
+ describe ( "GET /progresses (getPaginatedProgressDocument)" , function ( ) {
620
+ beforeEach ( async function ( ) {
621
+ const userId = await addUser ( userData [ 1 ] ) ;
622
+ const taskObject1 = await tasks . updateTask ( taskData [ 0 ] ) ;
623
+ const taskId1 = taskObject1 . taskId ;
624
+ const progressData1 = stubbedModelTaskProgressData ( userId , taskId1 , 1683626400000 , 1683590400000 ) ; // 2023-05-09
625
+ const progressData2 = stubbedModelTaskProgressData ( userId , taskId1 , 1683885600000 , 1683849600000 ) ; // 2023-05-12
626
+ await firestore . collection ( "progresses" ) . doc ( "taskProgressDocument1" ) . set ( progressData1 ) ;
627
+ await firestore . collection ( "progresses" ) . doc ( "taskProgressDocument2" ) . set ( progressData2 ) ;
628
+ } ) ;
629
+
630
+ afterEach ( async function ( ) {
631
+ await cleanDb ( ) ;
632
+ } ) ;
633
+
634
+ it ( "should return paginated results when dev=true is passed" , function ( done ) {
635
+ chai
636
+ . request ( app )
637
+ . get ( `/progresses?type=task&dev=true&page=0&size=1` )
638
+ . end ( ( err , res ) => {
639
+ if ( err ) return done ( err ) ;
640
+ expect ( res ) . to . have . status ( 200 ) ;
641
+ expect ( res . body ) . to . have . keys ( [ "message" , "data" , "count" , "links" ] ) ;
642
+ expect ( res . body . links ) . to . have . keys ( [ "next" , "prev" ] ) ;
643
+ expect ( res . body . data ) . to . be . an ( "array" ) ;
644
+ expect ( res . body . message ) . to . be . equal ( "Progress document retrieved successfully." ) ;
645
+ expect ( res . body . count ) . to . be . equal ( 1 ) ;
646
+ res . body . data . forEach ( ( progress ) => {
647
+ expect ( progress ) . to . have . keys ( [
648
+ "id" ,
649
+ "type" ,
650
+ "completed" ,
651
+ "planned" ,
652
+ "blockers" ,
653
+ "userId" ,
654
+ "userData" ,
655
+ "taskId" ,
656
+ "createdAt" ,
657
+ "date" ,
658
+ ] ) ;
659
+ } ) ;
660
+
661
+ return done ( ) ;
662
+ } ) ;
663
+ } ) ;
664
+
665
+ it ( "should not return paginated results when dev=false is passed" , function ( done ) {
666
+ chai
667
+ . request ( app )
668
+ . get ( `/progresses?type=task&dev=false&page=0&size=1` )
669
+ . end ( ( err , res ) => {
670
+ if ( err ) return done ( err ) ;
671
+ expect ( res ) . to . have . status ( 200 ) ;
672
+ expect ( res . body ) . to . have . keys ( [ "message" , "data" , "count" ] ) ;
673
+ expect ( res . body . data ) . to . be . an ( "array" ) ;
674
+ expect ( res . body . count ) . to . not . equal ( 1 ) ;
675
+ expect ( res . body . message ) . to . be . equal ( "Progress document retrieved successfully." ) ;
676
+ res . body . data . forEach ( ( progress ) => {
677
+ expect ( progress ) . to . have . keys ( [
678
+ "id" ,
679
+ "type" ,
680
+ "completed" ,
681
+ "planned" ,
682
+ "blockers" ,
683
+ "userId" ,
684
+ "taskId" ,
685
+ "createdAt" ,
686
+ "date" ,
687
+ ] ) ;
688
+ } ) ;
689
+
690
+ return done ( ) ;
691
+ } ) ;
692
+ } ) ;
693
+
694
+ it ( "should return null for next link on the last page" , function ( done ) {
695
+ const size = 1 ;
696
+ const page = 1 ;
697
+
698
+ chai
699
+ . request ( app )
700
+ . get ( `/progresses?type=task&dev=true&page=${ page } &size=${ size } ` )
701
+ . end ( ( err , res ) => {
702
+ if ( err ) return done ( err ) ;
703
+ expect ( res ) . to . have . status ( 200 ) ;
704
+ expect ( res . body ) . to . have . keys ( [ "message" , "data" , "count" , "links" ] ) ;
705
+ expect ( res . body . links ) . to . have . keys ( [ "next" , "prev" ] ) ;
706
+ expect ( res . body . data ) . to . be . an ( "array" ) ;
707
+ expect ( res . body . message ) . to . be . equal ( "Progress document retrieved successfully." ) ;
708
+ expect ( res . body . links . next ) . to . be . equal ( null ) ;
709
+ expect ( res . body . links . prev ) . to . equal ( `/progresses?type=task&page=${ page - 1 } &size=${ size } &dev=true` ) ;
710
+ return done ( ) ;
711
+ } ) ;
712
+ } ) ;
713
+
714
+ it ( "should return a bad request error for invalid size parameter" , function ( done ) {
715
+ chai
716
+ . request ( app )
717
+ . get ( `/progresses?type=task&dev=true&page=0&size=104` )
718
+ . end ( ( _err , res ) => {
719
+ expect ( res ) . to . have . status ( 400 ) ;
720
+ expect ( res . body ) . to . be . an ( "object" ) ;
721
+ expect ( res . body . message ) . to . equal ( "size must be in the range 1-100" ) ;
722
+ return done ( ) ;
723
+ } ) ;
724
+ } ) ;
725
+
726
+ it ( "should return an empty array of progresses data on a page with no data" , function ( done ) {
727
+ const size = 10 ;
728
+ const page = 100 ;
729
+
730
+ chai
731
+ . request ( app )
732
+ . get ( `/progresses?type=task&dev=true&page=${ page } &size=${ size } ` )
733
+ . end ( ( err , res ) => {
734
+ if ( err ) return done ( err ) ;
735
+ expect ( res ) . to . have . status ( 200 ) ;
736
+ expect ( res . body ) . to . be . an ( "object" ) ;
737
+ expect ( res . body . message ) . to . equal ( "Progress document retrieved successfully." ) ;
738
+ // eslint-disable-next-line no-unused-expressions
739
+ expect ( res . body . data ) . to . be . an ( "array" ) . that . is . empty ;
740
+ expect ( res . body . links ) . to . have . keys ( [ "next" , "prev" ] ) ;
741
+ // eslint-disable-next-line no-unused-expressions
742
+ expect ( res . body . links . next ) . to . be . null ;
743
+ expect ( res . body . links . prev ) . to . equal ( `/progresses?type=task&page=${ page - 1 } &size=${ size } &dev=true` ) ;
744
+ return done ( ) ;
745
+ } ) ;
746
+ } ) ;
747
+
748
+ it ( "Should return 500 Internal Server Error if there is an exception" , function ( done ) {
749
+ sinon . stub ( progressesModel , "getPaginatedProgressDocument" ) . throws ( new Error ( "Database error" ) ) ;
750
+
751
+ chai
752
+ . request ( app )
753
+ . get ( `/progresses?type=task&dev=true&page=0&size=1` )
754
+ . end ( ( err , res ) => {
755
+ if ( err ) return done ( err ) ;
756
+
757
+ if ( err ) {
758
+ return done ( err ) ;
759
+ }
760
+
761
+ expect ( res ) . to . have . status ( 500 ) ;
762
+ expect ( res . body ) . to . deep . equal ( {
763
+ message : INTERNAL_SERVER_ERROR_MESSAGE ,
764
+ } ) ;
765
+ return done ( ) ;
766
+ } ) ;
767
+ } ) ;
768
+ } ) ;
618
769
} ) ;
0 commit comments