Skip to content

Commit ff165ed

Browse files
test(local-storage-store): adds test coverage
1 parent 1f45797 commit ff165ed

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
import {LocalStorageStore} from "./local-storage.store";
2+
3+
describe('Local Storage Store', () => {
4+
5+
let store: LocalStorageStore;
6+
7+
beforeEach(() => {
8+
store = new LocalStorageStore();
9+
globalThis.localStorage.clear();
10+
});
11+
12+
it('should return the size of the store', () => {
13+
const key0 = 'key-0';
14+
const record0 = 'value';
15+
16+
const key1 = 'key-1';
17+
const record1 = 'value-1';
18+
19+
store.setItem(key0, record0);
20+
store.setItem(key1, record1);
21+
22+
const size = store.length;
23+
24+
expect(size).toEqual(2);
25+
});
26+
27+
it('should store a record', () => {
28+
const key = 'key';
29+
const record = 'value';
30+
store.setItem(key, record);
31+
expect(store.length).toBe(1);
32+
});
33+
34+
it('should return a stored record', () => {
35+
const key = 'key';
36+
const record = 'value';
37+
store.setItem(key, record);
38+
39+
const returnedRecord = store.getItem(key);
40+
expect(returnedRecord).toEqual(record);
41+
});
42+
43+
it('should respect the integrity of individual records', () => {
44+
const key1 = 'key';
45+
const record1 = 'value';
46+
47+
const key2 = 'key-2';
48+
const record2 = 'value-2';
49+
50+
store.setItem(key1, record1);
51+
store.setItem(key2, record2);
52+
53+
const returnedRecord1 = store.getItem(key1);
54+
const returnedRecord2 = store.getItem(key2);
55+
56+
expect(returnedRecord1).toEqual(record1);
57+
expect(returnedRecord2).toEqual(record2);
58+
});
59+
60+
it('should return null if a record doesnt exist', () => {
61+
const key = 'key';
62+
const returnedRecord = store.getItem(key);
63+
expect(returnedRecord).toBeNull();
64+
});
65+
66+
it('should remove records', () => {
67+
const key = 'key';
68+
const record = 'value';
69+
store.setItem(key, record);
70+
71+
expect(store.length).toBe(1);
72+
73+
store.removeItem(key);
74+
expect(store.length).toBe(0);
75+
});
76+
77+
it('should return null for removed records', () => {
78+
const key = 'key';
79+
const record = 'value';
80+
store.setItem(key, record);
81+
82+
expect(store.length).toBe(1);
83+
84+
store.removeItem(key);
85+
const returnedRecord = store.getItem(key);
86+
expect(returnedRecord).toBeNull();
87+
});
88+
89+
it('should return the zero indexed key for index 1', () => {
90+
const key0 = 'key-0';
91+
const record0 = 'value-0';
92+
93+
const key1 = 'key-1';
94+
const record1 = 'value-1';
95+
96+
store.setItem(key0, record0);
97+
store.setItem(key1, record1);
98+
99+
const returnedKey = store.key(1);
100+
expect(returnedKey).toEqual(key1);
101+
102+
});
103+
104+
it('should remove all keys', () => {
105+
const key0 = 'key-0';
106+
const record0 = 'value-0';
107+
108+
const key1 = 'key-1';
109+
const record1 = 'value-1';
110+
111+
store.setItem(key0, record0);
112+
store.setItem(key1, record1);
113+
114+
store.clear();
115+
const size = store.length;
116+
117+
expect(size).toEqual(0);
118+
});
119+
120+
it('should fall back to an in-memory store if localstorage isnt available', () => {
121+
// Removes localStorage
122+
const localStorage = globalThis.localStorage;
123+
Object.defineProperty(window, 'localStorage', {value: null});
124+
125+
const store = new LocalStorageStore();
126+
127+
const key = 'key';
128+
const record = 'value';
129+
130+
store.setItem(key, record)
131+
const returnedValue = store.getItem(key);
132+
133+
expect(returnedValue).toEqual(record);
134+
135+
// Restore localStorage
136+
Object.defineProperty(window, 'localStorage', {value: localStorage});
137+
})
138+
139+
})

0 commit comments

Comments
 (0)