diff --git a/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte b/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte index 4835489c1e..805c08ab6e 100644 --- a/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte +++ b/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte @@ -9,7 +9,7 @@ queryKey: ['test'], queryFn: async () => { states.current.push('fetching') - await sleep(5) + await sleep(10) states.current.push('fetched') return 'fetched' }, diff --git a/packages/svelte-query-persist-client/tests/FreshData/FreshData.svelte b/packages/svelte-query-persist-client/tests/FreshData/FreshData.svelte index fff8ba820d..eecc82a346 100644 --- a/packages/svelte-query-persist-client/tests/FreshData/FreshData.svelte +++ b/packages/svelte-query-persist-client/tests/FreshData/FreshData.svelte @@ -1,17 +1,23 @@ -
data: {query.data ?? 'undefined'}
+
data: {query.data ?? 'null'}
fetchStatus: {query.fetchStatus}
diff --git a/packages/svelte-query-persist-client/tests/FreshData/Provider.svelte b/packages/svelte-query-persist-client/tests/FreshData/Provider.svelte index 70a9ea483f..793d14b40f 100644 --- a/packages/svelte-query-persist-client/tests/FreshData/Provider.svelte +++ b/packages/svelte-query-persist-client/tests/FreshData/Provider.svelte @@ -9,11 +9,12 @@ queryClient: QueryClient persistOptions: OmitKeyof states: StatelessRef>> + onFetch: () => void } - let { queryClient, persistOptions, states }: Props = $props() + let { queryClient, persistOptions, states, onFetch }: Props = $props() - + diff --git a/packages/svelte-query-persist-client/tests/InitialData/InitialData.svelte b/packages/svelte-query-persist-client/tests/InitialData/InitialData.svelte index a4df9132f8..10d9d4651e 100644 --- a/packages/svelte-query-persist-client/tests/InitialData/InitialData.svelte +++ b/packages/svelte-query-persist-client/tests/InitialData/InitialData.svelte @@ -8,11 +8,7 @@ const query = createQuery(() => ({ queryKey: ['test'], - queryFn: async () => { - await sleep(5) - return 'fetched' - }, - + queryFn: () => sleep(10).then(() => 'fetched'), initialData: 'initial', // make sure that initial data is older than the hydration data // otherwise initialData would be newer and takes precedence diff --git a/packages/svelte-query-persist-client/tests/OnSuccess/OnSuccess.svelte b/packages/svelte-query-persist-client/tests/OnSuccess/OnSuccess.svelte index a6ef7b3214..7d552fa5b3 100644 --- a/packages/svelte-query-persist-client/tests/OnSuccess/OnSuccess.svelte +++ b/packages/svelte-query-persist-client/tests/OnSuccess/OnSuccess.svelte @@ -1,9 +1,10 @@ diff --git a/packages/svelte-query-persist-client/tests/PersistQueryClientProvider.svelte.test.ts b/packages/svelte-query-persist-client/tests/PersistQueryClientProvider.svelte.test.ts index 668a848607..479205f265 100644 --- a/packages/svelte-query-persist-client/tests/PersistQueryClientProvider.svelte.test.ts +++ b/packages/svelte-query-persist-client/tests/PersistQueryClientProvider.svelte.test.ts @@ -1,5 +1,5 @@ -import { render, waitFor } from '@testing-library/svelte' -import { describe, expect, test, vi } from 'vitest' +import { render } from '@testing-library/svelte' +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' import { QueryClient } from '@tanstack/svelte-query' import { persistQueryClientSave } from '@tanstack/query-persist-client-core' import { sleep } from '@tanstack/query-test-utils' @@ -17,6 +17,14 @@ import type { } from '@tanstack/query-persist-client-core' import type { StatusResult } from './utils.svelte.js' +beforeEach(() => { + vi.useFakeTimers() +}) + +afterEach(() => { + vi.useRealTimers() +}) + const createMockPersister = (): Persister => { let storedState: PersistedClient | undefined @@ -25,7 +33,7 @@ const createMockPersister = (): Persister => { storedState = persistClient }, async restoreClient() { - return Promise.resolve(storedState) + return sleep(10).then(() => storedState) }, removeClient() { storedState = undefined @@ -44,7 +52,7 @@ const createMockErrorPersister = ( // noop }, async restoreClient() { - return Promise.reject(error) + return sleep(10).then(() => Promise.reject(error)) }, removeClient, }, @@ -56,14 +64,16 @@ describe('PersistQueryClientProvider', () => { const states = new StatelessRef>>([]) const queryClient = new QueryClient() - await queryClient.prefetchQuery({ + queryClient.prefetchQuery({ queryKey: ['test'], - queryFn: () => Promise.resolve('hydrated'), + queryFn: () => sleep(10).then(() => 'hydrated'), }) + await vi.advanceTimersByTimeAsync(10) const persister = createMockPersister() - await persistQueryClientSave({ queryClient, persister }) + persistQueryClientSave({ queryClient, persister }) + await vi.advanceTimersByTimeAsync(0) queryClient.clear() @@ -75,9 +85,11 @@ describe('PersistQueryClientProvider', () => { }, }) - await waitFor(() => rendered.getByText('fetchStatus: idle')) - await waitFor(() => rendered.getByText('hydrated')) - await waitFor(() => rendered.getByText('fetched')) + expect(rendered.getByText('fetchStatus: idle')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('hydrated')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('fetched')).toBeInTheDocument() expect(states.current).toHaveLength(3) @@ -104,14 +116,16 @@ describe('PersistQueryClientProvider', () => { const states = new StatelessRef>>([]) const queryClient = new QueryClient() - await queryClient.prefetchQuery({ + queryClient.prefetchQuery({ queryKey: ['test'], - queryFn: () => Promise.resolve('hydrated'), + queryFn: () => sleep(10).then(() => 'hydrated'), }) + await vi.advanceTimersByTimeAsync(10) const persister = createMockPersister() - await persistQueryClientSave({ queryClient, persister }) + persistQueryClientSave({ queryClient, persister }) + await vi.advanceTimersByTimeAsync(0) queryClient.clear() @@ -123,9 +137,11 @@ describe('PersistQueryClientProvider', () => { }, }) - await waitFor(() => rendered.getByText('fetchStatus: idle')) - await waitFor(() => rendered.getByText('hydrated')) - await waitFor(() => rendered.getByText('fetched')) + expect(rendered.getByText('fetchStatus: idle')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('hydrated')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('fetched')).toBeInTheDocument() expect(states.current).toHaveLength(3) @@ -152,14 +168,16 @@ describe('PersistQueryClientProvider', () => { const states = new StatelessRef>>([]) const queryClient = new QueryClient() - await queryClient.prefetchQuery({ + queryClient.prefetchQuery({ queryKey: ['test'], - queryFn: () => Promise.resolve('hydrated'), + queryFn: () => sleep(10).then(() => 'hydrated'), }) + await vi.advanceTimersByTimeAsync(10) const persister = createMockPersister() - await persistQueryClientSave({ queryClient, persister }) + persistQueryClientSave({ queryClient, persister }) + await vi.advanceTimersByTimeAsync(0) queryClient.clear() @@ -171,9 +189,11 @@ describe('PersistQueryClientProvider', () => { }, }) - await waitFor(() => rendered.getByText('initial')) - await waitFor(() => rendered.getByText('hydrated')) - await waitFor(() => rendered.getByText('fetched')) + expect(rendered.getByText('initial')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('hydrated')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('fetched')).toBeInTheDocument() expect(states.current).toHaveLength(3) @@ -200,35 +220,42 @@ describe('PersistQueryClientProvider', () => { const states = new StatelessRef>>([]) const queryClient = new QueryClient() - await queryClient.prefetchQuery({ + queryClient.prefetchQuery({ queryKey: ['test'], - queryFn: () => Promise.resolve('hydrated'), + queryFn: () => sleep(10).then(() => 'hydrated'), }) + await vi.advanceTimersByTimeAsync(10) const persister = createMockPersister() - await persistQueryClientSave({ queryClient, persister }) + persistQueryClientSave({ queryClient, persister }) + await vi.advanceTimersByTimeAsync(0) queryClient.clear() + let fetched = false + const rendered = render(FreshData, { props: { queryClient, persistOptions: { persister }, states, + onFetch: () => { + fetched = true + }, }, }) - await waitFor(() => rendered.getByText('data: undefined')) - await waitFor(() => rendered.getByText('data: hydrated')) - await expect( - waitFor(() => rendered.getByText('data: fetched'), { - timeout: 100, - }), - ).rejects.toThrowError() + expect(rendered.getByText('data: null')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('data: hydrated')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('data: hydrated')).toBeInTheDocument() expect(states.current).toHaveLength(2) + expect(fetched).toBe(false) + expect(states.current[0]).toMatchObject({ status: 'pending', fetchStatus: 'idle', @@ -244,14 +271,16 @@ describe('PersistQueryClientProvider', () => { test('should call onSuccess after successful restoring', async () => { const queryClient = new QueryClient() - await queryClient.prefetchQuery({ + queryClient.prefetchQuery({ queryKey: ['test'], - queryFn: () => Promise.resolve('hydrated'), + queryFn: () => sleep(10).then(() => 'hydrated'), }) + await vi.advanceTimersByTimeAsync(10) const persister = createMockPersister() - await persistQueryClientSave({ queryClient, persister }) + persistQueryClientSave({ queryClient, persister }) + await vi.advanceTimersByTimeAsync(0) queryClient.clear() @@ -266,21 +295,25 @@ describe('PersistQueryClientProvider', () => { }) expect(onSuccess).toHaveBeenCalledTimes(0) - await waitFor(() => rendered.getByText('hydrated')) + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('hydrated')).toBeInTheDocument() expect(onSuccess).toHaveBeenCalledTimes(1) - await waitFor(() => rendered.getByText('fetched')) + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('fetched')).toBeInTheDocument() }) test('should await onSuccess after successful restoring', async () => { const queryClient = new QueryClient() - await queryClient.prefetchQuery({ + queryClient.prefetchQuery({ queryKey: ['test'], - queryFn: () => Promise.resolve('hydrated'), + queryFn: () => sleep(10).then(() => 'hydrated'), }) + await vi.advanceTimersByTimeAsync(10) const persister = createMockPersister() - await persistQueryClientSave({ queryClient, persister }) + persistQueryClientSave({ queryClient, persister }) + await vi.advanceTimersByTimeAsync(0) queryClient.clear() @@ -299,8 +332,10 @@ describe('PersistQueryClientProvider', () => { }, }) - await waitFor(() => rendered.getByText('hydrated')) - await waitFor(() => rendered.getByText('fetched')) + await vi.advanceTimersByTimeAsync(15) + expect(rendered.getByText('hydrated')).toBeInTheDocument() + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('fetched')).toBeInTheDocument() expect(states.current).toEqual([ 'onSuccess', @@ -329,7 +364,9 @@ describe('PersistQueryClientProvider', () => { props: { queryClient, persistOptions: { persister }, onError, onSuccess }, }) - await waitFor(() => rendered.getByText('fetched')) + await vi.advanceTimersByTimeAsync(10) + await vi.advanceTimersByTimeAsync(10) + expect(rendered.getByText('fetched')).toBeInTheDocument() expect(removeClient).toHaveBeenCalledTimes(1) expect(onSuccess).toHaveBeenCalledTimes(0) expect(onError).toHaveBeenCalledTimes(1) diff --git a/packages/svelte-query-persist-client/tests/RemoveCache/RemoveCache.svelte b/packages/svelte-query-persist-client/tests/RemoveCache/RemoveCache.svelte index a6ef7b3214..7d552fa5b3 100644 --- a/packages/svelte-query-persist-client/tests/RemoveCache/RemoveCache.svelte +++ b/packages/svelte-query-persist-client/tests/RemoveCache/RemoveCache.svelte @@ -1,9 +1,10 @@ diff --git a/packages/svelte-query-persist-client/tests/RestoreCache/RestoreCache.svelte b/packages/svelte-query-persist-client/tests/RestoreCache/RestoreCache.svelte index 79b9b6add5..4829b37b4b 100644 --- a/packages/svelte-query-persist-client/tests/RestoreCache/RestoreCache.svelte +++ b/packages/svelte-query-persist-client/tests/RestoreCache/RestoreCache.svelte @@ -1,5 +1,6 @@