diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-10-26 19:07:31 +0200 | 
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-11 18:15:27 +0100 | 
| commit | 795b92cc1a168c48c7710ca6e0e1ef5974013d95 (patch) | |
| tree | 8f57204b0ffe7c8acb3203a24292f375377b6369 /src/services/local-storage/local-storage.test.ts | |
| parent | 9aeb82269d7c74c4566b7ca254782a4dfbd69a6e (diff) | |
refactor(hooks): rewrite useLocalStorage hook
* return a tuple instead of an object
* add a validator function as parameter (if the stored value
is manually changed, it is not safe to cast its type)
* add tests
Diffstat (limited to 'src/services/local-storage/local-storage.test.ts')
| -rw-r--r-- | src/services/local-storage/local-storage.test.ts | 92 | 
1 files changed, 92 insertions, 0 deletions
| diff --git a/src/services/local-storage/local-storage.test.ts b/src/services/local-storage/local-storage.test.ts new file mode 100644 index 0000000..df3c646 --- /dev/null +++ b/src/services/local-storage/local-storage.test.ts @@ -0,0 +1,92 @@ +import { describe, expect, it, jest } from '@jest/globals'; +import { LocalStorage } from './local-storage'; + +describe('LocalStorage', () => { +  it('should return an undefined value when the key is not set', () => { +    localStorage.clear(); + +    expect(LocalStorage.get('et')).toBeUndefined(); +  }); + +  it('can set a new key and return its value', () => { +    localStorage.clear(); + +    const key = 'laudantium'; +    const value = 'laborum'; + +    LocalStorage.set(key, value); + +    expect(LocalStorage.get(key)).toBe(value); +  }); + +  it('can update an existing key', () => { +    localStorage.clear(); + +    const key = 'officiis'; +    const value = 'saepe'; + +    LocalStorage.set(key, value); + +    const newValue = 'itaque'; + +    LocalStorage.set(key, newValue); + +    expect(LocalStorage.get(key)).toBe(newValue); +  }); + +  it('can remove a key from the storage', () => { +    localStorage.clear(); + +    const key1 = 'ab'; +    const value1 = 'ipsum'; +    const key2 = 'suscipit'; +    const value2 = 'autem'; + +    LocalStorage.set(key1, value1); +    LocalStorage.set(key2, value2); +    LocalStorage.remove(key1); + +    expect(LocalStorage.get(key1)).toBeUndefined(); +    expect(LocalStorage.get(key2)).toBe(value2); +  }); + +  it('can clear the storage', () => { +    localStorage.clear(); + +    const key1 = 'velit'; +    const value1 = 'rerum'; +    const key2 = 'enim'; +    const value2 = 'consequatur'; + +    LocalStorage.set(key1, value1); +    LocalStorage.set(key2, value2); +    LocalStorage.clear(); + +    expect(LocalStorage.get(key1)).toBeUndefined(); +    expect(LocalStorage.get(key2)).toBeUndefined(); +  }); + +  it('return undefined and log and error when the value is invalid', () => { +    const spy = jest.spyOn(console, 'error'); +    const key = 'dolor'; +    const value = 'possimus'; + +    // The value is not stringified +    localStorage.setItem(key, value); + +    expect(LocalStorage.get(key)).toBeUndefined(); +    expect(spy).toHaveBeenCalled(); +  }); + +  it('does not set invalid value and log the error', () => { +    const spy = jest.spyOn(console, 'error'); +    const key = 'voluptatibus'; +    // eslint-disable-next-line @typescript-eslint/no-magic-numbers +    const value = BigInt(1234567890); + +    LocalStorage.set(key, value); + +    expect(LocalStorage.get(key)).toBeUndefined(); +    expect(spy).toHaveBeenCalled(); +  }); +}); | 
