-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathMySegmentsCacheInLocal.spec.ts
More file actions
54 lines (43 loc) · 2.35 KB
/
Copy pathMySegmentsCacheInLocal.spec.ts
File metadata and controls
54 lines (43 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { MySegmentsCacheInLocal } from '../MySegmentsCacheInLocal';
import { KeyBuilderCS, myLargeSegmentsKeyBuilder } from '../../KeyBuilderCS';
import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock';
import { storages, PREFIX } from './wrapper.mock';
import { IMySegmentsResponse } from '../../../dtos/types';
test.each(storages)('SEGMENT CACHE / in LocalStorage', (storage) => {
const caches = [
new MySegmentsCacheInLocal(loggerMock, new KeyBuilderCS(PREFIX, 'user'), storage),
new MySegmentsCacheInLocal(loggerMock, myLargeSegmentsKeyBuilder(PREFIX, 'user'), storage)
];
caches.forEach(cache => {
cache.clear();
expect(cache.resetSegments({ k: [{ n: 'mocked-segment' }, { n: 'mocked-segment-2' }], cn: 123 })).toBe(true);
expect(cache.getChangeNumber()).toBe(123);
expect(cache.resetSegments({ k: [{ n: 'mocked-segment' }, { n: 'mocked-segment-2' }] })).toBe(false);
expect(cache.getChangeNumber()).toBe(-1);
expect(cache.isInSegment('mocked-segment')).toBe(true);
expect(cache.getRegisteredSegments()).toEqual(['mocked-segment', 'mocked-segment-2']);
expect(cache.getKeysCount()).toBe(1);
});
caches.forEach(cache => {
cache.resetSegments({
added: [],
removed: ['mocked-segment']
} as IMySegmentsResponse);
expect(cache.isInSegment('mocked-segment')).toBe(false);
expect(cache.getRegisteredSegments()).toEqual(['mocked-segment-2']);
expect(cache.getKeysCount()).toBe(1);
});
expect(storage.getItem(PREFIX + '.user.segment.mocked-segment-2')).toBe('1');
expect(storage.getItem(PREFIX + '.user.segment.mocked-segment')).toBe(null);
expect(storage.getItem(PREFIX + '.user.largeSegment.mocked-segment-2')).toBe('1');
expect(storage.getItem(PREFIX + '.user.largeSegment.mocked-segment')).toBe(null);
});
test('SEGMENT CACHE / Special case: localStorage failure should not throw an exception', () => {
const cache = new MySegmentsCacheInLocal(loggerMock, new KeyBuilderCS(PREFIX, 'user2'), localStorage);
// mock localStorage failure
const setItemSpy = jest.spyOn(localStorage, 'setItem').mockImplementation(() => { throw new Error('localStorage failure'); });
setItemSpy.mockClear();
expect(cache.resetSegments({ k: [{ n: 'mocked-segment' }, { n: 'mocked-segment-2' }], cn: 123 })).toBe(false);
expect(setItemSpy).toHaveBeenCalledTimes(1);
setItemSpy.mockRestore();
});