@@ -441,4 +441,63 @@ describe('InfiniteQueryBehavior', () => {
441441
442442 unsubscribe ( )
443443 } )
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+ } )
444503} )
0 commit comments