You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.3 KiB
78 lines
2.3 KiB
import { createLimitedCache } from '../cache'; |
|
|
|
describe('createCache', () => { |
|
test('returns expected methods', () => { |
|
const actual = createLimitedCache(); |
|
expect(actual).toBeTypeOf('object'); |
|
expect(actual).toHaveProperty('get'); |
|
expect(actual).toHaveProperty('has'); |
|
expect(actual).toHaveProperty('delete'); |
|
expect(actual).toHaveProperty('set'); |
|
}); |
|
|
|
test('caches values provided to it', () => { |
|
const cache = createLimitedCache(); |
|
cache.set('test', 'result'); |
|
expect(cache.get('test')).toBe('result'); |
|
}); |
|
|
|
test('has returns expected values', () => { |
|
const cache = createLimitedCache(); |
|
cache.set('test', 'result'); |
|
expect(cache.has('test')).toBeTruthy(); |
|
expect(cache.has('not found')).toBeFalsy(); |
|
}); |
|
|
|
test('updates a value if keys are the same', () => { |
|
const cache = createLimitedCache(); |
|
cache.set('test1', 1); |
|
cache.set('test1', 2); |
|
expect(cache.get('test1')).toBe(2); |
|
}); |
|
|
|
test('delete removes an item', () => { |
|
const cache = createLimitedCache(); |
|
cache.set('test', 'result'); |
|
expect(cache.has('test')).toBeTruthy(); |
|
cache.delete('test'); |
|
expect(cache.has('test')).toBeFalsy(); |
|
expect(cache.get('test')).toBeUndefined(); |
|
}); |
|
|
|
test('removes oldest item cached if it exceeds a set size', () => { |
|
const cache = createLimitedCache({ maxSize: 1 }); |
|
cache.set('test1', 1); |
|
cache.set('test2', 2); |
|
expect(cache.get('test1')).toBeUndefined(); |
|
expect(cache.get('test2')).toBe(2); |
|
}); |
|
|
|
test('retrieving a value bumps up last access', () => { |
|
const cache = createLimitedCache({ maxSize: 2 }); |
|
cache.set('test1', 1); |
|
cache.set('test2', 2); |
|
expect(cache.get('test1')).toBe(1); |
|
cache.set('test3', 3); |
|
expect(cache.get('test1')).toBe(1); |
|
expect(cache.get('test2')).toBeUndefined(); |
|
expect(cache.get('test3')).toBe(3); |
|
}); |
|
|
|
test('logs when cache is added to and removed', () => { |
|
const log = vi.fn(); |
|
const cache = createLimitedCache({ maxSize: 1, log }); |
|
cache.set('test1', 1); |
|
expect(log).toHaveBeenLastCalledWith( |
|
'Added %s to cache, now size %d', |
|
'test1', |
|
1, |
|
); |
|
cache.set('test2', 1); |
|
expect(log).toHaveBeenLastCalledWith( |
|
'Added %s and deleted %s from cache, now size %d', |
|
'test2', |
|
'test1', |
|
1, |
|
); |
|
}); |
|
});
|
|
|