@@ -32,6 +32,17 @@ describe(createPaginator.name, () => {
32
32
}
33
33
}
34
34
35
+ class ClientStringToken {
36
+ private pages = 5 ;
37
+ async send ( command : any ) {
38
+ if ( -- this . pages > 0 ) {
39
+ return {
40
+ outToken : command . input . inToken ,
41
+ } ;
42
+ }
43
+ return { } ;
44
+ }
45
+ }
35
46
class CommandStringToken {
36
47
public constructor ( public input : any ) {
37
48
expect ( input ) . toEqual ( {
@@ -79,6 +90,158 @@ describe(createPaginator.name, () => {
79
90
expect ( pages ) . toEqual ( 5 ) ;
80
91
} ) ;
81
92
93
+ it ( "should prioritize token set in paginator config, fallback to token set in input parameters" , async ( ) => {
94
+ class CommandExpectPaginatorConfigToken {
95
+ public constructor ( public input : any ) {
96
+ expect ( input ) . toMatchObject ( {
97
+ inToken : "abc" ,
98
+ } ) ;
99
+ }
100
+ }
101
+ class CommandExpectOperationInputToken {
102
+ public constructor ( public input : any ) {
103
+ expect ( input ) . toMatchObject ( {
104
+ inToken : "xyz" ,
105
+ } ) ;
106
+ }
107
+ }
108
+ {
109
+ const paginate = createPaginator <
110
+ PaginationConfiguration ,
111
+ { inToken ?: string ; sizeToken ?: number } ,
112
+ { outToken : string }
113
+ > ( ClientStringToken , CommandExpectPaginatorConfigToken , "inToken" , "outToken" , "sizeToken" ) ;
114
+
115
+ let pages = 0 ;
116
+ const client = new ClientStringToken ( ) as any ;
117
+
118
+ for await ( const page of paginate (
119
+ {
120
+ client,
121
+ startingToken : "abc" ,
122
+ } ,
123
+ {
124
+ inToken : "xyz" ,
125
+ }
126
+ ) ) {
127
+ pages += 1 ;
128
+ expect ( page ) . toBeDefined ( ) ;
129
+ }
130
+
131
+ expect ( pages ) . toEqual ( 5 ) ;
132
+ }
133
+ {
134
+ const paginate = createPaginator <
135
+ PaginationConfiguration ,
136
+ { inToken ?: string ; sizeToken ?: number } ,
137
+ { outToken : string }
138
+ > ( ClientStringToken , CommandExpectOperationInputToken , "inToken" , "outToken" , "sizeToken" ) ;
139
+
140
+ let pages = 0 ;
141
+ const client = new ClientStringToken ( ) as any ;
142
+
143
+ for await ( const page of paginate (
144
+ {
145
+ client,
146
+ } ,
147
+ {
148
+ inToken : "xyz" ,
149
+ }
150
+ ) ) {
151
+ pages += 1 ;
152
+ expect ( page ) . toBeDefined ( ) ;
153
+ }
154
+
155
+ expect ( pages ) . toEqual ( 5 ) ;
156
+ }
157
+ } ) ;
158
+
159
+ it ( "should prioritize page size set in operation input, fallback to page size set in paginator config (inverted from token priority)" , async ( ) => {
160
+ class CommandExpectPaginatorPageSize {
161
+ public constructor ( public input : any ) {
162
+ expect ( input ) . toMatchObject ( {
163
+ sizeToken : 100 ,
164
+ } ) ;
165
+ }
166
+ }
167
+ class CommandExpectOperationInputPageSize {
168
+ public constructor ( public input : any ) {
169
+ expect ( input ) . toMatchObject ( {
170
+ sizeToken : 99 ,
171
+ } ) ;
172
+ }
173
+ }
174
+ {
175
+ const paginate = createPaginator <
176
+ PaginationConfiguration ,
177
+ { inToken ?: string ; sizeToken ?: number } ,
178
+ { outToken : string }
179
+ > ( ClientStringToken , CommandExpectPaginatorPageSize , "inToken" , "outToken" , "sizeToken" ) ;
180
+
181
+ let pages = 0 ;
182
+ const client = new ClientStringToken ( ) as any ;
183
+
184
+ for await ( const page of paginate (
185
+ {
186
+ client,
187
+ pageSize : 100 ,
188
+ } ,
189
+ {
190
+ inToken : "abc" ,
191
+ }
192
+ ) ) {
193
+ pages += 1 ;
194
+ expect ( page ) . toBeDefined ( ) ;
195
+ }
196
+
197
+ expect ( pages ) . toEqual ( 5 ) ;
198
+ }
199
+ {
200
+ const paginate = createPaginator <
201
+ PaginationConfiguration ,
202
+ { inToken ?: string ; sizeToken ?: number } ,
203
+ { outToken : string }
204
+ > ( ClientStringToken , CommandExpectOperationInputPageSize , "inToken" , "outToken" , "sizeToken" ) ;
205
+
206
+ let pages = 0 ;
207
+ const client = new ClientStringToken ( ) as any ;
208
+
209
+ for await ( const page of paginate (
210
+ {
211
+ client,
212
+ pageSize : 100 ,
213
+ } ,
214
+ {
215
+ sizeToken : 99 ,
216
+ inToken : "abc" ,
217
+ }
218
+ ) ) {
219
+ pages += 1 ;
220
+ expect ( page ) . toBeDefined ( ) ;
221
+ }
222
+
223
+ expect ( pages ) . toEqual ( 5 ) ;
224
+ }
225
+ } ) ;
226
+
227
+ it ( "should have the correct AsyncGenerator.TNext type" , async ( ) => {
228
+ const paginate = createPaginator <
229
+ PaginationConfiguration ,
230
+ { inToken ?: string ; sizeToken : number } ,
231
+ {
232
+ outToken : string ;
233
+ }
234
+ > ( ClientStringToken , CommandStringToken , "inToken" , "outToken.outToken2.outToken3" , "sizeToken" ) ;
235
+ const asyncGenerator = paginate (
236
+ { client : new ClientStringToken ( ) as any } ,
237
+ { inToken : "TOKEN_VALUE" , sizeToken : 100 }
238
+ ) ;
239
+
240
+ const { value, done } = await asyncGenerator . next ( ) ;
241
+ expect ( value ?. outToken ) . toBeTypeOf ( "string" ) ;
242
+ expect ( done ) . toBe ( false ) ;
243
+ } ) ;
244
+
82
245
it ( "should handle deep paths" , async ( ) => {
83
246
const paginate = createPaginator <
84
247
PaginationConfiguration ,
0 commit comments