UNPKG

browser-storage-utilities

Version:

A front-end library that provides utility methods to facilitate CRUD operations to data stored in the browser, and more.

229 lines 10.6 kB
Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const mock_product_1 = require("./mock-product"); const storage_types_1 = require("../enums/storage-types"); const global = require('global'); const storage = { sessionStorage: null, localStorage: null }; const initStorage = (type) => { storage[type] = new Map(); global[type] = { key: (index) => { return Array.from(storage[type].keys())[index]; }, setItem: (k, v) => { storage[type].set(k, v); }, getItem: (k) => { return storage[type].get(k); }, removeItem: (k) => { storage[type].delete(k); }, clear: () => { storage[type].clear(); }, length: storage[type].size }; }; let productStorage; let productSubscription; const product1 = { id: 1, name: 'Desk', code: 'A1', customer: { id: 10, firstName: 'John', lastName: 'Doe' } }; const product2 = { id: 2, name: 'Laptop', code: 'L1', customer: { id: 20, firstName: 'Kate', lastName: 'Young' } }; afterEach(() => { storage.sessionStorage = null; storage.localStorage = null; productSubscription && productSubscription.unsubscribe(); }); describe('Storage Utilities', () => { describe('localStorage', () => { describe('logic', () => { beforeEach(() => { initStorage(storage_types_1.StorageTypes.LOCAL); productStorage = new mock_product_1.ProductStorage(); }); describe('basic operations', () => { it('should add a product to local storage without expiry', () => { productStorage.addProduct('local-product-1', product1); chai_1.expect(storage.localStorage.get('local-product-1')).to.equal(JSON.stringify(product1)); }); it('should return product if not expired yet from local storage', (done) => { const now = new Date(); productStorage.addProduct('local-product-1', product1, 500); const product1WithExpiry = { value: product1, expiry: now.getTime() + 500 }; setTimeout(() => { chai_1.expect(storage.localStorage.get('local-product-1')).to.equal(JSON.stringify(product1WithExpiry)); done(); }, 300); }); it('should return null when product is expired in 200 milliseconds, and removes it from local storage', (done) => { productStorage.addProduct('local-product-1', product1, 200); setTimeout(() => { chai_1.expect(productStorage.getProduct('local-product-1')).to.equal(null); chai_1.expect(storage.localStorage.get('local-product-1')).to.equal(undefined); done(); }, 300); }); }); }); describe('settings', () => { beforeEach(() => { initStorage(storage_types_1.StorageTypes.LOCAL); }); describe('default settings', () => { productStorage = new mock_product_1.ProductStorage(); it('should return default settings', () => { chai_1.expect(productStorage.getDefaultSettings()).to.deep.equal({ keyPrefix: '', type: storage_types_1.StorageTypes.LOCAL }); }); }); describe('current settings', () => { it('should return current settings', () => { productStorage = new mock_product_1.ProductStorage({ keyPrefix: 'local-test-', type: storage_types_1.StorageTypes.SESSION }); chai_1.expect(productStorage.getCurrentSettings()).to.deep.equal({ keyPrefix: 'local-test-', type: storage_types_1.StorageTypes.SESSION }); }); }); describe('custom settings', () => { it('should set custom settings', () => { productStorage = new mock_product_1.ProductStorage(); productStorage.setCustomSettings({ keyPrefix: 'custom-', type: storage_types_1.StorageTypes.LOCAL }); chai_1.expect(productStorage.getCurrentSettings()).to.deep.equal({ keyPrefix: 'custom-', type: storage_types_1.StorageTypes.LOCAL }); }); }); describe('reset settings', () => { it('should reset settings to default', () => { productStorage = new mock_product_1.ProductStorage({ keyPrefix: 'custom-', type: storage_types_1.StorageTypes.SESSION }); productStorage.resetSettingsToDefault(); chai_1.expect(productStorage.getCurrentSettings()).to.deep.equal({ keyPrefix: '', type: storage_types_1.StorageTypes.LOCAL }); }); }); }); }); describe('sessionStorage', () => { beforeEach(() => { initStorage(storage_types_1.StorageTypes.SESSION); productStorage = new mock_product_1.ProductStorage({ keyPrefix: 'test-', type: storage_types_1.StorageTypes.SESSION }); }); describe('default settings', () => { it('should return default settings', () => { chai_1.expect(productStorage.getDefaultSettings()).to.deep.equal({ keyPrefix: '', type: storage_types_1.StorageTypes.LOCAL }); }); }); describe('current settings', () => { it('should return current settings', () => { chai_1.expect(productStorage.getCurrentSettings()).to.deep.equal({ keyPrefix: 'test-', type: storage_types_1.StorageTypes.SESSION }); }); }); describe('basic operations', () => { it('should add a product to session storage', () => { productStorage.addProduct('product-1', product1); chai_1.expect(storage.sessionStorage.get('test-product-1')).to.equal(JSON.stringify(product1)); }); it('should return a product from session storage', () => { storage.sessionStorage.set('test-product-1', product1); chai_1.expect(productStorage.getProduct('product-1')).to.equal(product1); }); it('should return product promise from session storage', () => { storage.sessionStorage.set('test-product-1', product1); productStorage.getProductPromise('product-1').then((p) => chai_1.expect(p).to.equal(product1)); }); it('should return product observable from session storage', () => { storage.sessionStorage.set('test-product-1', product1); productSubscription = productStorage .getProductObservable('product-1') .subscribe((p) => chai_1.expect(p).to.equal(product1)); }); it('should remove a product from session storage', () => { storage.sessionStorage.set('test-product-1', product1); productStorage.removeProduct('product-1'); chai_1.expect(storage.sessionStorage.get('test-product-1')).to.equal(undefined); }); it('should remove products by keys from session storage', () => { storage.sessionStorage.set('test-product-1', product1); storage.sessionStorage.set('test-product-2', product2); productStorage.removeProducts(['product-1', 'product-2']); chai_1.expect(storage.sessionStorage.get('test-product-1')).to.equal(undefined); chai_1.expect(storage.sessionStorage.get('test-product-2')).to.equal(undefined); }); it('should clear session storage', () => { storage.sessionStorage.set('test-product-1', product1); storage.sessionStorage.set('test-product-2', product2); productStorage.clear(); chai_1.expect(storage.sessionStorage.get('test-product-1')).to.equal(undefined); chai_1.expect(storage.sessionStorage.get('test-product-2')).to.equal(undefined); }); }); describe('general operations', () => { it('should return all storage items from session storage', () => { storage.sessionStorage.set('test-product-1', product1); storage.sessionStorage.set('test-product-2', product2); global.sessionStorage.length = storage.sessionStorage.size; chai_1.expect(productStorage.getAllStorageItems()).to.deep.equal([ { key: 'test-product-1', value: product1, expiry: undefined }, { key: 'test-product-2', value: product2, expiry: undefined } ]); }); it('should return all storage values from session storage', () => { storage.sessionStorage.set('test-product-1', product1); storage.sessionStorage.set('test-product-2', product2); global.sessionStorage.length = storage.sessionStorage.size; chai_1.expect(productStorage.getAllStorageValues()).to.deep.equal([product1, product2]); }); it('should return all storage keys from session storage', () => { storage.sessionStorage.set('test-product-1', product1); storage.sessionStorage.set('test-product-2', product2); global.sessionStorage.length = storage.sessionStorage.size; chai_1.expect(productStorage.getAllStorageKeys()).to.deep.equal(['test-product-1', 'test-product-2']); }); }); }); }); //# sourceMappingURL=storage-utilities.spec.js.map