diff --git a/packages/query-core/src/__tests__/onlineManager.test.tsx b/packages/query-core/src/__tests__/onlineManager.test.tsx index 9d4ab713b0..d9219e0197 100644 --- a/packages/query-core/src/__tests__/onlineManager.test.tsx +++ b/packages/query-core/src/__tests__/onlineManager.test.tsx @@ -157,6 +157,20 @@ describe('onlineManager', () => { unsubscribe2() }) + it('should update online status from window online and offline events', () => { + const unsubscribe = onlineManager.subscribe(() => undefined) + + expect(onlineManager.isOnline()).toBe(true) + + window.dispatchEvent(new Event('offline')) + expect(onlineManager.isOnline()).toBe(false) + + window.dispatchEvent(new Event('online')) + expect(onlineManager.isOnline()).toBe(true) + + unsubscribe() + }) + it('should call listeners when setOnline is called', () => { const listener = vi.fn() diff --git a/packages/query-core/src/__tests__/queryCache.test.tsx b/packages/query-core/src/__tests__/queryCache.test.tsx index 1238bcf44a..c404c1f942 100644 --- a/packages/query-core/src/__tests__/queryCache.test.tsx +++ b/packages/query-core/src/__tests__/queryCache.test.tsx @@ -380,6 +380,22 @@ describe('queryCache', () => { }) }) + describe('QueryCache.remove', () => { + it('should only delete the instance currently stored under its queryHash', () => { + const key = queryKey() + + const staleQuery = queryCache.build(queryClient, { queryKey: key }) + queryCache.remove(staleQuery) + + const currentQuery = queryCache.build(queryClient, { queryKey: key }) + expect(currentQuery).not.toBe(staleQuery) + + queryCache.remove(staleQuery) + + expect(queryCache.get(hashKey(key))).toBe(currentQuery) + }) + }) + describe('QueryCache.add', () => { it('should not try to add a query already added to the cache', async () => { const key = queryKey() diff --git a/packages/query-core/src/__tests__/queryObserver.test.tsx b/packages/query-core/src/__tests__/queryObserver.test.tsx index c814314da1..315c37b160 100644 --- a/packages/query-core/src/__tests__/queryObserver.test.tsx +++ b/packages/query-core/src/__tests__/queryObserver.test.tsx @@ -1294,22 +1294,28 @@ describe('queryObserver', () => { unsubscribe() }) - it('shouldFetchOnWindowFocus should respect refetchOnWindowFocus option', () => { + it('shouldFetchOnWindowFocus should return true when refetchOnWindowFocus is true', () => { const key = queryKey() - const observer1 = new QueryObserver(queryClient, { + const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: () => 'data', refetchOnWindowFocus: true, }) - expect(observer1.shouldFetchOnWindowFocus()).toBe(true) - const observer2 = new QueryObserver(queryClient, { + expect(observer.shouldFetchOnWindowFocus()).toBe(true) + }) + + it('shouldFetchOnWindowFocus should return false when refetchOnWindowFocus is false', () => { + const key = queryKey() + + const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: () => 'data', refetchOnWindowFocus: false, }) - expect(observer2.shouldFetchOnWindowFocus()).toBe(false) + + expect(observer.shouldFetchOnWindowFocus()).toBe(false) }) it('fetchOptimistic should fetch and return optimistic result', async () => { @@ -1462,6 +1468,24 @@ describe('queryObserver', () => { queryClient2.clear() }) + it('should not reject promise when experimental_prefetchInRender is enabled', async () => { + const key = queryKey() + const observer = new QueryObserver(queryClient, { + queryKey: key, + queryFn: () => sleep(10).then(() => 'data'), + }) + + const unsubscribe = observer.subscribe(() => undefined) + const tracked = observer.trackResult(observer.getCurrentResult()) + const promise = tracked.promise + + await vi.advanceTimersByTimeAsync(10) + + await expect(promise).resolves.toBe('data') + + unsubscribe() + }) + it('should not refetchOnMount when set to "always" when staleTime is Static', async () => { const key = queryKey() const queryFn = vi.fn(() => 'data')