11import { afterEach , beforeEach , describe , expect , test , vi } from 'vitest'
2- import { waitFor } from '@testing-library/dom'
32import { QueryCache , QueryClient , QueryObserver } from '..'
43import { createQueryClient , queryKey , sleep } from './utils'
54
@@ -8,12 +7,14 @@ describe('queryCache', () => {
87 let queryCache : QueryCache
98
109 beforeEach ( ( ) => {
10+ vi . useFakeTimers ( )
1111 queryClient = createQueryClient ( )
1212 queryCache = queryClient . getQueryCache ( )
1313 } )
1414
1515 afterEach ( ( ) => {
1616 queryClient . clear ( )
17+ vi . useRealTimers ( )
1718 } )
1819
1920 describe ( 'subscribe' , ( ) => {
@@ -23,7 +24,7 @@ describe('queryCache', () => {
2324 const unsubscribe = queryCache . subscribe ( subscriber )
2425 queryClient . setQueryData ( key , 'foo' )
2526 const query = queryCache . find ( { queryKey : key } )
26- await sleep ( 1 )
27+ await vi . advanceTimersByTimeAsync ( 0 )
2728 expect ( subscriber ) . toHaveBeenCalledWith ( { query, type : 'added' } )
2829 unsubscribe ( )
2930 } )
@@ -32,8 +33,11 @@ describe('queryCache', () => {
3233 const key = queryKey ( )
3334 const callback = vi . fn ( )
3435 queryCache . subscribe ( callback )
35- queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data' } )
36- await sleep ( 100 )
36+ queryClient . prefetchQuery ( {
37+ queryKey : key ,
38+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data' ) ,
39+ } )
40+ await vi . advanceTimersByTimeAsync ( 100 )
3741 expect ( callback ) . toHaveBeenCalled ( )
3842 } )
3943
@@ -54,9 +58,7 @@ describe('queryCache', () => {
5458
5559 const unsubScribeObserver = observer . subscribe ( vi . fn ( ) )
5660
57- await waitFor ( ( ) => {
58- expect ( events . length ) . toBe ( 8 )
59- } )
61+ await vi . waitFor ( ( ) => expect ( events . length ) . toBe ( 8 ) )
6062
6163 expect ( events ) . toEqual ( [
6264 'added' , // 1. Query added -> loading
@@ -81,9 +83,12 @@ describe('queryCache', () => {
8183 const key = queryKey ( )
8284 const callback = vi . fn ( )
8385 queryCache . subscribe ( callback )
84- queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data' } )
86+ queryClient . prefetchQuery ( {
87+ queryKey : key ,
88+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data' ) ,
89+ } )
8590 const query = queryCache . find ( { queryKey : key } )
86- await sleep ( 100 )
91+ await vi . advanceTimersByTimeAsync ( 100 )
8792 expect ( callback ) . toHaveBeenCalledWith ( { query, type : 'added' } )
8893 } )
8994
@@ -93,10 +98,10 @@ describe('queryCache', () => {
9398 queryCache . subscribe ( callback )
9499 queryClient . prefetchQuery ( {
95100 queryKey : key ,
96- queryFn : ( ) => 'data' ,
101+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data' ) ,
97102 initialData : 'initial' ,
98103 } )
99- await sleep ( 100 )
104+ await vi . advanceTimersByTimeAsync ( 100 )
100105 expect ( callback ) . toHaveBeenCalled ( )
101106 } )
102107
@@ -120,20 +125,23 @@ describe('queryCache', () => {
120125
121126 const testClient = new QueryClient ( { queryCache : testCache } )
122127
123- await testClient . prefetchQuery ( {
128+ testClient . prefetchQuery ( {
124129 queryKey : [ 'key1' ] ,
125- queryFn : ( ) => 'data1' ,
130+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
126131 } )
132+ await vi . advanceTimersByTimeAsync ( 100 )
127133 expect ( testCache . findAll ( ) . length ) . toBe ( 1 )
128- await testClient . prefetchQuery ( {
134+ testClient . prefetchQuery ( {
129135 queryKey : [ 'key2' ] ,
130- queryFn : ( ) => 'data2' ,
136+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data2' ) ,
131137 } )
138+ await vi . advanceTimersByTimeAsync ( 100 )
132139 expect ( testCache . findAll ( ) . length ) . toBe ( 2 )
133- await testClient . prefetchQuery ( {
140+ testClient . prefetchQuery ( {
134141 queryKey : [ 'key3' ] ,
135- queryFn : ( ) => 'data3' ,
142+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data3' ) ,
136143 } )
144+ await vi . advanceTimersByTimeAsync ( 100 )
137145 expect ( testCache . findAll ( ) . length ) . toBe ( 1 )
138146 expect ( testCache . findAll ( ) [ 0 ] ! . state . data ) . toBe ( 'data3' )
139147
@@ -144,14 +152,22 @@ describe('queryCache', () => {
144152 describe ( 'find' , ( ) => {
145153 test ( 'find should filter correctly' , async ( ) => {
146154 const key = queryKey ( )
147- await queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data1' } )
155+ queryClient . prefetchQuery ( {
156+ queryKey : key ,
157+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
158+ } )
159+ await vi . advanceTimersByTimeAsync ( 100 )
148160 const query = queryCache . find ( { queryKey : key } ) !
149161 expect ( query ) . toBeDefined ( )
150162 } )
151163
152164 test ( 'find should filter correctly with exact set to false' , async ( ) => {
153165 const key = queryKey ( )
154- await queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data1' } )
166+ queryClient . prefetchQuery ( {
167+ queryKey : key ,
168+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
169+ } )
170+ await vi . advanceTimersByTimeAsync ( 100 )
155171 const query = queryCache . find ( { queryKey : key , exact : false } ) !
156172 expect ( query ) . toBeDefined ( )
157173 } )
@@ -162,22 +178,26 @@ describe('queryCache', () => {
162178 const key1 = queryKey ( )
163179 const key2 = queryKey ( )
164180 const keyFetching = queryKey ( )
165- await queryClient . prefetchQuery ( {
181+ queryClient . prefetchQuery ( {
166182 queryKey : key1 ,
167- queryFn : ( ) => 'data1' ,
183+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
168184 } )
169- await queryClient . prefetchQuery ( {
185+ await vi . advanceTimersByTimeAsync ( 100 )
186+ queryClient . prefetchQuery ( {
170187 queryKey : key2 ,
171- queryFn : ( ) => 'data2' ,
188+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data2' ) ,
172189 } )
173- await queryClient . prefetchQuery ( {
190+ await vi . advanceTimersByTimeAsync ( 100 )
191+ queryClient . prefetchQuery ( {
174192 queryKey : [ { a : 'a' , b : 'b' } ] ,
175- queryFn : ( ) => 'data3' ,
193+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data3' ) ,
176194 } )
177- await queryClient . prefetchQuery ( {
195+ await vi . advanceTimersByTimeAsync ( 100 )
196+ queryClient . prefetchQuery ( {
178197 queryKey : [ 'posts' , 1 ] ,
179- queryFn : ( ) => 'data4' ,
198+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data4' ) ,
180199 } )
200+ await vi . advanceTimersByTimeAsync ( 100 )
181201 queryClient . invalidateQueries ( { queryKey : key2 } )
182202 const query1 = queryCache . find ( { queryKey : key1 } ) !
183203 const query2 = queryCache . find ( { queryKey : key2 } ) !
@@ -201,7 +221,11 @@ describe('queryCache', () => {
201221 queryCache . findAll ( { queryKey : key1 , stale : false , type : 'active' } ) ,
202222 ) . toEqual ( [ ] )
203223 expect (
204- queryCache . findAll ( { queryKey : key1 , stale : false , type : 'inactive' } ) ,
224+ queryCache . findAll ( {
225+ queryKey : key1 ,
226+ stale : false ,
227+ type : 'inactive' ,
228+ } ) ,
205229 ) . toEqual ( [ query1 ] )
206230 expect (
207231 queryCache . findAll ( {
@@ -263,17 +287,14 @@ describe('queryCache', () => {
263287 queryCache . findAll ( { queryKey : key2 , fetchStatus : undefined } ) ,
264288 ) . toEqual ( [ query2 ] )
265289
266- const promise = queryClient . prefetchQuery ( {
290+ queryClient . prefetchQuery ( {
267291 queryKey : keyFetching ,
268- queryFn : async ( ) => {
269- await sleep ( 20 )
270- return 'dataFetching'
271- } ,
292+ queryFn : ( ) => sleep ( 20 ) . then ( ( ) => 'dataFetching' ) ,
272293 } )
273294 expect ( queryCache . findAll ( { fetchStatus : 'fetching' } ) ) . toEqual ( [
274295 queryCache . find ( { queryKey : keyFetching } ) ,
275296 ] )
276- await promise
297+ await vi . advanceTimersByTimeAsync ( 20 )
277298 expect ( queryCache . findAll ( { fetchStatus : 'fetching' } ) ) . toEqual ( [ ] )
278299 } )
279300
@@ -300,10 +321,11 @@ describe('queryCache', () => {
300321 const onError = vi . fn ( )
301322 const testCache = new QueryCache ( { onSuccess, onError, onSettled } )
302323 const testClient = createQueryClient ( { queryCache : testCache } )
303- await testClient . prefetchQuery ( {
324+ testClient . prefetchQuery ( {
304325 queryKey : key ,
305- queryFn : ( ) => Promise . reject < unknown > ( 'error' ) ,
326+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => Promise . reject < unknown > ( 'error' ) ) ,
306327 } )
328+ await vi . advanceTimersByTimeAsync ( 100 )
307329 const query = testCache . find ( { queryKey : key } )
308330 expect ( onError ) . toHaveBeenCalledWith ( 'error' , query )
309331 expect ( onError ) . toHaveBeenCalledTimes ( 1 )
@@ -321,10 +343,11 @@ describe('queryCache', () => {
321343 const onError = vi . fn ( )
322344 const testCache = new QueryCache ( { onSuccess, onError, onSettled } )
323345 const testClient = createQueryClient ( { queryCache : testCache } )
324- await testClient . prefetchQuery ( {
346+ testClient . prefetchQuery ( {
325347 queryKey : key ,
326- queryFn : ( ) => Promise . resolve ( { data : 5 } ) ,
348+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => ( { data : 5 } ) ) ,
327349 } )
350+ await vi . advanceTimersByTimeAsync ( 100 )
328351 const query = testCache . find ( { queryKey : key } )
329352 expect ( onSuccess ) . toHaveBeenCalledWith ( { data : 5 } , query )
330353 expect ( onSuccess ) . toHaveBeenCalledTimes ( 1 )
@@ -338,7 +361,11 @@ describe('queryCache', () => {
338361 test ( 'should not try to add a query already added to the cache' , async ( ) => {
339362 const key = queryKey ( )
340363
341- await queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data1' } )
364+ queryClient . prefetchQuery ( {
365+ queryKey : key ,
366+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
367+ } )
368+ await vi . advanceTimersByTimeAsync ( 100 )
342369
343370 const query = queryCache . findAll ( ) [ 0 ] !
344371 const queryClone = Object . assign ( { } , query )
0 commit comments