From 8111688b813b42d34a89cff720fd4882ec36a835 Mon Sep 17 00:00:00 2001 From: Jonghyeon Ko Date: Fri, 2 May 2025 18:08:28 +0900 Subject: [PATCH 1/9] test(query-test-utils): init --- codecov.yml | 4 + package.json | 2 + .../src/__tests__/inject-query.test.ts | 2 +- .../src/__tests__/test-utils.ts | 41 ++-------- .../src/__tests__/utils.ts | 12 --- .../with-persist-query-client.test.ts | 2 +- .../src/__tests__/asyncThrottle.test.ts | 10 +-- .../src/__tests__/utils.ts | 5 -- packages/query-core/package.json | 2 +- .../src/__tests__/hydration.test.tsx | 2 +- .../__tests__/infiniteQueryBehavior.test.tsx | 3 +- .../infiniteQueryObserver.test-d.tsx | 3 +- .../__tests__/infiniteQueryObserver.test.tsx | 3 +- .../src/__tests__/mutationCache.test.tsx | 3 +- .../src/__tests__/mutationObserver.test.tsx | 3 +- .../src/__tests__/mutations.test.tsx | 3 +- .../src/__tests__/notifyManager.test.tsx | 2 +- .../src/__tests__/queriesObserver.test.tsx | 3 +- .../query-core/src/__tests__/query.test.tsx | 3 +- .../src/__tests__/queryCache.test.tsx | 3 +- .../src/__tests__/queryClient.test.tsx | 8 +- .../src/__tests__/queryObserver.test-d.tsx | 3 +- .../src/__tests__/queryObserver.test.tsx | 3 +- .../src/__tests__/streamedQuery.test.tsx | 3 +- packages/query-core/src/__tests__/utils.ts | 12 --- .../src/__tests__/utils.ts | 7 +- .../src/__tests__/storageIsFull.test.ts | 2 +- .../src/__tests__/utils.ts | 5 -- packages/query-test-utils/eslint.config.js | 5 ++ packages/query-test-utils/package.json | 39 ++++++++++ .../query-test-utils/root.eslint.config.js | 1 + .../src/__test__/queryKey.test.ts | 12 +++ .../src/__test__/sleep.test.ts | 11 +++ packages/query-test-utils/src/index.ts | 2 + packages/query-test-utils/src/queryKey.ts | 6 ++ packages/query-test-utils/src/sleep.ts | 4 + packages/query-test-utils/tsconfig.json | 9 +++ packages/query-test-utils/vite.config.ts | 25 ++++++ .../PersistQueryClientProvider.test.tsx | 4 +- .../src/__tests__/utils.ts | 12 --- .../src/__tests__/HydrationBoundary.test.tsx | 4 +- .../__tests__/QueryClientProvider.test.tsx | 3 +- .../QueryResetErrorBoundary.test.tsx | 4 +- .../__tests__/fine-grained-persister.test.tsx | 3 +- .../react-query/src/__tests__/ssr.test.tsx | 3 +- .../src/__tests__/suspense.test.tsx | 2 +- .../src/__tests__/useInfiniteQuery.test.tsx | 9 +-- .../src/__tests__/useIsFetching.test.tsx | 8 +- .../src/__tests__/useMutation.test.tsx | 3 +- .../src/__tests__/useMutationState.test.tsx | 3 +- .../usePrefetchInfiniteQuery.test.tsx | 4 +- .../src/__tests__/usePrefetchQuery.test.tsx | 3 +- .../src/__tests__/useQueries.test.tsx | 3 +- .../src/__tests__/useQuery.promise.test.tsx | 3 +- .../src/__tests__/useQuery.test-d.tsx | 2 +- .../src/__tests__/useQuery.test.tsx | 3 +- .../useSuspenseInfiniteQuery.test.tsx | 3 +- .../src/__tests__/useSuspenseQueries.test.tsx | 3 +- .../src/__tests__/useSuspenseQuery.test.tsx | 3 +- packages/react-query/src/__tests__/utils.tsx | 12 --- .../PersistQueryClientProvider.test.tsx | 4 +- .../src/__tests__/utils.ts | 12 --- .../__tests__/QueryClientProvider.test.tsx | 3 +- .../src/__tests__/suspense.test.tsx | 3 +- .../src/__tests__/transition.test.tsx | 3 +- .../src/__tests__/useInfiniteQuery.test.tsx | 10 +-- .../src/__tests__/useIsFetching.test.tsx | 3 +- .../src/__tests__/useIsMutating.test.tsx | 3 +- .../src/__tests__/useMutation.test.tsx | 3 +- .../src/__tests__/useMutationState.test.tsx | 3 +- .../src/__tests__/useQueries.test.tsx | 3 +- .../src/__tests__/useQuery.test.tsx | 3 +- packages/solid-query/src/__tests__/utils.tsx | 12 --- .../AwaitOnSuccess/AwaitOnSuccess.svelte | 2 +- .../tests/FreshData/FreshData.svelte | 2 +- .../tests/InitialData/InitialData.svelte | 2 +- .../tests/OnSuccess/OnSuccess.svelte | 2 +- .../tests/PersistQueryClientProvider.test.ts | 3 +- .../tests/RemoveCache/RemoveCache.svelte | 2 +- .../tests/RestoreCache/RestoreCache.svelte | 2 +- .../tests/UseQueries/UseQueries.svelte | 2 +- .../tests/utils.ts | 6 -- .../QueryClientProvider/ChildComponent.svelte | 2 +- .../createMutation/createMutation.test.ts | 2 +- .../tests/createQueries/CombineExample.svelte | 2 +- .../tests/createQueries/createQueries.test.ts | 2 +- .../tests/createQuery/DisabledExample.svelte | 2 +- .../tests/createQuery/PlaceholderData.svelte | 2 +- .../tests/createQuery/RefetchExample.svelte | 2 +- .../tests/createQuery/createQuery.test.ts | 2 +- .../tests/useIsFetching/BaseExample.svelte | 2 +- .../tests/useIsMutating/BaseExample.svelte | 2 +- packages/svelte-query/tests/utils.ts | 5 -- .../vue-query/src/__tests__/test-utils.ts | 49 ++++-------- pnpm-lock.yaml | 76 +++++++++++++++++++ 95 files changed, 330 insertions(+), 273 deletions(-) delete mode 100644 packages/angular-query-persist-client/src/__tests__/utils.ts delete mode 100644 packages/query-async-storage-persister/src/__tests__/utils.ts delete mode 100644 packages/query-sync-storage-persister/src/__tests__/utils.ts create mode 100644 packages/query-test-utils/eslint.config.js create mode 100644 packages/query-test-utils/package.json create mode 120000 packages/query-test-utils/root.eslint.config.js create mode 100644 packages/query-test-utils/src/__test__/queryKey.test.ts create mode 100644 packages/query-test-utils/src/__test__/sleep.test.ts create mode 100644 packages/query-test-utils/src/index.ts create mode 100644 packages/query-test-utils/src/queryKey.ts create mode 100644 packages/query-test-utils/src/sleep.ts create mode 100644 packages/query-test-utils/tsconfig.json create mode 100644 packages/query-test-utils/vite.config.ts delete mode 100644 packages/svelte-query/tests/utils.ts diff --git a/codecov.yml b/codecov.yml index 3547af3b6b1..ef21589e002 100644 --- a/codecov.yml +++ b/codecov.yml @@ -59,6 +59,10 @@ component_management: name: '@tanstack/query-sync-storage-persister' paths: - packages/query-sync-storage-persister/** + - component_id: query-test-utils + name: '@tanstack/query-test-utils' + paths: + - packages/query-test-utils/** - component_id: react-query name: '@tanstack/react-query' paths: diff --git a/package.json b/package.json index 54e95c533ba..80fa693b759 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "@cspell/eslint-plugin": "^8.17.1", "@eslint-react/eslint-plugin": "^1.19.0", "@tanstack/config": "^0.14.2", + "@tanstack/query-test-utils": "workspace:*", "@testing-library/jest-dom": "^6.6.3", "@types/node": "^22.9.3", "@types/react": "^19.0.1", @@ -86,6 +87,7 @@ "@tanstack/query-devtools": "workspace:*", "@tanstack/query-persist-client-core": "workspace:*", "@tanstack/query-sync-storage-persister": "workspace:*", + "@tanstack/query-test-utils": "workspace:*", "@tanstack/react-query": "workspace:*", "@tanstack/react-query-devtools": "workspace:*", "@tanstack/react-query-next-experimental": "workspace:*", diff --git a/packages/angular-query-experimental/src/__tests__/inject-query.test.ts b/packages/angular-query-experimental/src/__tests__/inject-query.test.ts index 2f7d5f4f457..f097d106025 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-query.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-query.test.ts @@ -17,11 +17,11 @@ import { test, vi, } from 'vitest' +import { queryKey } from '@tanstack/query-test-utils' import { QueryCache, QueryClient, injectQuery, provideTanStackQuery } from '..' import { delayedFetcher, getSimpleFetcherWithReturnData, - queryKey, rejectFetcher, setSignalInputs, simpleFetcher, diff --git a/packages/angular-query-experimental/src/__tests__/test-utils.ts b/packages/angular-query-experimental/src/__tests__/test-utils.ts index 9fdd01f943c..9b851bc9809 100644 --- a/packages/angular-query-experimental/src/__tests__/test-utils.ts +++ b/packages/angular-query-experimental/src/__tests__/test-utils.ts @@ -1,43 +1,26 @@ import { isSignal, untracked } from '@angular/core' import { SIGNAL, signalSetFn } from '@angular/core/primitives/signals' import { expect } from 'vitest' +import { sleep } from '@tanstack/query-test-utils' import type { InputSignal, Signal } from '@angular/core' import type { ComponentFixture } from '@angular/core/testing' -let queryKeyCount = 0 -export function queryKey() { - queryKeyCount++ - return [`query_${queryKeyCount}`] -} +/* eslint jsdoc/require-jsdoc: 0, jsdoc/require-param: 0 */ export function simpleFetcher(): Promise { - return new Promise((resolve) => { - setTimeout(() => { - return resolve('Some data') - }, 0) - }) + return sleep(0).then(() => 'Some data') } export function delayedFetcher(timeout = 0): () => Promise { - return () => - new Promise((resolve) => { - setTimeout(() => { - return resolve('Some data') - }, timeout) - }) + return () => sleep(timeout).then(() => 'Some data') } export function getSimpleFetcherWithReturnData(returnData: unknown) { - return () => - new Promise((resolve) => setTimeout(() => resolve(returnData), 0)) + return () => sleep(0).then(() => returnData) } export function rejectFetcher(): Promise { - return new Promise((_, reject) => { - setTimeout(() => { - return reject(new Error('Some error')) - }, 0) - }) + return sleep(0).then(() => Promise.reject(new Error('Some error'))) } export function infiniteFetcher({ @@ -45,19 +28,11 @@ export function infiniteFetcher({ }: { pageParam?: number }): Promise { - return new Promise((resolve) => { - setTimeout(() => { - return resolve('data on page ' + pageParam) - }, 0) - }) + return sleep(0).then(() => 'data on page ' + pageParam) } export function successMutator(param: T): Promise { - return new Promise((resolve) => { - setTimeout(() => { - return resolve(param) - }, 0) - }) + return sleep(0).then(() => param) } export function errorMutator(_parameter?: unknown): Promise { diff --git a/packages/angular-query-persist-client/src/__tests__/utils.ts b/packages/angular-query-persist-client/src/__tests__/utils.ts deleted file mode 100644 index 73fb0ed26fa..00000000000 --- a/packages/angular-query-persist-client/src/__tests__/utils.ts +++ /dev/null @@ -1,12 +0,0 @@ -let queryKeyCount = 0 - -export function queryKey(): Array { - queryKeyCount++ - return [`query_${queryKeyCount}`] -} - -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} diff --git a/packages/angular-query-persist-client/src/__tests__/with-persist-query-client.test.ts b/packages/angular-query-persist-client/src/__tests__/with-persist-query-client.test.ts index 7085c753eac..4a6a8d6faba 100644 --- a/packages/angular-query-persist-client/src/__tests__/with-persist-query-client.test.ts +++ b/packages/angular-query-persist-client/src/__tests__/with-persist-query-client.test.ts @@ -11,8 +11,8 @@ import { provideExperimentalZonelessChangeDetection, } from '@angular/core' import { render, screen, waitFor } from '@testing-library/angular' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { withPersistQueryClient } from '../with-persist-query-client' -import { queryKey, sleep } from './utils' import type { PersistedClient, Persister, diff --git a/packages/query-async-storage-persister/src/__tests__/asyncThrottle.test.ts b/packages/query-async-storage-persister/src/__tests__/asyncThrottle.test.ts index d85ea1c465b..ec7476d1746 100644 --- a/packages/query-async-storage-persister/src/__tests__/asyncThrottle.test.ts +++ b/packages/query-async-storage-persister/src/__tests__/asyncThrottle.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { sleep } from '@tanstack/query-test-utils' import { asyncThrottle } from '../asyncThrottle' -import { sleep as delay } from './utils' describe('asyncThrottle', () => { beforeEach(() => { @@ -16,7 +16,7 @@ describe('asyncThrottle', () => { const execTimeStamps: Array = [] const mockFunc = vi.fn( async (id: number, complete?: (value?: unknown) => void) => { - await delay(1) + await sleep(1) execTimeStamps.push(Date.now()) if (complete) { complete(id) @@ -49,7 +49,7 @@ describe('asyncThrottle', () => { const execTimeStamps: Array = [] const mockFunc = vi.fn( async (id: number, complete?: (value?: unknown) => void) => { - await delay(30) + await sleep(30) execTimeStamps.push(Date.now()) if (complete) { complete(id) @@ -81,7 +81,7 @@ describe('asyncThrottle', () => { const execTimeStamps: Array = [] const mockFunc = vi.fn( async (id: number, complete?: (value?: unknown) => void) => { - await delay(interval + 10) + await sleep(interval + 10) execTimeStamps.push(Date.now()) if (complete) { complete(id) @@ -112,7 +112,7 @@ describe('asyncThrottle', () => { const mockFunc = vi.fn( async (id: number, complete?: (value?: unknown) => void) => { if (id === 1) throw new Error('error') - await delay(1) + await sleep(1) if (complete) { complete(id) } diff --git a/packages/query-async-storage-persister/src/__tests__/utils.ts b/packages/query-async-storage-persister/src/__tests__/utils.ts deleted file mode 100644 index 1a3a619a227..00000000000 --- a/packages/query-async-storage-persister/src/__tests__/utils.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} diff --git a/packages/query-core/package.json b/packages/query-core/package.json index 63fe2ba3dac..851f9dcb1e0 100644 --- a/packages/query-core/package.json +++ b/packages/query-core/package.json @@ -30,7 +30,7 @@ "test:types:tscurrent": "tsc --build", "test:lib": "vitest", "test:lib:dev": "pnpm run test:lib --watch", - "test:build": "publint --strict && attw --pack", + "test:build": "pnpm publint --strict && attw --pack", "build": "tsup --tsconfig tsconfig.prod.json" }, "type": "module", diff --git a/packages/query-core/src/__tests__/hydration.test.tsx b/packages/query-core/src/__tests__/hydration.test.tsx index ed9a1a2a290..a798060d6ed 100644 --- a/packages/query-core/src/__tests__/hydration.test.tsx +++ b/packages/query-core/src/__tests__/hydration.test.tsx @@ -1,4 +1,5 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { sleep } from '@tanstack/query-test-utils' import { QueryCache } from '../queryCache' import { dehydrate, hydrate } from '../hydration' import { MutationCache } from '../mutationCache' @@ -6,7 +7,6 @@ import { createQueryClient, executeMutation, mockOnlineManagerIsOnline, - sleep, } from './utils' async function fetchData(value: TData, ms?: number): Promise { diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index 6bd3eb84f93..639b342e56b 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { CancelledError, InfiniteQueryObserver } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { InfiniteData, InfiniteQueryObserverResult, diff --git a/packages/query-core/src/__tests__/infiniteQueryObserver.test-d.tsx b/packages/query-core/src/__tests__/infiniteQueryObserver.test-d.tsx index 1124c1e0b76..e05b94d52f4 100644 --- a/packages/query-core/src/__tests__/infiniteQueryObserver.test-d.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryObserver.test-d.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expectTypeOf, it, vi } from 'vitest' +import { queryKey } from '@tanstack/query-test-utils' import { InfiniteQueryObserver } from '..' -import { createQueryClient, queryKey } from './utils' +import { createQueryClient } from './utils' import type { InfiniteData, QueryClient } from '..' describe('InfiniteQueryObserver', () => { diff --git a/packages/query-core/src/__tests__/infiniteQueryObserver.test.tsx b/packages/query-core/src/__tests__/infiniteQueryObserver.test.tsx index eac9241253b..18fda23041f 100644 --- a/packages/query-core/src/__tests__/infiniteQueryObserver.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryObserver.test.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { InfiniteQueryObserver } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { QueryClient } from '..' describe('InfiniteQueryObserver', () => { diff --git a/packages/query-core/src/__tests__/mutationCache.test.tsx b/packages/query-core/src/__tests__/mutationCache.test.tsx index 7b7f6289a64..a922f1d551e 100644 --- a/packages/query-core/src/__tests__/mutationCache.test.tsx +++ b/packages/query-core/src/__tests__/mutationCache.test.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { MutationCache, MutationObserver } from '..' -import { createQueryClient, executeMutation, queryKey, sleep } from './utils' +import { createQueryClient, executeMutation } from './utils' describe('mutationCache', () => { beforeEach(() => { diff --git a/packages/query-core/src/__tests__/mutationObserver.test.tsx b/packages/query-core/src/__tests__/mutationObserver.test.tsx index 13347d56ed4..3c594d29aea 100644 --- a/packages/query-core/src/__tests__/mutationObserver.test.tsx +++ b/packages/query-core/src/__tests__/mutationObserver.test.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { MutationObserver } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { QueryClient } from '..' describe('mutationObserver', () => { diff --git a/packages/query-core/src/__tests__/mutations.test.tsx b/packages/query-core/src/__tests__/mutations.test.tsx index 9e1288e7e05..36d8056ab28 100644 --- a/packages/query-core/src/__tests__/mutations.test.tsx +++ b/packages/query-core/src/__tests__/mutations.test.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { MutationObserver } from '../mutationObserver' -import { createQueryClient, executeMutation, queryKey, sleep } from './utils' +import { createQueryClient, executeMutation } from './utils' import type { QueryClient } from '..' import type { MutationState } from '../mutation' diff --git a/packages/query-core/src/__tests__/notifyManager.test.tsx b/packages/query-core/src/__tests__/notifyManager.test.tsx index deb070f2c5c..ea134214551 100644 --- a/packages/query-core/src/__tests__/notifyManager.test.tsx +++ b/packages/query-core/src/__tests__/notifyManager.test.tsx @@ -8,8 +8,8 @@ import { it, vi, } from 'vitest' +import { sleep } from '@tanstack/query-test-utils' import { createNotifyManager } from '../notifyManager' -import { sleep } from './utils' describe('notifyManager', () => { beforeEach(() => { diff --git a/packages/query-core/src/__tests__/queriesObserver.test.tsx b/packages/query-core/src/__tests__/queriesObserver.test.tsx index c6d58d8d910..5f03d59d2a9 100644 --- a/packages/query-core/src/__tests__/queriesObserver.test.tsx +++ b/packages/query-core/src/__tests__/queriesObserver.test.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueriesObserver } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { QueryClient, QueryObserverResult } from '..' describe('queriesObserver', () => { diff --git a/packages/query-core/src/__tests__/query.test.tsx b/packages/query-core/src/__tests__/query.test.tsx index 6d7485a6d7f..2c5b69eafe3 100644 --- a/packages/query-core/src/__tests__/query.test.tsx +++ b/packages/query-core/src/__tests__/query.test.tsx @@ -1,12 +1,11 @@ import { afterEach, beforeEach, describe, expect, it, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryObserver, dehydrate, hydrate, isCancelledError } from '..' import { createQueryClient, mockOnlineManagerIsOnline, mockVisibilityState, - queryKey, setIsServer, - sleep, } from './utils' import type { QueryCache, diff --git a/packages/query-core/src/__tests__/queryCache.test.tsx b/packages/query-core/src/__tests__/queryCache.test.tsx index 6399e787334..d8357010415 100644 --- a/packages/query-core/src/__tests__/queryCache.test.tsx +++ b/packages/query-core/src/__tests__/queryCache.test.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryClient, QueryObserver } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' describe('queryCache', () => { let queryClient: QueryClient diff --git a/packages/query-core/src/__tests__/queryClient.test.tsx b/packages/query-core/src/__tests__/queryClient.test.tsx index 68a59c75b41..b6ae86a8a3d 100644 --- a/packages/query-core/src/__tests__/queryClient.test.tsx +++ b/packages/query-core/src/__tests__/queryClient.test.tsx @@ -1,4 +1,5 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { MutationObserver, QueryClient, @@ -9,12 +10,7 @@ import { onlineManager, skipToken, } from '..' -import { - createQueryClient, - mockOnlineManagerIsOnline, - queryKey, - sleep, -} from './utils' +import { createQueryClient, mockOnlineManagerIsOnline } from './utils' import type { QueryCache, QueryFunction, QueryObserverOptions } from '..' describe('queryClient', () => { diff --git a/packages/query-core/src/__tests__/queryObserver.test-d.tsx b/packages/query-core/src/__tests__/queryObserver.test-d.tsx index afb01d83c68..b285cfec281 100644 --- a/packages/query-core/src/__tests__/queryObserver.test-d.tsx +++ b/packages/query-core/src/__tests__/queryObserver.test-d.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expectTypeOf, it } from 'vitest' +import { queryKey } from '@tanstack/query-test-utils' import { QueryObserver } from '..' -import { createQueryClient, queryKey } from './utils' +import { createQueryClient } from './utils' import type { DefaultError, QueryClient } from '..' describe('queryObserver', () => { diff --git a/packages/query-core/src/__tests__/queryObserver.test.tsx b/packages/query-core/src/__tests__/queryObserver.test.tsx index a977a4f7357..293497e7d53 100644 --- a/packages/query-core/src/__tests__/queryObserver.test.tsx +++ b/packages/query-core/src/__tests__/queryObserver.test.tsx @@ -7,8 +7,9 @@ import { test, vi, } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryObserver, focusManager } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { QueryClient, QueryObserverResult } from '..' describe('queryObserver', () => { diff --git a/packages/query-core/src/__tests__/streamedQuery.test.tsx b/packages/query-core/src/__tests__/streamedQuery.test.tsx index eadeebea49d..d54804fe028 100644 --- a/packages/query-core/src/__tests__/streamedQuery.test.tsx +++ b/packages/query-core/src/__tests__/streamedQuery.test.tsx @@ -1,7 +1,8 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { streamedQuery } from '../streamedQuery' import { QueryObserver } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { QueryClient } from '..' describe('streamedQuery', () => { diff --git a/packages/query-core/src/__tests__/utils.ts b/packages/query-core/src/__tests__/utils.ts index 8d876afc3cc..0228c7a7273 100644 --- a/packages/query-core/src/__tests__/utils.ts +++ b/packages/query-core/src/__tests__/utils.ts @@ -20,18 +20,6 @@ export function mockOnlineManagerIsOnline( return vi.spyOn(onlineManager, 'isOnline').mockReturnValue(value) } -let queryKeyCount = 0 -export function queryKey(): Array { - queryKeyCount++ - return [`query_${queryKeyCount}`] -} - -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} - export function executeMutation( queryClient: QueryClient, options: MutationOptions, diff --git a/packages/query-persist-client-core/src/__tests__/utils.ts b/packages/query-persist-client-core/src/__tests__/utils.ts index ee5ac7f0d40..bc2e3a617c0 100644 --- a/packages/query-persist-client-core/src/__tests__/utils.ts +++ b/packages/query-persist-client-core/src/__tests__/utils.ts @@ -1,5 +1,6 @@ import { vi } from 'vitest' import { QueryClient } from '@tanstack/query-core' +import { sleep } from '@tanstack/query-test-utils' import type { QueryClientConfig } from '@tanstack/query-core' import type { PersistedClient, Persister } from '../persist' @@ -7,12 +8,6 @@ export function createQueryClient(config?: QueryClientConfig): QueryClient { return new QueryClient(config) } -function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} - export function createMockPersister(): Persister { let storedState: PersistedClient | undefined diff --git a/packages/query-sync-storage-persister/src/__tests__/storageIsFull.test.ts b/packages/query-sync-storage-persister/src/__tests__/storageIsFull.test.ts index ae1a1a008dd..5f75d66c212 100644 --- a/packages/query-sync-storage-persister/src/__tests__/storageIsFull.test.ts +++ b/packages/query-sync-storage-persister/src/__tests__/storageIsFull.test.ts @@ -6,8 +6,8 @@ import { dehydrate, } from '@tanstack/query-core' import { removeOldestQuery } from '@tanstack/query-persist-client-core' +import { sleep } from '@tanstack/query-test-utils' import { createSyncStoragePersister } from '../index' -import { sleep } from './utils' function getMockStorage(limitSize?: number) { const dataSet = new Map() diff --git a/packages/query-sync-storage-persister/src/__tests__/utils.ts b/packages/query-sync-storage-persister/src/__tests__/utils.ts deleted file mode 100644 index 1a3a619a227..00000000000 --- a/packages/query-sync-storage-persister/src/__tests__/utils.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} diff --git a/packages/query-test-utils/eslint.config.js b/packages/query-test-utils/eslint.config.js new file mode 100644 index 00000000000..df75435c7e1 --- /dev/null +++ b/packages/query-test-utils/eslint.config.js @@ -0,0 +1,5 @@ +// @ts-check + +import rootConfig from './root.eslint.config.js' + +export default [...rootConfig] diff --git a/packages/query-test-utils/package.json b/packages/query-test-utils/package.json new file mode 100644 index 00000000000..63e280a1643 --- /dev/null +++ b/packages/query-test-utils/package.json @@ -0,0 +1,39 @@ +{ + "name": "@tanstack/query-test-utils", + "description": "Internal test utilities for TanStack Query", + "author": "Jonghyeon Ko ", + "private": true, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/TanStack/query.git", + "directory": "packages/query-test-utils" + }, + "homepage": "https://tanstack.com/query", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "module": "src/index.ts", + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.ts" + }, + "./package.json": "./package.json" + }, + "scripts": { + "clean": "premove ./build ./coverage ./dist-ts", + "test:eslint": "eslint ./src", + "test:types": "npm-run-all --serial test:types:*", + "test:types:tscurrent": "tsc --build", + "test:lib": "vitest", + "test:lib:dev": "pnpm run test:lib --watch" + }, + "type": "module", + "devDependencies": { + "npm-run-all2": "^5.0.0" + } +} diff --git a/packages/query-test-utils/root.eslint.config.js b/packages/query-test-utils/root.eslint.config.js new file mode 120000 index 00000000000..35dedbe5a4a --- /dev/null +++ b/packages/query-test-utils/root.eslint.config.js @@ -0,0 +1 @@ +../../eslint.config.js \ No newline at end of file diff --git a/packages/query-test-utils/src/__test__/queryKey.test.ts b/packages/query-test-utils/src/__test__/queryKey.test.ts new file mode 100644 index 00000000000..d403f70b01f --- /dev/null +++ b/packages/query-test-utils/src/__test__/queryKey.test.ts @@ -0,0 +1,12 @@ +import { queryKey } from 'src/queryKey' +import { describe, expect, it } from 'vitest' + +describe('queryKey', () => { + it('should return a query key', () => { + const key = queryKey() + expect(key).toEqual(['query_1']) + }) + it('should return a new query key each time', () => { + expect(queryKey()).not.toEqual(queryKey()) + }) +}) diff --git a/packages/query-test-utils/src/__test__/sleep.test.ts b/packages/query-test-utils/src/__test__/sleep.test.ts new file mode 100644 index 00000000000..db523319294 --- /dev/null +++ b/packages/query-test-utils/src/__test__/sleep.test.ts @@ -0,0 +1,11 @@ +import { describe, expect, it } from 'vitest' +import { sleep } from '../sleep' + +describe('sleep', () => { + it('should sleep for the given amount of time', async () => { + const start = Date.now() + await sleep(100) + const end = Date.now() + expect(end - start).toBeGreaterThanOrEqual(100) + }) +}) diff --git a/packages/query-test-utils/src/index.ts b/packages/query-test-utils/src/index.ts new file mode 100644 index 00000000000..5d4b77d3193 --- /dev/null +++ b/packages/query-test-utils/src/index.ts @@ -0,0 +1,2 @@ +export { sleep } from './sleep' +export { queryKey } from './queryKey' diff --git a/packages/query-test-utils/src/queryKey.ts b/packages/query-test-utils/src/queryKey.ts new file mode 100644 index 00000000000..6c2fc035056 --- /dev/null +++ b/packages/query-test-utils/src/queryKey.ts @@ -0,0 +1,6 @@ +let queryKeyCount = 0 + +export const queryKey = (): Array => { + queryKeyCount++ + return [`query_${queryKeyCount}`] +} diff --git a/packages/query-test-utils/src/sleep.ts b/packages/query-test-utils/src/sleep.ts new file mode 100644 index 00000000000..3df1811e993 --- /dev/null +++ b/packages/query-test-utils/src/sleep.ts @@ -0,0 +1,4 @@ +export const sleep = (ms: number): Promise => + new Promise((resolve) => { + setTimeout(resolve, ms) + }) diff --git a/packages/query-test-utils/tsconfig.json b/packages/query-test-utils/tsconfig.json new file mode 100644 index 00000000000..21715ae3ce3 --- /dev/null +++ b/packages/query-test-utils/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist-ts", + "rootDir": ".", + "baseUrl": "." + }, + "include": ["src", "*.config.js", "package.json"] +} diff --git a/packages/query-test-utils/vite.config.ts b/packages/query-test-utils/vite.config.ts new file mode 100644 index 00000000000..730e2b979c7 --- /dev/null +++ b/packages/query-test-utils/vite.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from 'vitest/config' + +import packageJson from './package.json' + +export default defineConfig({ + // fix from https://github.com/vitest-dev/vitest/issues/6992#issuecomment-2509408660 + resolve: { + conditions: ['@tanstack/custom-condition'], + }, + environments: { + ssr: { + resolve: { + conditions: ['@tanstack/custom-condition'], + }, + }, + }, + test: { + name: packageJson.name, + dir: './src', + watch: false, + coverage: { enabled: true, provider: 'istanbul', include: ['src/**/*'] }, + typecheck: { enabled: true }, + restoreMocks: true, + }, +}) diff --git a/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx b/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx index e47a1f75f44..4f85765e02b 100644 --- a/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx +++ b/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx @@ -3,9 +3,9 @@ import * as React from 'react' import { fireEvent, render, waitFor } from '@testing-library/react' import { QueryClient, useQueries, useQuery } from '@tanstack/react-query' import { persistQueryClientSave } from '@tanstack/query-persist-client-core' - +import { queryKey, sleep } from '@tanstack/query-test-utils' import { PersistQueryClientProvider } from '../PersistQueryClientProvider' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { PersistedClient, Persister, diff --git a/packages/react-query-persist-client/src/__tests__/utils.ts b/packages/react-query-persist-client/src/__tests__/utils.ts index 1dd6aa1b48f..825db3f2f21 100644 --- a/packages/react-query-persist-client/src/__tests__/utils.ts +++ b/packages/react-query-persist-client/src/__tests__/utils.ts @@ -4,15 +4,3 @@ import type { QueryClientConfig } from '@tanstack/react-query' export function createQueryClient(config?: QueryClientConfig): QueryClient { return new QueryClient(config) } - -let queryKeyCount = 0 -export function queryKey(): Array { - queryKeyCount++ - return [`query_${queryKeyCount}`] -} - -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} diff --git a/packages/react-query/src/__tests__/HydrationBoundary.test.tsx b/packages/react-query/src/__tests__/HydrationBoundary.test.tsx index f81c028948a..43c9752b105 100644 --- a/packages/react-query/src/__tests__/HydrationBoundary.test.tsx +++ b/packages/react-query/src/__tests__/HydrationBoundary.test.tsx @@ -1,8 +1,8 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' import * as React from 'react' import { render } from '@testing-library/react' - import * as coreModule from '@tanstack/query-core' +import { sleep } from '@tanstack/query-test-utils' import { HydrationBoundary, QueryClient, @@ -10,7 +10,7 @@ import { dehydrate, useQuery, } from '..' -import { createQueryClient, sleep } from './utils' +import { createQueryClient } from './utils' describe('React hydration', () => { let stringifiedState: string diff --git a/packages/react-query/src/__tests__/QueryClientProvider.test.tsx b/packages/react-query/src/__tests__/QueryClientProvider.test.tsx index 53ebf7bafba..ec962ea59ca 100644 --- a/packages/react-query/src/__tests__/QueryClientProvider.test.tsx +++ b/packages/react-query/src/__tests__/QueryClientProvider.test.tsx @@ -1,7 +1,8 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' import { render } from '@testing-library/react' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryClientProvider, useQuery, useQueryClient } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' describe('QueryClientProvider', () => { beforeEach(() => { diff --git a/packages/react-query/src/__tests__/QueryResetErrorBoundary.test.tsx b/packages/react-query/src/__tests__/QueryResetErrorBoundary.test.tsx index eeb19512d9a..2beac0089a7 100644 --- a/packages/react-query/src/__tests__/QueryResetErrorBoundary.test.tsx +++ b/packages/react-query/src/__tests__/QueryResetErrorBoundary.test.tsx @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { fireEvent, waitFor } from '@testing-library/react' import { ErrorBoundary } from 'react-error-boundary' import * as React from 'react' - +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryErrorResetBoundary, @@ -11,7 +11,7 @@ import { useSuspenseQueries, useSuspenseQuery, } from '..' -import { createQueryClient, queryKey, renderWithClient, sleep } from './utils' +import { createQueryClient, renderWithClient } from './utils' describe('QueryErrorResetBoundary', () => { const queryCache = new QueryCache() diff --git a/packages/react-query/src/__tests__/fine-grained-persister.test.tsx b/packages/react-query/src/__tests__/fine-grained-persister.test.tsx index 800e7085594..a50283d809d 100644 --- a/packages/react-query/src/__tests__/fine-grained-persister.test.tsx +++ b/packages/react-query/src/__tests__/fine-grained-persister.test.tsx @@ -5,8 +5,9 @@ import { PERSISTER_KEY_PREFIX, experimental_createPersister, } from '@tanstack/query-persist-client-core' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { useQuery } from '..' -import { createQueryClient, queryKey, renderWithClient, sleep } from './utils' +import { createQueryClient, renderWithClient } from './utils' describe('fine grained persister', () => { beforeEach(() => { diff --git a/packages/react-query/src/__tests__/ssr.test.tsx b/packages/react-query/src/__tests__/ssr.test.tsx index 49d51abcaf6..4352aae4e42 100644 --- a/packages/react-query/src/__tests__/ssr.test.tsx +++ b/packages/react-query/src/__tests__/ssr.test.tsx @@ -1,8 +1,9 @@ import * as React from 'react' import { renderToString } from 'react-dom/server' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { queryKey } from '@tanstack/query-test-utils' import { QueryCache, QueryClientProvider, useInfiniteQuery, useQuery } from '..' -import { createQueryClient, queryKey, setIsServer } from './utils' +import { createQueryClient, setIsServer } from './utils' describe('Server Side Rendering', () => { setIsServer(true) diff --git a/packages/react-query/src/__tests__/suspense.test.tsx b/packages/react-query/src/__tests__/suspense.test.tsx index cc8ae1fe7fa..c00c036c0a2 100644 --- a/packages/react-query/src/__tests__/suspense.test.tsx +++ b/packages/react-query/src/__tests__/suspense.test.tsx @@ -9,8 +9,8 @@ import { it, vi, } from 'vitest' +import { queryKey } from '@tanstack/query-test-utils' import { QueryClient, QueryClientProvider, useSuspenseQuery } from '..' -import { queryKey } from './utils' import type { QueryKey } from '..' function renderWithSuspense(client: QueryClient, ui: React.ReactNode) { diff --git a/packages/react-query/src/__tests__/useInfiniteQuery.test.tsx b/packages/react-query/src/__tests__/useInfiniteQuery.test.tsx index 433bc3fa2c1..34d0151da41 100644 --- a/packages/react-query/src/__tests__/useInfiniteQuery.test.tsx +++ b/packages/react-query/src/__tests__/useInfiniteQuery.test.tsx @@ -5,19 +5,14 @@ import { createRenderStream, useTrackRenders, } from '@testing-library/react-render-stream' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryClientProvider, keepPreviousData, useInfiniteQuery, } from '..' -import { - createQueryClient, - queryKey, - renderWithClient, - setActTimeout, - sleep, -} from './utils' +import { createQueryClient, renderWithClient, setActTimeout } from './utils' import type { InfiniteData, QueryFunctionContext, diff --git a/packages/react-query/src/__tests__/useIsFetching.test.tsx b/packages/react-query/src/__tests__/useIsFetching.test.tsx index bed5506fe99..28ecbdd82c2 100644 --- a/packages/react-query/src/__tests__/useIsFetching.test.tsx +++ b/packages/react-query/src/__tests__/useIsFetching.test.tsx @@ -1,13 +1,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { fireEvent, render } from '@testing-library/react' import * as React from 'react' +import { queryKey } from '@tanstack/query-test-utils' import { QueryCache, useIsFetching, useQuery } from '..' -import { - createQueryClient, - queryKey, - renderWithClient, - setActTimeout, -} from './utils' +import { createQueryClient, renderWithClient, setActTimeout } from './utils' describe('useIsFetching', () => { beforeEach(() => { diff --git a/packages/react-query/src/__tests__/useMutation.test.tsx b/packages/react-query/src/__tests__/useMutation.test.tsx index 20aad96b95b..a1c71aed76b 100644 --- a/packages/react-query/src/__tests__/useMutation.test.tsx +++ b/packages/react-query/src/__tests__/useMutation.test.tsx @@ -4,14 +4,13 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { fireEvent, render } from '@testing-library/react' import * as React from 'react' import { ErrorBoundary } from 'react-error-boundary' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { MutationCache, QueryCache, useMutation } from '..' import { createQueryClient, mockOnlineManagerIsOnline, - queryKey, renderWithClient, setActTimeout, - sleep, } from './utils' import type { UseMutationResult } from '../types' diff --git a/packages/react-query/src/__tests__/useMutationState.test.tsx b/packages/react-query/src/__tests__/useMutationState.test.tsx index 1f88ed6200e..5beb3e08030 100644 --- a/packages/react-query/src/__tests__/useMutationState.test.tsx +++ b/packages/react-query/src/__tests__/useMutationState.test.tsx @@ -1,9 +1,10 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { fireEvent, render } from '@testing-library/react' import * as React from 'react' +import { sleep } from '@tanstack/query-test-utils' import { useIsMutating, useMutationState } from '../useMutationState' import { useMutation } from '../useMutation' -import { createQueryClient, renderWithClient, sleep } from './utils' +import { createQueryClient, renderWithClient } from './utils' describe('useIsMutating', () => { beforeEach(() => { diff --git a/packages/react-query/src/__tests__/usePrefetchInfiniteQuery.test.tsx b/packages/react-query/src/__tests__/usePrefetchInfiniteQuery.test.tsx index 326149991dc..0f9b90a356e 100644 --- a/packages/react-query/src/__tests__/usePrefetchInfiniteQuery.test.tsx +++ b/packages/react-query/src/__tests__/usePrefetchInfiniteQuery.test.tsx @@ -1,13 +1,13 @@ import { describe, expect, it, vi } from 'vitest' import React from 'react' import { fireEvent, waitFor } from '@testing-library/react' - +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, usePrefetchInfiniteQuery, useSuspenseInfiniteQuery, } from '..' -import { createQueryClient, queryKey, renderWithClient, sleep } from './utils' +import { createQueryClient, renderWithClient } from './utils' import type { InfiniteData, UseSuspenseInfiniteQueryOptions } from '..' import type { Mock } from 'vitest' diff --git a/packages/react-query/src/__tests__/usePrefetchQuery.test.tsx b/packages/react-query/src/__tests__/usePrefetchQuery.test.tsx index 894d7c2ac20..59a6641d4e8 100644 --- a/packages/react-query/src/__tests__/usePrefetchQuery.test.tsx +++ b/packages/react-query/src/__tests__/usePrefetchQuery.test.tsx @@ -2,13 +2,14 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import React from 'react' import { fireEvent } from '@testing-library/react' import { ErrorBoundary } from 'react-error-boundary' +import { queryKey } from '@tanstack/query-test-utils' import { QueryCache, usePrefetchQuery, useQueryErrorResetBoundary, useSuspenseQuery, } from '..' -import { createQueryClient, queryKey, renderWithClient } from './utils' +import { createQueryClient, renderWithClient } from './utils' import type { UseSuspenseQueryOptions } from '..' diff --git a/packages/react-query/src/__tests__/useQueries.test.tsx b/packages/react-query/src/__tests__/useQueries.test.tsx index 8bb81fffccd..da0654036aa 100644 --- a/packages/react-query/src/__tests__/useQueries.test.tsx +++ b/packages/react-query/src/__tests__/useQueries.test.tsx @@ -3,8 +3,9 @@ import { fireEvent, render, waitFor } from '@testing-library/react' import * as React from 'react' import { ErrorBoundary } from 'react-error-boundary' import { QueryClient } from '@tanstack/query-core' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, queryOptions, skipToken, useQueries } from '..' -import { createQueryClient, queryKey, renderWithClient, sleep } from './utils' +import { createQueryClient, renderWithClient } from './utils' import type { QueryFunction, QueryKey, diff --git a/packages/react-query/src/__tests__/useQuery.promise.test.tsx b/packages/react-query/src/__tests__/useQuery.promise.test.tsx index 915100d3676..52f05979544 100644 --- a/packages/react-query/src/__tests__/useQuery.promise.test.tsx +++ b/packages/react-query/src/__tests__/useQuery.promise.test.tsx @@ -5,6 +5,7 @@ import { createRenderStream, useTrackRenders, } from '@testing-library/react-render-stream' +import { queryKey } from '@tanstack/query-test-utils' import { QueryClientProvider, QueryErrorResetBoundary, @@ -12,7 +13,7 @@ import { useQuery, } from '..' import { QueryCache } from '../index' -import { createQueryClient, queryKey } from './utils' +import { createQueryClient } from './utils' describe('useQuery().promise', () => { const queryCache = new QueryCache() diff --git a/packages/react-query/src/__tests__/useQuery.test-d.tsx b/packages/react-query/src/__tests__/useQuery.test-d.tsx index 5aa37fc3766..afe00303701 100644 --- a/packages/react-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useQuery.test-d.tsx @@ -1,7 +1,7 @@ import { describe, expectTypeOf, it } from 'vitest' +import { queryKey } from '@tanstack/query-test-utils' import { useQuery } from '../useQuery' import { queryOptions } from '../queryOptions' -import { queryKey } from './utils' import type { OmitKeyof, QueryFunction, UseQueryOptions } from '..' describe('useQuery', () => { diff --git a/packages/react-query/src/__tests__/useQuery.test.tsx b/packages/react-query/src/__tests__/useQuery.test.tsx index 0cc6d639fb1..4241c140e2c 100644 --- a/packages/react-query/src/__tests__/useQuery.test.tsx +++ b/packages/react-query/src/__tests__/useQuery.test.tsx @@ -3,16 +3,15 @@ import { act, fireEvent, render } from '@testing-library/react' import * as React from 'react' import { ErrorBoundary } from 'react-error-boundary' import { dehydrate, hydrate, skipToken } from '@tanstack/query-core' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, keepPreviousData, useQuery } from '..' import { Blink, createQueryClient, mockOnlineManagerIsOnline, mockVisibilityState, - queryKey, renderWithClient, setActTimeout, - sleep, } from './utils' import type { DefinedUseQueryResult, QueryFunction, UseQueryResult } from '..' import type { Mock } from 'vitest' diff --git a/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test.tsx b/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test.tsx index b5d7b4a49df..0735d53a859 100644 --- a/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test.tsx +++ b/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test.tsx @@ -1,7 +1,8 @@ import { describe, expect, it, vi } from 'vitest' import * as React from 'react' +import { queryKey } from '@tanstack/query-test-utils' import { QueryCache, skipToken, useSuspenseInfiniteQuery } from '..' -import { createQueryClient, queryKey, renderWithClient } from './utils' +import { createQueryClient, renderWithClient } from './utils' describe('useSuspenseInfiniteQuery', () => { const queryCache = new QueryCache() diff --git a/packages/react-query/src/__tests__/useSuspenseQueries.test.tsx b/packages/react-query/src/__tests__/useSuspenseQueries.test.tsx index af541cebb6c..e930bf78ee3 100644 --- a/packages/react-query/src/__tests__/useSuspenseQueries.test.tsx +++ b/packages/react-query/src/__tests__/useSuspenseQueries.test.tsx @@ -10,8 +10,9 @@ import { import { act, fireEvent, render, waitFor } from '@testing-library/react' import * as React from 'react' import { ErrorBoundary } from 'react-error-boundary' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { skipToken, useSuspenseQueries, useSuspenseQuery } from '..' -import { createQueryClient, queryKey, renderWithClient, sleep } from './utils' +import { createQueryClient, renderWithClient } from './utils' import type { UseSuspenseQueryOptions } from '..' type NumberQueryOptions = UseSuspenseQueryOptions diff --git a/packages/react-query/src/__tests__/useSuspenseQuery.test.tsx b/packages/react-query/src/__tests__/useSuspenseQuery.test.tsx index 06b8e61d07d..3b2c4c6662e 100644 --- a/packages/react-query/src/__tests__/useSuspenseQuery.test.tsx +++ b/packages/react-query/src/__tests__/useSuspenseQuery.test.tsx @@ -2,6 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { fireEvent, waitFor } from '@testing-library/react' import * as React from 'react' import { ErrorBoundary } from 'react-error-boundary' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryErrorResetBoundary, @@ -10,7 +11,7 @@ import { useSuspenseInfiniteQuery, useSuspenseQuery, } from '..' -import { createQueryClient, queryKey, renderWithClient, sleep } from './utils' +import { createQueryClient, renderWithClient } from './utils' import type { InfiniteData, UseSuspenseInfiniteQueryResult, diff --git a/packages/react-query/src/__tests__/utils.tsx b/packages/react-query/src/__tests__/utils.tsx index d3536bf98dc..516d9caccbf 100644 --- a/packages/react-query/src/__tests__/utils.tsx +++ b/packages/react-query/src/__tests__/utils.tsx @@ -58,18 +58,6 @@ export function mockOnlineManagerIsOnline( return vi.spyOn(onlineManager, 'isOnline').mockReturnValue(value) } -let queryKeyCount = 0 -export function queryKey(): Array { - queryKeyCount++ - return [`query_${queryKeyCount}`] -} - -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} - export function setActTimeout(fn: () => void, ms?: number) { return setTimeout(() => { act(() => { diff --git a/packages/solid-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx b/packages/solid-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx index 164a387d406..44b17449096 100644 --- a/packages/solid-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx +++ b/packages/solid-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx @@ -3,9 +3,9 @@ import { render, screen, waitFor } from '@solidjs/testing-library' import { QueryClient, useQueries, useQuery } from '@tanstack/solid-query' import { persistQueryClientSave } from '@tanstack/query-persist-client-core' import { createEffect, createSignal, onMount } from 'solid-js' - +import { queryKey, sleep } from '@tanstack/query-test-utils' import { PersistQueryClientProvider } from '../PersistQueryClientProvider' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { PersistedClient, Persister, diff --git a/packages/solid-query-persist-client/src/__tests__/utils.ts b/packages/solid-query-persist-client/src/__tests__/utils.ts index dd483203f3e..9e88f0d04c7 100644 --- a/packages/solid-query-persist-client/src/__tests__/utils.ts +++ b/packages/solid-query-persist-client/src/__tests__/utils.ts @@ -4,15 +4,3 @@ import type { QueryClientConfig } from '@tanstack/solid-query' export function createQueryClient(config?: QueryClientConfig): QueryClient { return new QueryClient(config) } - -let queryKeyCount = 0 -export function queryKey(): Array { - queryKeyCount++ - return [`query_${queryKeyCount}`] -} - -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} diff --git a/packages/solid-query/src/__tests__/QueryClientProvider.test.tsx b/packages/solid-query/src/__tests__/QueryClientProvider.test.tsx index 025b6331068..375f48f1e17 100644 --- a/packages/solid-query/src/__tests__/QueryClientProvider.test.tsx +++ b/packages/solid-query/src/__tests__/QueryClientProvider.test.tsx @@ -1,8 +1,9 @@ import { describe, expect, it, vi } from 'vitest' import { render, waitFor } from '@solidjs/testing-library' import { QueryCache } from '@tanstack/query-core' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryClientProvider, useQuery, useQueryClient } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' describe('QueryClientProvider', () => { it('sets a specific cache for all queries to use', async () => { diff --git a/packages/solid-query/src/__tests__/suspense.test.tsx b/packages/solid-query/src/__tests__/suspense.test.tsx index 8a35844618c..806d0941d30 100644 --- a/packages/solid-query/src/__tests__/suspense.test.tsx +++ b/packages/solid-query/src/__tests__/suspense.test.tsx @@ -9,8 +9,9 @@ import { createSignal, on, } from 'solid-js' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryClientProvider, useInfiniteQuery, useQuery } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { InfiniteData, UseInfiniteQueryResult, UseQueryResult } from '..' describe("useQuery's in Suspense mode", () => { diff --git a/packages/solid-query/src/__tests__/transition.test.tsx b/packages/solid-query/src/__tests__/transition.test.tsx index 72f1491d2a3..0ea2b73201e 100644 --- a/packages/solid-query/src/__tests__/transition.test.tsx +++ b/packages/solid-query/src/__tests__/transition.test.tsx @@ -1,8 +1,9 @@ import { describe, expect, it } from 'vitest' import { fireEvent, render, waitFor } from '@solidjs/testing-library' import { Show, Suspense, createSignal, startTransition } from 'solid-js' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryClientProvider, useQuery } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' describe("useQuery's in Suspense mode with transitions", () => { const queryCache = new QueryCache() diff --git a/packages/solid-query/src/__tests__/useInfiniteQuery.test.tsx b/packages/solid-query/src/__tests__/useInfiniteQuery.test.tsx index 6fc070a04be..de94bfaaace 100644 --- a/packages/solid-query/src/__tests__/useInfiniteQuery.test.tsx +++ b/packages/solid-query/src/__tests__/useInfiniteQuery.test.tsx @@ -11,6 +11,7 @@ import { createSignal, on, } from 'solid-js' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryClientProvider, @@ -18,14 +19,7 @@ import { keepPreviousData, useInfiniteQuery, } from '..' -import { - Blink, - createQueryClient, - queryKey, - setActTimeout, - sleep, -} from './utils' - +import { Blink, createQueryClient, setActTimeout } from './utils' import type { InfiniteData, QueryFunctionContext, diff --git a/packages/solid-query/src/__tests__/useIsFetching.test.tsx b/packages/solid-query/src/__tests__/useIsFetching.test.tsx index c72a07784bd..4f45fef5837 100644 --- a/packages/solid-query/src/__tests__/useIsFetching.test.tsx +++ b/packages/solid-query/src/__tests__/useIsFetching.test.tsx @@ -1,8 +1,9 @@ import { describe, expect, it } from 'vitest' import { fireEvent, render, waitFor } from '@solidjs/testing-library' import { Show, createEffect, createRenderEffect, createSignal } from 'solid-js' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryClientProvider, useIsFetching, useQuery } from '..' -import { createQueryClient, queryKey, setActTimeout, sleep } from './utils' +import { createQueryClient, setActTimeout } from './utils' describe('useIsFetching', () => { // See https://github.com/tannerlinsley/react-query/issues/105 diff --git a/packages/solid-query/src/__tests__/useIsMutating.test.tsx b/packages/solid-query/src/__tests__/useIsMutating.test.tsx index 81c29ef5915..5c46c917655 100644 --- a/packages/solid-query/src/__tests__/useIsMutating.test.tsx +++ b/packages/solid-query/src/__tests__/useIsMutating.test.tsx @@ -2,8 +2,9 @@ import { describe, expect, it, vi } from 'vitest' import { fireEvent, render, waitFor } from '@solidjs/testing-library' import { Show, createEffect, createRenderEffect, createSignal } from 'solid-js' import * as QueryCore from '@tanstack/query-core' +import { sleep } from '@tanstack/query-test-utils' import { QueryClientProvider, useIsMutating, useMutation } from '..' -import { createQueryClient, setActTimeout, sleep } from './utils' +import { createQueryClient, setActTimeout } from './utils' describe('useIsMutating', () => { it('should return the number of fetching mutations', async () => { diff --git a/packages/solid-query/src/__tests__/useMutation.test.tsx b/packages/solid-query/src/__tests__/useMutation.test.tsx index 3d0894b0047..2416334c770 100644 --- a/packages/solid-query/src/__tests__/useMutation.test.tsx +++ b/packages/solid-query/src/__tests__/useMutation.test.tsx @@ -6,13 +6,12 @@ import { createSignal, } from 'solid-js' import { fireEvent, render } from '@solidjs/testing-library' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { MutationCache, QueryCache, QueryClientProvider, useMutation } from '..' import { createQueryClient, mockOnlineManagerIsOnline, - queryKey, setActTimeout, - sleep, } from './utils' import type { UseMutationResult } from '../types' diff --git a/packages/solid-query/src/__tests__/useMutationState.test.tsx b/packages/solid-query/src/__tests__/useMutationState.test.tsx index 2ba5cdb6483..54276901adc 100644 --- a/packages/solid-query/src/__tests__/useMutationState.test.tsx +++ b/packages/solid-query/src/__tests__/useMutationState.test.tsx @@ -1,10 +1,11 @@ import { describe, expect, it } from 'vitest' import { fireEvent, render, waitFor } from '@solidjs/testing-library' import { createEffect } from 'solid-js' +import { sleep } from '@tanstack/query-test-utils' import { useMutationState } from '../useMutationState' import { useMutation } from '../useMutation' import { QueryClientProvider } from '../QueryClientProvider' -import { createQueryClient, sleep } from './utils' +import { createQueryClient } from './utils' describe('useMutationState', () => { it('should return variables after calling mutate', async () => { diff --git a/packages/solid-query/src/__tests__/useQueries.test.tsx b/packages/solid-query/src/__tests__/useQueries.test.tsx index 6dca9bac2f3..3b9db9c05a2 100644 --- a/packages/solid-query/src/__tests__/useQueries.test.tsx +++ b/packages/solid-query/src/__tests__/useQueries.test.tsx @@ -2,13 +2,14 @@ import { describe, expect, expectTypeOf, it, vi } from 'vitest' import { fireEvent, render, waitFor } from '@solidjs/testing-library' import * as QueryCore from '@tanstack/query-core' import { createRenderEffect, createSignal } from 'solid-js' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueriesObserver, QueryCache, QueryClientProvider, useQueries, } from '..' -import { createQueryClient, queryKey, sleep } from './utils' +import { createQueryClient } from './utils' import type { QueryFunctionContext, QueryKey } from '@tanstack/query-core' import type { QueryFunction, SolidQueryOptions, UseQueryResult } from '..' diff --git a/packages/solid-query/src/__tests__/useQuery.test.tsx b/packages/solid-query/src/__tests__/useQuery.test.tsx index 0701d4ec8fc..68dfb78a8a1 100644 --- a/packages/solid-query/src/__tests__/useQuery.test.tsx +++ b/packages/solid-query/src/__tests__/useQuery.test.tsx @@ -11,15 +11,14 @@ import { } from 'solid-js' import { fireEvent, render, waitFor } from '@solidjs/testing-library' import { reconcile } from 'solid-js/store' +import { queryKey, sleep } from '@tanstack/query-test-utils' import { QueryCache, QueryClientProvider, keepPreviousData, useQuery } from '..' import { Blink, createQueryClient, mockOnlineManagerIsOnline, mockVisibilityState, - queryKey, setActTimeout, - sleep, } from './utils' import type { DefinedUseQueryResult, diff --git a/packages/solid-query/src/__tests__/utils.tsx b/packages/solid-query/src/__tests__/utils.tsx index 98bd80b57eb..e0abb0399c7 100644 --- a/packages/solid-query/src/__tests__/utils.tsx +++ b/packages/solid-query/src/__tests__/utils.tsx @@ -6,12 +6,6 @@ import type { QueryClientConfig } from '..' import type { ParentProps } from 'solid-js' import type { MockInstance } from 'vitest' -let queryKeyCount = 0 -export function queryKey() { - queryKeyCount++ - return [`query_${queryKeyCount}`] -} - export function Blink( props: { duration: number @@ -48,12 +42,6 @@ export function mockOnlineManagerIsOnline( return vi.spyOn(onlineManager, 'isOnline').mockReturnValue(value) } -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} - export function setActTimeout(fn: () => void, ms?: number) { return setTimeout(() => { fn() diff --git a/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte b/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte index 2a7501660e0..74f09accd8b 100644 --- a/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte +++ b/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte @@ -1,6 +1,6 @@