@@ -170,4 +170,57 @@ describe('cache', () => {
170170 expect ( items ) . toHaveLength ( 1 )
171171 expect ( items [ 0 ] ) . toEqual ( { id : 1 , label : 'Meow' } )
172172 } )
173+
174+ it ( 'should garbage collect an item that is not referenced by any query' , ( ) => {
175+ const cache = createCache ( { getStore } )
176+ cache . writeItem ( { model : mockModel , key : 1 , item : mockItem } )
177+
178+ const item = cache . readItem ( { model : mockModel , key : 1 } )
179+ expect ( item . $meta . queries . size ) . toBe ( 0 )
180+
181+ cache . garbageCollectItem ( { model : mockModel , item } )
182+
183+ const item2 = cache . readItem ( { model : mockModel , key : 1 } )
184+ expect ( item2 ) . toBeUndefined ( )
185+ } )
186+
187+ it ( 'should not garbage collect an item that is referenced by a query' , ( ) => {
188+ const cache = createCache ( { getStore } )
189+ cache . writeItem ( { model : mockModel , key : 1 , item : mockItem } )
190+
191+ const item = cache . readItem ( { model : mockModel , key : 1 } )
192+ item . $meta . queries . add ( 'testQuery' )
193+
194+ cache . garbageCollectItem ( { model : mockModel , item } )
195+
196+ const item2 = cache . readItem ( { model : mockModel , key : 1 } )
197+ expect ( item2 ) . toBeDefined ( )
198+ } )
199+
200+ it ( 'should garbage collect all items that are not referenced by any query' , ( ) => {
201+ const mockStore = {
202+ $hooks : createHooks ( ) ,
203+ $models : [ mockModel ] ,
204+ } as unknown as VueStore
205+ const cache = createCache ( { getStore : ( ) => mockStore } )
206+ cache . writeItem ( { model : mockModel , key : 1 , item : { id : 1 , name : 'item 1' } } )
207+ cache . writeItem ( { model : mockModel , key : 2 , item : { id : 2 , name : 'item 2' } } )
208+ cache . writeItem ( { model : mockModel , key : 3 , item : { id : 3 , name : 'item 3' } } )
209+
210+ // Reference item 2
211+ const item2 = cache . readItem ( { model : mockModel , key : 2 } ) !
212+ item2 . $meta . queries . add ( 'testQuery' )
213+
214+ let state = cache . getState ( ) as any
215+ expect ( state . TestModel [ 1 ] ) . toBeDefined ( )
216+ expect ( state . TestModel [ 2 ] ) . toBeDefined ( )
217+ expect ( state . TestModel [ 3 ] ) . toBeDefined ( )
218+
219+ cache . garbageCollect ( )
220+
221+ state = cache . getState ( ) as any
222+ expect ( state . TestModel [ 1 ] ) . toBeUndefined ( )
223+ expect ( state . TestModel [ 2 ] ) . toBeDefined ( )
224+ expect ( state . TestModel [ 3 ] ) . toBeUndefined ( )
225+ } )
173226} )
0 commit comments