Skip to content
59 changes: 59 additions & 0 deletions packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<InfiniteData<number, unknown>, 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()
})
})
Loading