@@ -441,4 +441,63 @@ describe('InfiniteQueryBehavior', () => {
441
441
442
442
unsubscribe ( )
443
443
} )
444
+
445
+ test ( 'InfiniteQueryBehavior should not fetch next page when getNextPageParam returns null' , async ( ) => {
446
+ const key = queryKey ( )
447
+
448
+ const observer = new InfiniteQueryObserver ( queryClient , {
449
+ queryKey : key ,
450
+ queryFn : ( { pageParam } ) => sleep ( 0 ) . then ( ( ) => pageParam ) ,
451
+ getNextPageParam : ( lastPage ) => ( lastPage === 1 ? null : lastPage + 1 ) ,
452
+ initialPageParam : 1 ,
453
+ } )
454
+
455
+ let observerResult :
456
+ | InfiniteQueryObserverResult < InfiniteData < number , unknown > , Error >
457
+ | undefined
458
+
459
+ const unsubscribe = observer . subscribe ( ( result ) => {
460
+ observerResult = result
461
+ } )
462
+
463
+ await vi . waitFor ( ( ) =>
464
+ expect ( observerResult ) . toMatchObject ( {
465
+ isFetching : false ,
466
+ data : { pages : [ 1 ] , pageParams : [ 1 ] } ,
467
+ } ) ,
468
+ )
469
+
470
+ await observer . fetchNextPage ( )
471
+
472
+ expect ( observerResult ) . toMatchObject ( {
473
+ isFetching : false ,
474
+ data : { pages : [ 1 ] , pageParams : [ 1 ] } ,
475
+ } )
476
+
477
+ unsubscribe ( )
478
+ } )
479
+
480
+ test ( 'InfiniteQueryBehavior should use persister when provided' , async ( ) => {
481
+ const key = queryKey ( )
482
+
483
+ const persisterSpy = vi . fn ( ) . mockImplementation ( async ( fn ) => {
484
+ return await fn ( )
485
+ } )
486
+
487
+ const observer = new InfiniteQueryObserver ( queryClient , {
488
+ queryKey : key ,
489
+ queryFn : ( { pageParam } ) => sleep ( 0 ) . then ( ( ) => pageParam ) ,
490
+ getNextPageParam : ( lastPage ) => lastPage + 1 ,
491
+ initialPageParam : 1 ,
492
+ persister : persisterSpy ,
493
+ } )
494
+
495
+ const unsubscribe = observer . subscribe ( ( ) => { } )
496
+
497
+ await vi . waitFor ( ( ) => {
498
+ expect ( persisterSpy ) . toHaveBeenCalledTimes ( 1 )
499
+ } )
500
+
501
+ unsubscribe ( )
502
+ } )
444
503
} )
0 commit comments