From 7080f924ec790a9f2ed5c6134ac7a25403b7a4bd Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Wed, 3 Jun 2026 23:35:04 +0900 Subject: [PATCH] test(query-persist-client-core/retryStrategies): add tests for 'removeOldestQuery' removing the oldest query --- .../src/__tests__/retryStrategies.test.ts | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 packages/query-persist-client-core/src/__tests__/retryStrategies.test.ts diff --git a/packages/query-persist-client-core/src/__tests__/retryStrategies.test.ts b/packages/query-persist-client-core/src/__tests__/retryStrategies.test.ts new file mode 100644 index 00000000000..5ffcdd8ecbf --- /dev/null +++ b/packages/query-persist-client-core/src/__tests__/retryStrategies.test.ts @@ -0,0 +1,76 @@ +import { afterEach, beforeEach, describe, expect, it } from 'vitest' +import { QueryClient, dehydrate } from '@tanstack/query-core' +import { removeOldestQuery } from '../retryStrategies' +import type { PersistedClient } from '../persist' + +type PersistedQuery = PersistedClient['clientState']['queries'][number] + +describe('removeOldestQuery', () => { + let queryClient: QueryClient + + beforeEach(() => { + queryClient = new QueryClient() + }) + + afterEach(() => { + queryClient.clear() + }) + + function createQuery( + queryHash: string, + dataUpdatedAt: number, + ): PersistedQuery { + queryClient.setQueryData([queryHash], 'data') + const query = dehydrate(queryClient).queries.find( + (dehydratedQuery) => dehydratedQuery.queryHash === `["${queryHash}"]`, + )! + return { ...query, state: { ...query.state, dataUpdatedAt } } + } + + function createPersistedClient( + queries: Array, + mutations: PersistedClient['clientState']['mutations'] = [], + ): PersistedClient { + return { + timestamp: 0, + buster: '', + clientState: { queries, mutations }, + } + } + + it('should remove the query with the oldest dataUpdatedAt', () => { + const persistedClient = createPersistedClient([ + createQuery('a', 30), + createQuery('b', 10), + createQuery('c', 20), + ]) + + const result = removeOldestQuery({ + persistedClient, + error: new Error('full'), + errorCount: 1, + }) + + expect(result?.clientState.queries.map((query) => query.queryKey)).toEqual([ + ['a'], + ['c'], + ]) + }) + + it('should remove only a single query when multiple share the oldest dataUpdatedAt', () => { + const persistedClient = createPersistedClient([ + createQuery('a', 10), + createQuery('b', 10), + ]) + + const result = removeOldestQuery({ + persistedClient, + error: new Error('full'), + errorCount: 1, + }) + + expect(result?.clientState.queries.map((query) => query.queryKey)).toEqual([ + ['b'], + ]) + }) +})