@@ -4980,6 +4980,158 @@ describe('ParseGraphQLServer', () => {
4980
4980
) . toEqual ( [ 'someValue14' , 'someValue17' ] ) ;
4981
4981
} ) ;
4982
4982
4983
+ fit ( 'should support pagination' , async ( ) => {
4984
+ const numberArray = ( first , last ) => {
4985
+ const array = [ ] ;
4986
+ for ( let i = first ; i <= last ; i ++ ) {
4987
+ array . push ( i ) ;
4988
+ }
4989
+ return array ;
4990
+ } ;
4991
+
4992
+ const promises = [ ] ;
4993
+ for ( let i = 0 ; i < 100 ; i ++ ) {
4994
+ const obj = new Parse . Object ( 'SomeClass' ) ;
4995
+ obj . set ( 'numberField' , i ) ;
4996
+ promises . push ( obj . save ( ) ) ;
4997
+ }
4998
+ await Promise . all ( promises ) ;
4999
+
5000
+ await parseGraphQLServer . parseGraphQLSchema . databaseController . schemaCache . clear ( ) ;
5001
+
5002
+ const find = async ( { skip, after, first, before, last } = { } ) => {
5003
+ return await apolloClient . query ( {
5004
+ query : gql `
5005
+ query FindSomeObjects(
5006
+ $order: [SomeClassOrder!]
5007
+ $skip: Int
5008
+ $after: String
5009
+ $first: Int
5010
+ $before: String
5011
+ $last: Int
5012
+ ) {
5013
+ someClasses(
5014
+ order: $order
5015
+ skip: $skip
5016
+ after: $after
5017
+ first: $first
5018
+ before: $before
5019
+ last: $last
5020
+ ) {
5021
+ edges {
5022
+ cursor
5023
+ node {
5024
+ numberField
5025
+ }
5026
+ }
5027
+ count
5028
+ pageInfo {
5029
+ hasPreviousPage
5030
+ startCursor
5031
+ endCursor
5032
+ hasNextPage
5033
+ }
5034
+ }
5035
+ }
5036
+ ` ,
5037
+ variables : {
5038
+ order : [ 'numberField_ASC' ] ,
5039
+ skip,
5040
+ after,
5041
+ first,
5042
+ before,
5043
+ last,
5044
+ } ,
5045
+ } ) ;
5046
+ } ;
5047
+
5048
+ let result = await find ( ) ;
5049
+ expect (
5050
+ result . data . someClasses . edges . map ( edge => edge . node . numberField )
5051
+ ) . toEqual ( numberArray ( 0 , 99 ) ) ;
5052
+ expect ( result . data . someClasses . count ) . toEqual ( 100 ) ;
5053
+ expect ( result . data . someClasses . pageInfo . hasPreviousPage ) . toEqual (
5054
+ false
5055
+ ) ;
5056
+ expect ( result . data . someClasses . pageInfo . startCursor ) . toEqual (
5057
+ result . data . someClasses . edges [ 0 ] . cursor
5058
+ ) ;
5059
+ expect ( result . data . someClasses . pageInfo . endCursor ) . toEqual (
5060
+ result . data . someClasses . edges [ 99 ] . cursor
5061
+ ) ;
5062
+ expect ( result . data . someClasses . pageInfo . hasNextPage ) . toEqual ( false ) ;
5063
+
5064
+ result = await find ( { first : 10 } ) ;
5065
+ expect (
5066
+ result . data . someClasses . edges . map ( edge => edge . node . numberField )
5067
+ ) . toEqual ( numberArray ( 0 , 9 ) ) ;
5068
+ expect ( result . data . someClasses . count ) . toEqual ( 100 ) ;
5069
+ expect ( result . data . someClasses . pageInfo . hasPreviousPage ) . toEqual (
5070
+ false
5071
+ ) ;
5072
+ expect ( result . data . someClasses . pageInfo . startCursor ) . toEqual (
5073
+ result . data . someClasses . edges [ 0 ] . cursor
5074
+ ) ;
5075
+ expect ( result . data . someClasses . pageInfo . endCursor ) . toEqual (
5076
+ result . data . someClasses . edges [ 9 ] . cursor
5077
+ ) ;
5078
+ expect ( result . data . someClasses . pageInfo . hasNextPage ) . toEqual ( true ) ;
5079
+
5080
+ result = await find ( {
5081
+ first : 10 ,
5082
+ after : result . data . someClasses . pageInfo . endCursor ,
5083
+ } ) ;
5084
+ expect (
5085
+ result . data . someClasses . edges . map ( edge => edge . node . numberField )
5086
+ ) . toEqual ( numberArray ( 10 , 19 ) ) ;
5087
+ expect ( result . data . someClasses . count ) . toEqual ( 100 ) ;
5088
+ expect ( result . data . someClasses . pageInfo . hasPreviousPage ) . toEqual (
5089
+ true
5090
+ ) ;
5091
+ expect ( result . data . someClasses . pageInfo . startCursor ) . toEqual (
5092
+ result . data . someClasses . edges [ 0 ] . cursor
5093
+ ) ;
5094
+ expect ( result . data . someClasses . pageInfo . endCursor ) . toEqual (
5095
+ result . data . someClasses . edges [ 9 ] . cursor
5096
+ ) ;
5097
+ expect ( result . data . someClasses . pageInfo . hasNextPage ) . toEqual ( true ) ;
5098
+
5099
+ result = await find ( { last : 10 } ) ;
5100
+ expect (
5101
+ result . data . someClasses . edges . map ( edge => edge . node . numberField )
5102
+ ) . toEqual ( numberArray ( 90 , 99 ) ) ;
5103
+ expect ( result . data . someClasses . count ) . toEqual ( 100 ) ;
5104
+ expect ( result . data . someClasses . pageInfo . hasPreviousPage ) . toEqual (
5105
+ true
5106
+ ) ;
5107
+ expect ( result . data . someClasses . pageInfo . startCursor ) . toEqual (
5108
+ result . data . someClasses . edges [ 0 ] . cursor
5109
+ ) ;
5110
+ expect ( result . data . someClasses . pageInfo . endCursor ) . toEqual (
5111
+ result . data . someClasses . edges [ 9 ] . cursor
5112
+ ) ;
5113
+ expect ( result . data . someClasses . pageInfo . hasNextPage ) . toEqual ( false ) ;
5114
+
5115
+ result = await find ( {
5116
+ last : 10 ,
5117
+ before : result . data . someClasses . pageInfo . startCursor ,
5118
+ } ) ;
5119
+ expect (
5120
+ result . data . someClasses . edges . map ( edge => edge . node . numberField )
5121
+ ) . toEqual ( numberArray ( 80 , 89 ) ) ;
5122
+ expect ( result . data . someClasses . count ) . toEqual ( 100 ) ;
5123
+ expect ( result . data . someClasses . pageInfo . hasPreviousPage ) . toEqual (
5124
+ true
5125
+ ) ;
5126
+ expect ( result . data . someClasses . pageInfo . startCursor ) . toEqual (
5127
+ result . data . someClasses . edges [ 0 ] . cursor
5128
+ ) ;
5129
+ expect ( result . data . someClasses . pageInfo . endCursor ) . toEqual (
5130
+ result . data . someClasses . edges [ 9 ] . cursor
5131
+ ) ;
5132
+ expect ( result . data . someClasses . pageInfo . hasNextPage ) . toEqual ( true ) ;
5133
+ } ) ;
5134
+
4983
5135
it ( 'should support count' , async ( ) => {
4984
5136
await prepareData ( ) ;
4985
5137
0 commit comments