@@ -198,6 +198,254 @@ describe('#unit ResultStreamObserver', () => {
198198 }
199199 } )
200200 } )
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+ it ( 'should not ask for more records when the stream is a new stream' , ( ) => {
312+ // Setup
313+ const queryId = 123
314+ const fetchSize = 2000
315+
316+ const more = jest . fn ( )
317+ const streamObserver = new ResultStreamObserver ( {
318+ moreFunction : more ,
319+ fetchSize : fetchSize ,
320+ reactive : false
321+ } )
322+ streamObserver . setExplicityPull ( true )
323+
324+ // Scenario
325+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
326+
327+ // Action
328+ streamObserver . pull ( )
329+
330+ // verification
331+ expect ( more ) . toBeCalledTimes ( 0 )
332+ } )
333+
334+
335+ it ( 'should not ask for more records when the stream is a new stream' , ( ) => {
336+ // Setup
337+ const queryId = 123
338+ const fetchSize = 2000
339+
340+ const more = jest . fn ( )
341+ const streamObserver = new ResultStreamObserver ( {
342+ moreFunction : more ,
343+ fetchSize : fetchSize
344+ } )
345+
346+ streamObserver . setExplicityPull ( true )
347+
348+ // Scenario
349+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
350+
351+ // Action
352+ streamObserver . pull ( )
353+
354+ // verification
355+ expect ( more ) . toBeCalledTimes ( 0 )
356+ } )
357+
358+ it ( 'should not ask for more records when it is streaming' , ( ) => {
359+ // Setup
360+ const queryId = 123
361+ const fetchSize = 2000
362+
363+ const more = jest . fn ( )
364+ const streamObserver = new ResultStreamObserver ( {
365+ moreFunction : more ,
366+ fetchSize : fetchSize
367+ } )
368+
369+ streamObserver . setExplicityPull ( true )
370+
371+ // Scenario
372+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
373+
374+ streamObserver . subscribe ( newObserver ( ) )
375+
376+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
377+ streamObserver . onNext ( [ 11 , 22 , 33 ] )
378+ streamObserver . onCompleted ( { has_more : true } )
379+
380+ streamObserver . pull ( ) // should actual call
381+
382+ streamObserver . onNext ( [ 111 , 222 , 333 ] )
383+
384+ // Action
385+ streamObserver . pull ( )
386+
387+ // verification
388+ expect ( more ) . toBeCalledTimes ( 1 )
389+ } )
390+
391+ it ( 'should not ask for more records when result is completed' , ( ) => {
392+ // Setup
393+ const queryId = 123
394+ const fetchSize = 2000
395+
396+ const more = jest . fn ( )
397+ const streamObserver = new ResultStreamObserver ( {
398+ moreFunction : more ,
399+ fetchSize : fetchSize
400+ } )
401+
402+ streamObserver . setExplicityPull ( true )
403+
404+ // Scenario
405+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
406+
407+ streamObserver . subscribe ( newObserver ( ) )
408+
409+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
410+ streamObserver . onNext ( [ 11 , 22 , 33 ] )
411+ streamObserver . onCompleted ( { has_more : false } )
412+
413+ // Action
414+ streamObserver . pull ( )
415+
416+ // verification
417+ expect ( more ) . toBeCalledTimes ( 0 )
418+ } )
419+
420+ it ( 'should not ask for more records when stream failed' , ( ) => {
421+ // Setup
422+ const queryId = 123
423+ const fetchSize = 2000
424+
425+ const more = jest . fn ( )
426+ const streamObserver = new ResultStreamObserver ( {
427+ moreFunction : more ,
428+ fetchSize : fetchSize
429+ } )
430+
431+ streamObserver . setExplicityPull ( true )
432+
433+ // Scenario
434+ streamObserver . onCompleted ( { fields : [ 'A' , 'B' , 'C' ] , qid : queryId } )
435+
436+ streamObserver . subscribe ( newObserver ( ) )
437+
438+ streamObserver . onNext ( [ 1 , 2 , 3 ] )
439+ streamObserver . onError ( new Error ( 'error' ) )
440+
441+ // Action
442+ streamObserver . pull ( )
443+
444+ // verification
445+ expect ( more ) . toBeCalledTimes ( 0 )
446+ } )
447+ } )
448+ } )
201449} )
202450
203451describe ( '#unit RouteObserver' , ( ) => {
0 commit comments