-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathstorageAdapter.spec.ts
More file actions
65 lines (49 loc) · 1.95 KB
/
Copy pathstorageAdapter.spec.ts
File metadata and controls
65 lines (49 loc) · 1.95 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
55
56
57
58
59
60
61
62
63
64
65
import { storageAdapter } from '../storageAdapter';
import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock';
const syncWrapper = {
getItem: jest.fn(() => JSON.stringify({ key1: 'value1' })),
setItem: jest.fn(),
removeItem: jest.fn(),
};
const asyncWrapper = {
getItem: jest.fn(() => Promise.resolve(JSON.stringify({ key1: 'value1' }))),
setItem: jest.fn(() => Promise.resolve()),
removeItem: jest.fn(() => Promise.resolve()),
};
test.each([
[syncWrapper],
[asyncWrapper],
])('storageAdapter', async (wrapper) => {
const storage = storageAdapter(loggerMock, 'prefix', wrapper);
expect(storage.length).toBe(0);
// Load cache from storage wrapper
await storage.load();
expect(wrapper.getItem).toHaveBeenCalledWith('prefix');
expect(storage.length).toBe(1);
expect(storage.key(0)).toBe('key1');
expect(storage.getItem('key1')).toBe('value1');
// Set item
storage.setItem('key2', 'value2');
expect(storage.getItem('key2')).toBe('value2');
expect(storage.length).toBe(2);
// Remove item
storage.removeItem('key1');
expect(storage.getItem('key1')).toBe(null);
expect(storage.length).toBe(1);
// Until a till key is set/removed, changes should not be saved/persisted
await storage.whenSaved();
expect(wrapper.setItem).not.toHaveBeenCalled();
// When setting a till key, changes should be saved/persisted immediately
storage.setItem('.till', '1');
expect(storage.length).toBe(2);
expect(storage.key(0)).toBe('key2');
expect(storage.key(1)).toBe('.till');
await storage.whenSaved();
expect(wrapper.setItem).toHaveBeenCalledWith('prefix', JSON.stringify({ key2: 'value2', '.till': '1' }));
// When removing a till key, changes should be saved/persisted immediately
storage.removeItem('.till');
await storage.whenSaved();
expect(wrapper.setItem).toHaveBeenCalledWith('prefix', JSON.stringify({ key2: 'value2' }));
await storage.whenSaved();
expect(wrapper.setItem).toHaveBeenCalledTimes(2);
});