@@ -198,6 +198,276 @@ describe('#unit ResultStreamObserver', () => {
198
198
}
199
199
} )
200
200
} )
201
+
202
+ describe ( 'when is not explicity pull (default)' , ( ) => {
203
+ it ( 'should ask for more records when the stream is completed and has more' , ( ) => {
204
+ // Setup
205
+ const queryId = 123
206
+ const fetchSize = 2000
207
+
208
+ const more = jest . fn ( )
209
+ const streamObserver = new ResultStreamObserver ( {
210
+ moreFunction : more ,
211
+ fetchSize : 2000
212
+ } )
213
+
214
+ // action
215
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
216
+
217
+ streamObserver . subscribe ( newObserver ( ) )
218
+
219
+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
220
+ streamObserver . onNext ( [ 11 , 22 , 33 ] )
221
+ streamObserver . onCompleted ( { has_more : true } )
222
+
223
+ streamObserver . onNext ( [ 111 , 222 , 333 ] )
224
+ streamObserver . onCompleted ( { has_more : false } )
225
+
226
+ // verification
227
+ expect ( more ) . toBeCalledTimes ( 1 )
228
+ expect ( more ) . toBeCalledWith ( queryId , fetchSize , streamObserver )
229
+ } )
230
+ } )
231
+
232
+ describe ( 'when is explicity pull enabled' , ( ) => {
233
+ it ( 'should not ask for more records when the stream is completed and has more' , ( ) => {
234
+ // Setup
235
+ const queryId = 123
236
+
237
+ const more = jest . fn ( )
238
+ const streamObserver = new ResultStreamObserver ( {
239
+ moreFunction : more ,
240
+ fetchSize : 2000
241
+ } )
242
+ streamObserver . setExplicityPull ( true )
243
+
244
+ // action
245
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
246
+
247
+ streamObserver . subscribe ( newObserver ( ) )
248
+
249
+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
250
+ streamObserver . onNext ( [ 11 , 22 , 33 ] )
251
+ streamObserver . onCompleted ( { has_more : true } )
252
+
253
+ // verification
254
+ expect ( more ) . toBeCalledTimes ( 0 )
255
+ } )
256
+
257
+ describe ( 'pull()' , ( ) => {
258
+ it ( 'should ask for more records when the stream is completed and has more' , ( ) => {
259
+ // Setup
260
+ const queryId = 123
261
+ const fetchSize = 2000
262
+
263
+ const more = jest . fn ( )
264
+ const streamObserver = new ResultStreamObserver ( {
265
+ moreFunction : more ,
266
+ fetchSize : fetchSize
267
+ } )
268
+ streamObserver . setExplicityPull ( true )
269
+
270
+ // Scenario
271
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
272
+
273
+ streamObserver . subscribe ( newObserver ( ) )
274
+
275
+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
276
+ streamObserver . onNext ( [ 11 , 22 , 33 ] )
277
+ streamObserver . onCompleted ( { has_more : true } )
278
+
279
+ // Action
280
+ streamObserver . pull ( )
281
+
282
+ // verification
283
+ expect ( more ) . toBeCalledTimes ( 1 )
284
+ expect ( more ) . toBeCalledWith ( queryId , fetchSize , streamObserver )
285
+ } )
286
+
287
+ it ( 'should ask for more records when the stream is a new reactive stream' , ( ) => {
288
+ // Setup
289
+ const queryId = 123
290
+ const fetchSize = 2000
291
+
292
+ const more = jest . fn ( )
293
+ const streamObserver = new ResultStreamObserver ( {
294
+ moreFunction : more ,
295
+ fetchSize : fetchSize ,
296
+ reactive : true
297
+ } )
298
+ streamObserver . setExplicityPull ( true )
299
+
300
+ // Scenario
301
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
302
+
303
+ // Action
304
+ streamObserver . pull ( )
305
+
306
+ // verification
307
+ expect ( more ) . toBeCalledTimes ( 1 )
308
+ expect ( more ) . toBeCalledWith ( queryId , fetchSize , streamObserver )
309
+ } )
310
+
311
+
312
+ it ( 'should ask for more records when the stream is a new reactive stream and not run success come yet' , ( ) => {
313
+ // Setup
314
+ const queryId = 123
315
+ const fetchSize = 2000
316
+
317
+ const more = jest . fn ( )
318
+ const streamObserver = new ResultStreamObserver ( {
319
+ moreFunction : more ,
320
+ fetchSize : fetchSize ,
321
+ reactive : true
322
+ } )
323
+ streamObserver . setExplicityPull ( true )
324
+
325
+ // Action
326
+ streamObserver . pull ( )
327
+
328
+ // verification
329
+ expect ( more ) . toBeCalledTimes ( 1 )
330
+ expect ( more ) . toBeCalledWith ( null , fetchSize , streamObserver )
331
+ } )
332
+
333
+ it ( 'should not ask for more records when the stream is a new stream' , ( ) => {
334
+ // Setup
335
+ const queryId = 123
336
+ const fetchSize = 2000
337
+
338
+ const more = jest . fn ( )
339
+ const streamObserver = new ResultStreamObserver ( {
340
+ moreFunction : more ,
341
+ fetchSize : fetchSize ,
342
+ reactive : false
343
+ } )
344
+ streamObserver . setExplicityPull ( true )
345
+
346
+ // Scenario
347
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
348
+
349
+ // Action
350
+ streamObserver . pull ( )
351
+
352
+ // verification
353
+ expect ( more ) . toBeCalledTimes ( 0 )
354
+ } )
355
+
356
+
357
+ it ( 'should not ask for more records when the stream is a new stream' , ( ) => {
358
+ // Setup
359
+ const queryId = 123
360
+ const fetchSize = 2000
361
+
362
+ const more = jest . fn ( )
363
+ const streamObserver = new ResultStreamObserver ( {
364
+ moreFunction : more ,
365
+ fetchSize : fetchSize
366
+ } )
367
+
368
+ streamObserver . setExplicityPull ( true )
369
+
370
+ // Scenario
371
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
372
+
373
+ // Action
374
+ streamObserver . pull ( )
375
+
376
+ // verification
377
+ expect ( more ) . toBeCalledTimes ( 0 )
378
+ } )
379
+
380
+ it ( 'should not ask for more records when it is streaming' , ( ) => {
381
+ // Setup
382
+ const queryId = 123
383
+ const fetchSize = 2000
384
+
385
+ const more = jest . fn ( )
386
+ const streamObserver = new ResultStreamObserver ( {
387
+ moreFunction : more ,
388
+ fetchSize : fetchSize
389
+ } )
390
+
391
+ streamObserver . setExplicityPull ( true )
392
+
393
+ // Scenario
394
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
395
+
396
+ streamObserver . subscribe ( newObserver ( ) )
397
+
398
+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
399
+ streamObserver . onNext ( [ 11 , 22 , 33 ] )
400
+ streamObserver . onCompleted ( { has_more : true } )
401
+
402
+ streamObserver . pull ( ) // should actual call
403
+
404
+ streamObserver . onNext ( [ 111 , 222 , 333 ] )
405
+
406
+ // Action
407
+ streamObserver . pull ( )
408
+
409
+ // verification
410
+ expect ( more ) . toBeCalledTimes ( 1 )
411
+ } )
412
+
413
+ it ( 'should not ask for more records when result is completed' , ( ) => {
414
+ // Setup
415
+ const queryId = 123
416
+ const fetchSize = 2000
417
+
418
+ const more = jest . fn ( )
419
+ const streamObserver = new ResultStreamObserver ( {
420
+ moreFunction : more ,
421
+ fetchSize : fetchSize
422
+ } )
423
+
424
+ streamObserver . setExplicityPull ( true )
425
+
426
+ // Scenario
427
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
428
+
429
+ streamObserver . subscribe ( newObserver ( ) )
430
+
431
+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
432
+ streamObserver . onNext ( [ 11 , 22 , 33 ] )
433
+ streamObserver . onCompleted ( { has_more : false } )
434
+
435
+ // Action
436
+ streamObserver . pull ( )
437
+
438
+ // verification
439
+ expect ( more ) . toBeCalledTimes ( 0 )
440
+ } )
441
+
442
+ it ( 'should not ask for more records when stream failed' , ( ) => {
443
+ // Setup
444
+ const queryId = 123
445
+ const fetchSize = 2000
446
+
447
+ const more = jest . fn ( )
448
+ const streamObserver = new ResultStreamObserver ( {
449
+ moreFunction : more ,
450
+ fetchSize : fetchSize
451
+ } )
452
+
453
+ streamObserver . setExplicityPull ( true )
454
+
455
+ // Scenario
456
+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
457
+
458
+ streamObserver . subscribe ( newObserver ( ) )
459
+
460
+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
461
+ streamObserver . onError ( new Error ( 'error' ) )
462
+
463
+ // Action
464
+ streamObserver . pull ( )
465
+
466
+ // verification
467
+ expect ( more ) . toBeCalledTimes ( 0 )
468
+ } )
469
+ } )
470
+ } )
201
471
} )
202
472
203
473
describe ( '#unit RouteObserver' , ( ) => {
0 commit comments