angular-swx-session-storage
Version:
$sessionStorage service for use in your AngularJS applications.
179 lines (135 loc) • 4.91 kB
JavaScript
describe('$localStorage', function() {
'use strict';
var suite = this,
cache = {};
// Mock caching service
suite.mockCachingService = {
get: function (key) {
return cache[key];
},
put: function (key, value) {
cache[key] = value;
},
remove: function (key) {
delete cache[key];
},
removeAll: function () {
cache = {};
},
destroy: function() {
cache = {};
}
};
// Mock $cacheFactory
suite.mockCacheFactory = function() {
return suite.mockCachingService;
};
beforeEach(function() {
module('swxSessionStorage');
module(function($provide) {
$provide.value('$cacheFactory', suite.mockCacheFactory);
});
inject(function($injector) {
suite.service = $injector.get('$sessionStorage');
});
});
describe('default values and methods', function() {
it('should expose the following methods', function() {
expect(suite.service.put).toBeFunction();
expect(suite.service.get).toBeFunction();
expect(suite.service.remove).toBeFunction();
expect(suite.service.empty).toBeFunction();
});
});
describe('prefix method', function() {
beforeEach(function() {
spyOn(suite.mockCachingService, 'destroy').and.callThrough();
cache = {};
});
afterEach(function() {
cache = {};
});
it('should set the prefix and destroy the existing cache', function() {
suite.service.put('some_key', 'some_value');
expect(suite.service.get('some_key')).toBe('some_value');
suite.service.prefix('new_prefix');
expect(suite.service.get('some_key')).toBe(void 0);
expect(suite.mockCachingService.destroy).toHaveBeenCalled();
});
});
describe('put method', function() {
beforeEach(function() {
spyOn(suite.mockCachingService, 'put').and.callThrough();
cache = {};
});
afterEach(function() {
cache = {};
});
it('should add to storage and return the value', function() {
expect(suite.service.put('some_key', 'some_value')).toBe('some_value');
expect(suite.mockCachingService.put).toHaveBeenCalledWith('some_key', { data: 'some_value' });
});
it('should add to storage with expiry of 10 minutes', function() {
suite.service.put('some_key', 'some_value', 10);
expect(cache['some_key'].data).toBe('some_value');
expect(cache['some_key'].expires).toBeNumber();
});
});
describe('get method', function() {
beforeEach(function() {
spyOn(suite.mockCachingService, 'get').and.callThrough();
spyOn(suite.mockCachingService, 'remove').and.callThrough();
cache = {};
});
afterEach(function() {
cache = {};
});
it('should return the stored value from session cache', function() {
suite.service.put('some_key', 'some_value');
expect(suite.service.get('some_key')).toBe('some_value');
expect(suite.mockCachingService.get).toHaveBeenCalledWith('some_key');
});
it('should return a false Boolean stored value from session cache correctly', function() {
suite.service.put('some_key', false);
expect(suite.service.get('some_key')).toBeDefined();
expect(suite.service.get('some_key')).toBeFalse();
expect(suite.mockCachingService.get).toHaveBeenCalledWith('some_key');
});
it('should retrieve item with expiry session cache if still valid', function() {
suite.service.put('some_key', 'some_value', 1);
expect(suite.service.get('some_key')).toBe('some_value');
});
it('should remove item with expiry from session cache if expired and return undefined', function() {
suite.service.put('some_key', 'some_value', -1);
expect(suite.service.get('some_key')).toBe(void 0);
expect(suite.mockCachingService.remove).toHaveBeenCalledWith('some_key');
});
});
describe('remove method', function() {
beforeEach(function() {
spyOn(suite.mockCachingService, 'remove').and.callThrough();
cache = {};
});
afterEach(function() {
cache = {};
});
it('should remove the stored value from session cache', function() {
suite.service.put('some_key', 'some_value');
expect(suite.service.get('some_key')).toBe('some_value');
suite.service.remove('some_key');
expect(suite.service.get('some_key')).toBe(void 0);
expect(suite.mockCachingService.remove).toHaveBeenCalledWith('some_key');
});
});
describe('empty method', function() {
beforeEach(function() {
spyOn(suite.mockCachingService, 'remove').and.callThrough();
});
it('should empty all stored values', function() {
suite.service.put('some_key', 'some_value');
expect(suite.service.get('some_key')).toBe('some_value');
suite.service.empty();
expect(suite.service.get('some_key')).toBe(void 0);
});
});
});