| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- import Shared from '../src/shared';
- import Storage from '../src/storage';
- import Config from '../src/config';
- let window;
- let config;
- let storage;
- let shared;
- describe('Shared', () => {
- beforeEach(angular.mock.inject(($q, $window, $log) => {
- window = $window;
- config = new Config();
- storage = new Storage($window, config);
- shared = new Shared($q, $window, $log, config, storage);
- }));
- afterEach(() => {
- window.localStorage.clear();
- window.sessionStorage.clear();
- });
- describe('logout()', () => {
- it('should be defined', () => {
- expect(shared.logout).toBeDefined();
- });
- it('should log out a user', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
- shared.logout();
- expect(window[storageType][tokenName]).toBeFalsy();
- });
- });
- describe('getToken()', () => {
- it('should be defined', () => {
- expect(shared.getToken).toBeDefined();
- });
- it('should get a token from Local Storage', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
- expect(shared.getToken()).toEqual(window[storageType][tokenName]);
- });
- });
- describe('getPayload()', () => {
- it('should be defined', () => {
- expect(shared.getPayload).toBeDefined();
- });
- it('should get a JWT payload', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEyMzQ1Njc4OTAsIm5hbWUiOiJKb2huIERvZSJ9.kRkUHzvZMWXjgB4zkO3d6P1imkdp0ogebLuxnTCiYUU';
- const payload = shared.getPayload();
- expect(angular.isObject(payload)).toBe(true);
- expect(payload.name).toEqual('John Doe');
- });
- it('should get a JWT payload with non-english characters', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEyMzQ1Njc4OTAsIm5hbWUiOiJSb2LDqXJ0w6AgVGjDqcO0In0.sgREDWs78UYxIMDfa9cwYqvDgco3i_Ap4MUwmprZWN0';
- const payload = shared.getPayload();
- expect(angular.isObject(payload)).toBe(true);
- expect(payload.name).toEqual('Robértà Théô');
- });
- it('should return undefined if not a valid JWT', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'f0af717251950dbd4d73154fdf0a474a5c5119adad999683f5b450c460726aa';
- const payload = shared.getPayload();
- expect(payload).toBeUndefined();
- });
- it('should return undefined if token looks like JWT but is not valid', function () {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'f0af717251950dbd4.d73154fdf0a474a5c5119ada.d999683f5b450c460726aa';
- const payload = shared.getPayload();
- expect(payload).toBeUndefined();
- });
- });
- describe('isAuthenticated()', () => {
- it('should be defined', () => {
- expect(shared.isAuthenticated).toBeDefined();
- expect(angular.isFunction(shared.isAuthenticated)).toBe(true);
- });
- it('should handle expired token', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiaWF0IjoxNDQ1NDEzODU5LCJleHAiOjE0NDU0MTM4NjR9.FWflFgVTYu4riXLDzOAx9xy1x-qYyzwi09oN_pmoLcg';
- expect(shared.isAuthenticated()).toBe(false);
- });
- it('should work with non-JWT token', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'foo.bar.baz';
- expect(shared.isAuthenticated()).toBe(true);
- });
- });
- describe('setToken()', () => {
- it('should gracefully return without a response param', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- shared.setToken();
- expect(window[storageType][tokenName]).toBeUndefined();
- });
- it('should set the token when tokenRoot is provided', () => {
- const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb…YzMn0.YATZN37JENCQWeNAoN4M7KxJl7OAIJL4ka_fSM_gYkE';
- const response = {
- data: {
- foo: {
- bar: {
- token: token
- }
- }
- }
- };
- config.tokenRoot = 'foo.bar';
- shared.setToken(response);
- expect(token).toEqual(shared.getToken());
- });
- it('should set string access_token', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- const response = { access_token: 'test' };
- shared.setToken(response);
- expect(window[storageType][tokenName]).toBe('test');
- });
- it('should set object access_token', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- const response = {
- access_token: {
- data: {
- token: 'access_token_object_test'
- }
- }
- };
- shared.setToken(response);
- expect(window[storageType][tokenName]).toBe('access_token_object_test');
- });
- it('should gracefully return if no token is passed in', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- delete window[storageType][tokenName];
- const response = {
- access_token: {
- data: {}
- }
- };
- shared.setToken(response);
- expect(window[storageType][tokenName]).toBeUndefined();
- });
- });
- describe('removeToken()', () => {
- it('should be defined', () => {
- expect(shared.removeToken).toBeDefined();
- });
- it('should remove a token', () => {
- const storageType = config.storageType;
- const tokenName = [config.tokenPrefix, config.tokenName].join('_');
- window[storageType][tokenName] = 'f0af717251950dbd4d73154fdf0a474a5c5119adad999683f5b450c460726aa';
- shared.removeToken();
- expect(window[storageType][tokenName]).toBeUndefined();
- });
- });
- describe('setStorageType()', () => {
- it('should be defined', () => {
- expect(shared.setStorageType).toBeDefined();
- });
- it('should be able to set storage type to session storage', () => {
- shared.setStorageType('sessionStorage');
- expect(config.storageType).toBe('sessionStorage');
- });
- });
- });
|