| 
1 |  | -import { set, get, STORE_KEY } from '../storage';  | 
 | 1 | +import { set, get, del, STORE_KEY } from '../storage';  | 
 | 2 | + | 
 | 3 | +function clearStorage() {  | 
 | 4 | +  window.localStorage.removeItem(STORE_KEY);  | 
 | 5 | +  window.sessionStorage.removeItem(STORE_KEY);  | 
 | 6 | +}  | 
2 | 7 | 
 
  | 
3 | 8 | describe('storage', () => {  | 
 | 9 | +  beforeEach(() => {  | 
 | 10 | +    clearStorage();  | 
 | 11 | +  });  | 
 | 12 | + | 
 | 13 | +  test('falls back to sessionStorage if localStorage is unavailable', () => {  | 
 | 14 | +    const originalLocalStorage = window.localStorage;  | 
 | 15 | +    // @ts-ignore, Suppress TypeScript error when deleting window.localStorage for test simulation.  | 
 | 16 | +    delete window.localStorage;  | 
 | 17 | +    window.sessionStorage.setItem(STORE_KEY, JSON.stringify({ key1: 'value1' }));  | 
 | 18 | +    expect(get('key1')).toBe('value1');  | 
 | 19 | +    window.localStorage = originalLocalStorage;  | 
 | 20 | +  });  | 
 | 21 | + | 
 | 22 | +  test('throws if neither storage is available', () => {  | 
 | 23 | +    const originalLocalStorage = window.localStorage;  | 
 | 24 | +    const originalSessionStorage = window.sessionStorage;  | 
 | 25 | +    // @ts-ignore, Suppress TypeScript error when deleting window.localStorage for test simulation.  | 
 | 26 | +    delete window.localStorage;  | 
 | 27 | +    // @ts-ignore, Suppress TypeScript error when deleting window.sessionStorage for test simulation.  | 
 | 28 | +    delete window.sessionStorage;  | 
 | 29 | +    expect(() => get('key1')).toThrow('Neither localStorage nor sessionStorage is available');  | 
 | 30 | +    window.localStorage = originalLocalStorage;  | 
 | 31 | +    window.sessionStorage = originalSessionStorage;  | 
 | 32 | +  });  | 
 | 33 | + | 
 | 34 | +  test('getStorageObject throws if storage contains invalid JSON', () => {  | 
 | 35 | +    window.localStorage.setItem(STORE_KEY, '{invalid json}');  | 
 | 36 | +    expect(() => get('key1')).toThrow('Failed to retrieve mt-link-javascript-sdk data from storage');  | 
 | 37 | +  });  | 
 | 38 | + | 
4 | 39 |   test('set, get', () => {  | 
5 | 40 |     expect(get('key1')).toBeUndefined();  | 
6 |  | - | 
7 | 41 |     set('key1', 'value1');  | 
8 |  | - | 
9 | 42 |     expect(get('key1')).toBe('value1');  | 
10 | 43 |   });  | 
11 | 44 | 
 
  | 
12 | 45 |   test('get with invalid existing storage value', () => {  | 
13 | 46 |     window.localStorage.setItem(STORE_KEY, '"abc"');  | 
14 |  | - | 
15 | 47 |     expect(get('key1')).toBeUndefined();  | 
16 |  | - | 
17 | 48 |     window.localStorage.setItem(STORE_KEY, '');  | 
 | 49 | +    expect(get('key1')).toBeUndefined();  | 
 | 50 | +  });  | 
18 | 51 | 
 
  | 
 | 52 | +  test('delete removes key', () => {  | 
 | 53 | +    set('key1', 'value1');  | 
 | 54 | +    expect(get('key1')).toBe('value1');  | 
 | 55 | +    del('key1');  | 
19 | 56 |     expect(get('key1')).toBeUndefined();  | 
20 | 57 |   });  | 
21 | 58 | });  | 
0 commit comments