From c7279e7c3feaae1f578c6d9424ceef84cb1c73b5 Mon Sep 17 00:00:00 2001 From: minseong Date: Sun, 4 May 2025 04:32:43 +0900 Subject: [PATCH 1/4] test(query-core): add test case for infiniteQueryBehavior.tsx --- .../__tests__/infiniteQueryBehavior.test.tsx | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index 6bd3eb84f93..e179906dbd8 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -441,4 +441,71 @@ describe('InfiniteQueryBehavior', () => { unsubscribe() }) + + test('InfiniteQueryBehavior should handle null page parameters correctly', async () => { + const key = queryKey() + + const queryFnSpy = vi.fn().mockImplementation(({ pageParam }) => { + return pageParam + }) + + const observer = new InfiniteQueryObserver(queryClient, { + queryKey: key, + queryFn: queryFnSpy, + getNextPageParam: (lastPage) => (lastPage === 1 ? null : lastPage + 1), + initialPageParam: 1, + }) + + let observerResult: + | InfiniteQueryObserverResult + | 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 queryFnSpy = vi.fn().mockImplementation(({ pageParam }) => { + return pageParam + }) + + const persisterSpy = vi.fn().mockImplementation(async (fn) => { + return await fn() + }) + + const observer = new InfiniteQueryObserver(queryClient, { + queryKey: key, + queryFn: queryFnSpy, + getNextPageParam: (lastPage) => lastPage + 1, + initialPageParam: 1, + persister: persisterSpy, + }) + + const unsubscribe = observer.subscribe(() => {}) + + await vi.waitFor(() => { + expect(persisterSpy).toHaveBeenCalledTimes(1) + }) + + unsubscribe() + }) }) From 5f29322a7ab0c5344021a79efe0dcd569fba58e8 Mon Sep 17 00:00:00 2001 From: MINSEONG KIM Date: Wed, 7 May 2025 04:32:34 +0900 Subject: [PATCH 2/4] Update packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx Co-authored-by: Jonghyeon Ko --- .../src/__tests__/infiniteQueryBehavior.test.tsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index e179906dbd8..2115f3d84f7 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -445,19 +445,15 @@ describe('InfiniteQueryBehavior', () => { test('InfiniteQueryBehavior should handle null page parameters correctly', async () => { const key = queryKey() - const queryFnSpy = vi.fn().mockImplementation(({ pageParam }) => { - return pageParam - }) - - const observer = new InfiniteQueryObserver(queryClient, { + const observer = new InfiniteQueryObserver(queryClient, { queryKey: key, - queryFn: queryFnSpy, + queryFn: ({ pageParam }) => sleep(0).then(() => pageParam), getNextPageParam: (lastPage) => (lastPage === 1 ? null : lastPage + 1), initialPageParam: 1, }) let observerResult: - | InfiniteQueryObserverResult + | InfiniteQueryObserverResult, Error> | undefined const unsubscribe = observer.subscribe((result) => { From 6ae5cce9d8202f491f013b1eb5f8d0cdad7e752d Mon Sep 17 00:00:00 2001 From: minseong Date: Wed, 7 May 2025 04:39:12 +0900 Subject: [PATCH 3/4] reflect review --- .../src/__tests__/infiniteQueryBehavior.test.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index 2115f3d84f7..c30aa0f7547 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -480,17 +480,13 @@ describe('InfiniteQueryBehavior', () => { test('InfiniteQueryBehavior should use persister when provided', async () => { const key = queryKey() - const queryFnSpy = vi.fn().mockImplementation(({ pageParam }) => { - return pageParam - }) - const persisterSpy = vi.fn().mockImplementation(async (fn) => { return await fn() }) - const observer = new InfiniteQueryObserver(queryClient, { + const observer = new InfiniteQueryObserver(queryClient, { queryKey: key, - queryFn: queryFnSpy, + queryFn: ({ pageParam }) => sleep(0).then(() => pageParam), getNextPageParam: (lastPage) => lastPage + 1, initialPageParam: 1, persister: persisterSpy, From bbfd0be28e2c1213305e9d2d22cc3275d0659954 Mon Sep 17 00:00:00 2001 From: minseong Date: Wed, 7 May 2025 04:44:08 +0900 Subject: [PATCH 4/4] test(query-core): clearly modify the test name --- .../query-core/src/__tests__/infiniteQueryBehavior.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index c30aa0f7547..db77d25144b 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -442,7 +442,7 @@ describe('InfiniteQueryBehavior', () => { unsubscribe() }) - test('InfiniteQueryBehavior should handle null page parameters correctly', async () => { + test('InfiniteQueryBehavior should not fetch next page when getNextPageParam returns null', async () => { const key = queryKey() const observer = new InfiniteQueryObserver(queryClient, {