Skip to content

Commit df93feb

Browse files
committed
test: more gc tests
1 parent f4d8821 commit df93feb

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

packages/vue/test/cache.spec.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)