diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index 6bd3eb84f9..db77d25144 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -441,4 +441,63 @@ describe('InfiniteQueryBehavior', () => { unsubscribe() }) + + test('InfiniteQueryBehavior should not fetch next page when getNextPageParam returns null', async () => { + const key = queryKey() + + const observer = new InfiniteQueryObserver(queryClient, { + queryKey: key, + queryFn: ({ pageParam }) => sleep(0).then(() => pageParam), + getNextPageParam: (lastPage) => (lastPage === 1 ? null : lastPage + 1), + initialPageParam: 1, + }) + + let observerResult: + | InfiniteQueryObserverResult, Error> + | undefined + + const unsubscribe = observer.subscribe((result) => { + observerResult = result + }) + + await vi.waitFor(() => + expect(observerResult).toMatchObject({ + isFetching: false, + data: { pages: [1], pageParams: [1] }, + }), + ) + + await observer.fetchNextPage() + + expect(observerResult).toMatchObject({ + isFetching: false, + data: { pages: [1], pageParams: [1] }, + }) + + unsubscribe() + }) + + test('InfiniteQueryBehavior should use persister when provided', async () => { + const key = queryKey() + + const persisterSpy = vi.fn().mockImplementation(async (fn) => { + return await fn() + }) + + const observer = new InfiniteQueryObserver(queryClient, { + queryKey: key, + queryFn: ({ pageParam }) => sleep(0).then(() => pageParam), + getNextPageParam: (lastPage) => lastPage + 1, + initialPageParam: 1, + persister: persisterSpy, + }) + + const unsubscribe = observer.subscribe(() => {}) + + await vi.waitFor(() => { + expect(persisterSpy).toHaveBeenCalledTimes(1) + }) + + unsubscribe() + }) })