import 'reflect-metadata'; jest.mock('angular-svg-icon', () => ({})); jest.mock('angular-svg-round-progressbar/src/index', () => ({})); jest.mock('mixpanel-browser/src/loader-module', () => ({})); import LocalStorageService from './local-storage.service'; import { ErrorLoggingService, } from './../index'; const initStorageService = ( errorLoggingService?: ErrorLoggingService, ) => { return new LocalStorageService( errorLoggingService, ); }; import * as mock from '../../../mocks/index'; const initLocalStorageMock = mock.localStorage(jest); describe('get', () => { // tslint:disable-next-line test('It calls getItem on the localStorage', () => { const storageService = initStorageService(); const data = {}; const localStorageMock = initLocalStorageMock(); localStorageMock.getItem = jest.fn() .mockReturnValue('{ "test": 1 }'); window.localStorage = localStorageMock; storageService.get('test'); expect(window.localStorage.getItem) .toHaveBeenCalledWith( 'test', ); }); // tslint:disable-next-line test('It returns the JSON parsed response from getItem on the localStorage', () => { const storageService = initStorageService(); const data = {}; const localStorageMock = initLocalStorageMock(); localStorageMock.getItem = jest.fn() .mockReturnValue('{"test":1}'); window.localStorage = localStorageMock; const response = storageService.get('test'); expect(response) .toEqual({ test: 1, }); }); // tslint:disable-next-line test('It returns null if getItem does not find a record', () => { const storageService = initStorageService(); const data = {}; const localStorageMock = initLocalStorageMock(); localStorageMock.getItem = jest.fn() .mockReturnValue(null); window.localStorage = localStorageMock; const response = storageService.get('test'); expect(response).toBeNull(); }); // tslint:disable-next-line test('It calls errorLogginService.logError if getItem throws an error', () => { const errorLoggingService = {} as ErrorLoggingService; errorLoggingService.logError = jest.fn(); const storageService = initStorageService( errorLoggingService, ); const data = {}; const localStorageMock = initLocalStorageMock( errorLoggingService, ); const error = new Error(); localStorageMock.getItem = jest.fn() .mockImplementationOnce(() => { throw error; }); window.localStorage = localStorageMock; const response = storageService.get('test'); expect(errorLoggingService.logError).toHaveBeenCalledWith( error, ); }); }); describe('set', () => { // tslint:disable-next-line test('It calls setItem on the localStorage', () => { const storageService = initStorageService(); const data = {}; window.localStorage = initLocalStorageMock(); storageService.set('test', data); expect(window.localStorage.setItem) .toHaveBeenCalledWith( 'test', JSON.stringify(data), ); }); // tslint:disable-next-line test('It calls errorLogginService.logError if setItem throws an error', () => { const errorLoggingService = {} as ErrorLoggingService; errorLoggingService.logError = jest.fn(); const storageService = initStorageService( errorLoggingService, ); const data = {}; window.localStorage = initLocalStorageMock(); const error = new Error(); window.localStorage.setItem = jest.fn() .mockImplementationOnce(() => { throw error; }); const resp = storageService.set('test', data); expect(errorLoggingService.logError).toHaveBeenCalledWith( error, ); }); }); describe('clear', () => { // tslint:disable-next-line test('It calls localStorage.clear', () => { const storageService = initStorageService(); window.localStorage = initLocalStorageMock(); storageService.clear(); expect(window.localStorage.clear) .toHaveBeenCalled(); }); // tslint:disable-next-line test('It calls errorLogginService.logError if localStorage.clear throws an error', () => { const errorLoggingService = {} as ErrorLoggingService; errorLoggingService.logError = jest.fn(); const storageService = initStorageService( errorLoggingService, ); window.localStorage = initLocalStorageMock(); const error = new Error(); window.localStorage.clear = jest.fn() .mockImplementationOnce(() => { throw error; }); storageService.clear(); expect(errorLoggingService.logError).toHaveBeenCalledWith( error, ); }); });