@cnamts/vue-dot
Version:
Implementation of our Design System for the French Health Insurance
176 lines (116 loc) • 5.11 kB
text/typescript
// Disable lint rule because it's clearer to just call new Class
// instead of putting it in a non-used var
import { LocalStorageUtility } from '../';
/** Get the controlItem (not parsed) in localStorage */
function getControlItem() {
return localStorage.getItem('vd-storage-control');
}
const testString = 'test';
/** JSON.stringify({}) */
const normalizedObject = JSON.stringify({});
/** JSON.stringify('test') */
const normalizedString = JSON.stringify(testString);
describe('LocalStorageUtility', () => {
beforeEach(() => localStorage.clear());
it('should set control object when instantiated', () => {
new LocalStorageUtility();
expect(getControlItem()).toBe(normalizedObject);
});
it('should clear all previous objects when instantiated and control item does not exists', () => {
localStorage.setItem('vd-test', normalizedString);
new LocalStorageUtility();
expect(localStorage.getItem('vd-test')).toBe(null);
});
it('should check the control object when already instantiated', () => {
new LocalStorageUtility();
// Call it a second time to simulate a page refresh
new LocalStorageUtility();
expect(getControlItem()).toBe(normalizedObject);
});
it('should clear previous items when bumping version', () => {
new LocalStorageUtility(1);
localStorage.setItem('vd-test', normalizedObject);
expect(localStorage.getItem('vd-test')).toBe(normalizedObject);
// Bump the version
new LocalStorageUtility(2);
expect(localStorage.getItem('vd-test')).toBe(null);
});
it('should set an item', () => {
const localStorageUtility = new LocalStorageUtility();
localStorageUtility.setItem('test', testString);
expect(localStorage.getItem('vd-test')).toBe(normalizedString);
});
it('should get an item', () => {
const localStorageUtility = new LocalStorageUtility();
localStorage.setItem('vd-test', normalizedString);
expect(localStorageUtility.getItem('test')).toBe(testString);
});
it('should should get the length', () => {
const localStorageUtility = new LocalStorageUtility();
localStorage.setItem('vd-test', normalizedString);
expect(localStorageUtility.length).toBe(1);
});
it('should get all data items', () => {
const localStorageUtility = new LocalStorageUtility();
localStorage.setItem('vd-test-1', normalizedString);
localStorage.setItem('vd-test-2', normalizedString);
const expected = [testString, testString];
expect(localStorageUtility.getAll()).toEqual(expected);
});
it('should remove an item', () => {
const localStorageUtility = new LocalStorageUtility();
localStorage.setItem('vd-test-1', normalizedString);
localStorage.setItem('vd-test-2', normalizedString);
localStorageUtility.removeItem('test-1');
// Try to remove a non existing item
localStorageUtility.removeItem('test');
expect(localStorage.getItem('vd-test-1')).toBe(null);
});
it('should clear items', () => {
const localStorageUtility = new LocalStorageUtility();
localStorage.setItem('vd-test-1', normalizedString);
localStorage.setItem('vd-test-2', normalizedString);
localStorageUtility.clear();
expect(localStorage.getItem('vd-test-1')).toBe(null);
expect(localStorage.getItem('vd-test-2')).toBe(null);
// It shouldn't clear the control item
expect(localStorage.getItem('vd-storage-control')).not.toBe(null);
});
it('should get the name of the nth key in the storage', () => {
const localStorageUtility = new LocalStorageUtility();
localStorage.setItem('vd-test-1', normalizedString);
localStorage.setItem('vd-test-2', normalizedString);
expect(localStorageUtility.key(1)).toEqual('vd-test-2');
});
it('should return null when an item does not exists', () => {
const localStorageUtility = new LocalStorageUtility();
expect(localStorageUtility.getItem('test')).toBe(null);
});
it('should work with a custom prefix', () => {
const localStorageUtility = new LocalStorageUtility(undefined, undefined, 'test-');
localStorageUtility.setItem('test', testString);
expect(localStorage.getItem('test-test')).toBe(normalizedString);
});
it('should set an item correctly with expiration', () => {
const localStorageUtility = new LocalStorageUtility(undefined, 10);
localStorageUtility.setItem('test', testString);
expect(localStorageUtility.getItem('test')).toBe(testString);
});
it('should remove all items when expired', () => {
// Negative expiration = expired by default
const localStorageUtility = new LocalStorageUtility(undefined, -1);
// Simulate previously stored item
localStorage.setItem('vd-test-1', normalizedString);
localStorageUtility.setItem('test', testString);
expect(localStorageUtility.getItem('test')).toBe(null);
expect(localStorage.getItem('vd-test-1')).toBe(null);
});
it('should not fail when localStorage is not available', () => {
Object.defineProperty(window, 'localStorage', {
value: undefined
});
const localStorageUtility = new LocalStorageUtility();
expect(localStorageUtility.getItem('test')).toBe(null);
expect(localStorageUtility.setItem('test', 'test')).toBeUndefined();
});
});