@@ -6,174 +6,176 @@ import {
66} from '../persist'
77import { createMockPersister , createSpyPersister } from './utils'
88
9- describe ( 'persistQueryClientSubscribe' , ( ) => {
10- it ( 'should persist mutations' , async ( ) => {
11- const queryClient = new QueryClient ( )
9+ describe ( 'persist' , ( ) => {
10+ let queryClient : QueryClient
1211
13- const persister = createMockPersister ( )
12+ beforeEach ( ( ) => {
13+ queryClient = new QueryClient ( )
14+ } )
1415
15- const unsubscribe = persistQueryClientSubscribe ( {
16- queryClient,
17- persister,
18- dehydrateOptions : { shouldDehydrateMutation : ( ) => true } ,
19- } )
16+ afterEach ( ( ) => {
17+ queryClient . clear ( )
18+ } )
2019
21- queryClient . getMutationCache ( ) . build ( queryClient , {
22- mutationFn : ( text : string ) => Promise . resolve ( text ) ,
23- } )
20+ describe ( 'persistQueryClientSubscribe' , ( ) => {
21+ it ( 'should persist mutations' , async ( ) => {
22+ const persister = createMockPersister ( )
2423
25- const result = await persister . restoreClient ( )
24+ const unsubscribe = persistQueryClientSubscribe ( {
25+ queryClient,
26+ persister,
27+ dehydrateOptions : { shouldDehydrateMutation : ( ) => true } ,
28+ } )
2629
27- expect ( result ?. clientState . mutations ) . toHaveLength ( 1 )
30+ queryClient . getMutationCache ( ) . build ( queryClient , {
31+ mutationFn : ( text : string ) => Promise . resolve ( text ) ,
32+ } )
33+
34+ const result = await persister . restoreClient ( )
35+
36+ expect ( result ?. clientState . mutations ) . toHaveLength ( 1 )
2837
29- unsubscribe ( )
38+ unsubscribe ( )
39+ } )
3040 } )
31- } )
3241
33- describe ( 'persistQueryClientSave' , ( ) => {
34- it ( 'should not be triggered on observer type events' , ( ) => {
35- const queryClient = new QueryClient ( )
42+ describe ( 'persistQueryClientSave' , ( ) => {
43+ it ( 'should not be triggered on observer type events' , ( ) => {
44+ const persister = createSpyPersister ( )
3645
37- const persister = createSpyPersister ( )
46+ const unsubscribe = persistQueryClientSubscribe ( {
47+ queryClient,
48+ persister,
49+ } )
3850
39- const unsubscribe = persistQueryClientSubscribe ( {
40- queryClient,
41- persister,
51+ const queryKey = [ 'test' ]
52+ const queryFn = vi . fn ( ) . mockReturnValue ( 1 )
53+ const observer = new QueriesObserver ( queryClient , [ { queryKey, queryFn } ] )
54+ const unsubscribeObserver = observer . subscribe ( vi . fn ( ) )
55+ observer
56+ . getObservers ( ) [ 0 ]
57+ ?. setOptions ( { queryKey, refetchOnWindowFocus : false } )
58+ unsubscribeObserver ( )
59+
60+ queryClient . setQueryData ( queryKey , 2 )
61+
62+ // persistClient should be called 3 times:
63+ // 1. When query is added
64+ // 2. When queryFn is resolved
65+ // 3. When setQueryData is called
66+ // All events fired by manipulating observers are ignored
67+ expect ( persister . persistClient ) . toHaveBeenCalledTimes ( 3 )
68+
69+ unsubscribe ( )
4270 } )
43-
44- const queryKey = [ 'test' ]
45- const queryFn = vi . fn ( ) . mockReturnValue ( 1 )
46- const observer = new QueriesObserver ( queryClient , [ { queryKey, queryFn } ] )
47- const unsubscribeObserver = observer . subscribe ( vi . fn ( ) )
48- observer
49- . getObservers ( ) [ 0 ]
50- ?. setOptions ( { queryKey, refetchOnWindowFocus : false } )
51- unsubscribeObserver ( )
52-
53- queryClient . setQueryData ( queryKey , 2 )
54-
55- // persistClient should be called 3 times:
56- // 1. When query is added
57- // 2. When queryFn is resolved
58- // 3. When setQueryData is called
59- // All events fired by manipulating observers are ignored
60- expect ( persister . persistClient ) . toHaveBeenCalledTimes ( 3 )
61-
62- unsubscribe ( )
6371 } )
64- } )
6572
66- describe ( 'persistQueryClientRestore' , ( ) => {
67- let queryClient : QueryClient
68- let persister : ReturnType < typeof createSpyPersister >
73+ describe ( 'persistQueryClientRestore' , ( ) => {
74+ let persister : ReturnType < typeof createSpyPersister >
6975
70- beforeEach ( ( ) => {
71- queryClient = new QueryClient ( )
72- persister = createSpyPersister ( )
73- } )
76+ beforeEach ( ( ) => {
77+ persister = createSpyPersister ( )
78+ } )
7479
75- afterEach ( ( ) => {
76- queryClient . clear ( )
77- } )
80+ it ( 'should rethrow exceptions in `restoreClient`' , async ( ) => {
81+ const consoleMock = vi
82+ . spyOn ( console , 'error' )
83+ . mockImplementation ( ( ) => undefined )
7884
79- it ( 'should rethrow exceptions in `restoreClient`' , async ( ) => {
80- const consoleMock = vi
81- . spyOn ( console , 'error' )
82- . mockImplementation ( ( ) => undefined )
85+ const consoleWarn = vi
86+ . spyOn ( console , 'warn' )
87+ . mockImplementation ( ( ) => undefined )
8388
84- const consoleWarn = vi
85- . spyOn ( console , 'warn' )
86- . mockImplementation ( ( ) => undefined )
89+ const restoreError = new Error ( 'Error restoring client' )
8790
88- const restoreError = new Error ( 'Error restoring client' )
91+ persister . restoreClient = ( ) => Promise . reject ( restoreError )
8992
90- persister . restoreClient = ( ) => Promise . reject ( restoreError )
93+ await expect (
94+ persistQueryClientRestore ( {
95+ queryClient,
96+ persister,
97+ } ) ,
98+ ) . rejects . toBe ( restoreError )
9199
92- await expect (
93- persistQueryClientRestore ( {
94- queryClient,
95- persister,
96- } ) ,
97- ) . rejects . toBe ( restoreError )
100+ expect ( consoleMock ) . toHaveBeenCalledTimes ( 1 )
101+ expect ( consoleWarn ) . toHaveBeenCalledTimes ( 1 )
102+ expect ( consoleMock ) . toHaveBeenNthCalledWith ( 1 , restoreError )
98103
99- expect ( consoleMock ) . toHaveBeenCalledTimes ( 1 )
100- expect ( consoleWarn ) . toHaveBeenCalledTimes ( 1 )
101- expect ( consoleMock ) . toHaveBeenNthCalledWith ( 1 , restoreError )
104+ consoleMock . mockRestore ( )
105+ consoleWarn . mockRestore ( )
106+ } )
102107
103- consoleMock . mockRestore ( )
104- consoleWarn . mockRestore ( )
105- } )
108+ it ( 'should rethrow exceptions in `removeClient` before `restoreClient`' , async ( ) => {
109+ const consoleMock = vi
110+ . spyOn ( console , 'error' )
111+ . mockImplementation ( ( ) => undefined )
106112
107- it ( 'should rethrow exceptions in `removeClient` before `restoreClient`' , async ( ) => {
108- const consoleMock = vi
109- . spyOn ( console , 'error' )
110- . mockImplementation ( ( ) => undefined )
113+ const consoleWarn = vi
114+ . spyOn ( console , 'warn' )
115+ . mockImplementation ( ( ) => undefined )
111116
112- const consoleWarn = vi
113- . spyOn ( console , 'warn' )
114- . mockImplementation ( ( ) => undefined )
117+ const restoreError = new Error ( 'Error restoring client' )
118+ const removeError = new Error ( 'Error removing client' )
115119
116- const restoreError = new Error ( 'Error restoring client' )
117- const removeError = new Error ( 'Error removing client' )
120+ persister . restoreClient = ( ) => Promise . reject ( restoreError )
121+ persister . removeClient = ( ) => Promise . reject ( removeError )
118122
119- persister . restoreClient = ( ) => Promise . reject ( restoreError )
120- persister . removeClient = ( ) => Promise . reject ( removeError )
123+ await expect (
124+ persistQueryClientRestore ( {
125+ queryClient,
126+ persister,
127+ } ) ,
128+ ) . rejects . toBe ( removeError )
121129
122- await expect (
123- persistQueryClientRestore ( {
124- queryClient,
125- persister,
126- } ) ,
127- ) . rejects . toBe ( removeError )
130+ expect ( consoleMock ) . toHaveBeenCalledTimes ( 1 )
131+ expect ( consoleWarn ) . toHaveBeenCalledTimes ( 1 )
132+ expect ( consoleMock ) . toHaveBeenNthCalledWith ( 1 , restoreError )
128133
129- expect ( consoleMock ) . toHaveBeenCalledTimes ( 1 )
130- expect ( consoleWarn ) . toHaveBeenCalledTimes ( 1 )
131- expect ( consoleMock ) . toHaveBeenNthCalledWith ( 1 , restoreError )
134+ consoleMock . mockRestore ( )
135+ consoleWarn . mockRestore ( )
136+ } )
132137
133- consoleMock . mockRestore ( )
134- consoleWarn . mockRestore ( )
135- } )
138+ it ( 'should rethrow error in `removeClient`' , async ( ) => {
139+ const removeError = new Error ( 'Error removing client' )
140+
141+ persister . removeClient = ( ) => Promise . reject ( removeError )
142+ persister . restoreClient = ( ) => {
143+ return Promise . resolve ( {
144+ buster : 'random-buster' ,
145+ clientState : {
146+ mutations : [ ] ,
147+ queries : [ ] ,
148+ } ,
149+ timestamp : new Date ( ) . getTime ( ) ,
150+ } )
151+ }
152+
153+ await expect (
154+ persistQueryClientRestore ( {
155+ queryClient,
156+ persister,
157+ } ) ,
158+ ) . rejects . toBe ( removeError )
159+ } )
136160
137- it ( 'should rethrow error in `removeClient`' , async ( ) => {
138- const removeError = new Error ( 'Error removing client' )
139-
140- persister . removeClient = ( ) => Promise . reject ( removeError )
141- persister . restoreClient = ( ) => {
142- return Promise . resolve ( {
143- buster : 'random-buster' ,
144- clientState : {
145- mutations : [ ] ,
146- queries : [ ] ,
147- } ,
148- timestamp : new Date ( ) . getTime ( ) ,
149- } )
150- }
161+ it ( 'should hydrate the query client when the persisted cache is valid' , async ( ) => {
162+ const sourceClient = new QueryClient ( )
163+ sourceClient . setQueryData ( [ 'key' ] , 'data' )
151164
152- await expect (
153- persistQueryClientRestore ( {
165+ persister . restoreClient = ( ) =>
166+ Promise . resolve ( {
167+ buster : '' ,
168+ clientState : dehydrate ( sourceClient ) ,
169+ timestamp : Date . now ( ) ,
170+ } )
171+
172+ await persistQueryClientRestore ( {
154173 queryClient,
155174 persister,
156- } ) ,
157- ) . rejects . toBe ( removeError )
158- } )
159-
160- it ( 'should hydrate the query client when the persisted cache is valid' , async ( ) => {
161- const sourceClient = new QueryClient ( )
162- sourceClient . setQueryData ( [ 'key' ] , 'data' )
163-
164- persister . restoreClient = ( ) =>
165- Promise . resolve ( {
166- buster : '' ,
167- clientState : dehydrate ( sourceClient ) ,
168- timestamp : Date . now ( ) ,
169175 } )
170176
171- await persistQueryClientRestore ( {
172- queryClient,
173- persister,
177+ expect ( persister . removeClient ) . not . toHaveBeenCalled ( )
178+ expect ( queryClient . getQueryData ( [ 'key' ] ) ) . toBe ( 'data' )
174179 } )
175-
176- expect ( persister . removeClient ) . not . toHaveBeenCalled ( )
177- expect ( queryClient . getQueryData ( [ 'key' ] ) ) . toBe ( 'data' )
178180 } )
179181} )
0 commit comments