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
JavaScript
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