UNPKG

linagora-rse

Version:
359 lines (305 loc) 10.6 kB
'use strict'; /* global chai: false */ var expect = chai.expect; describe('The esn.session Angular module', function() { beforeEach(angular.mock.module('esn.session')); describe('session service', function() { beforeEach(function() { var self = this; inject(function(session) { self.session = session; }); }); it('should return an object with 2 properties: user, domain', function() { expect(this.session.user).to.be.an.object; expect(this.session.domain).to.be.an.object; }); it('should return an object with 5 methods: setUser, setDomain, setLogout, setLogin, isLoggedIn', function() { expect(this.session).to.respondTo('setUser'); expect(this.session).to.respondTo('setDomain'); expect(this.session).to.respondTo('setLogout'); expect(this.session).to.respondTo('setLogin'); expect(this.session).to.respondTo('isLoggedIn'); }); describe('setUser method', function() { it('should set the session.user object', function() { var user = this.session.user; var user1 = { _id: '1', name: 'hello', emails: ['someone@example.com'], emailMap: { 'someone@example.com': true } }; var user2 = { _id: '2', name: 'yolo', emails: ['yolo@example.com'], emailMap: { 'yolo@example.com': true } }; this.session.setUser(user1); expect(user).to.deep.equal(user1); this.session.setUser(user2); expect(user).to.deep.equal(user2); }); }); describe('setDomain method', function() { it('should set the session.domain object', function() { var domain = this.session.domain; var domain1 = { _id: '1', name: 'hello' }; var domain2 = { _id: '2', name2: 'yolo' }; this.session.setDomain(domain1); expect(domain).to.deep.equal(domain1); this.session.setDomain(domain2); expect(domain).to.deep.equal(domain2); }); }); describe('setLogin method', function() { it('should set session private field loggedIn to true', function() { this.session.setLogin(); expect(this.session.isLoggedIn()).to.be.true; }); }); describe('setLogout method', function() { it('should set session private field loggedIn to false', function() { this.session.setLogout(); expect(this.session.isLoggedIn()).to.be.false; }); }); describe('isLoggedIn method', function() { it('should retrieve private field loggedIn', function() { this.session.setLogin(); expect(this.session.isLoggedIn()).to.be.true; this.session.setLogout(); expect(this.session.isLoggedIn()).to.be.false; }); }); describe('The getProviderAccounts function', function() { it('should return empty array when no input provider', function() { this.session.setUser({ _id: '1', name: 'yolo', emails: ['yolo@example.com'] }); expect(this.session.getProviderAccounts()).to.deep.equal([]); }); it('should return empty array when no account', function() { this.session.setUser({ _id: '1', name: 'yolo', emails: ['yolo@example.com'] }); expect(this.session.getProviderAccounts('twitter')).to.deep.equal([]); }); it('should return empty array when only other accounts', function() { this.session.setUser({ _id: '1', name: 'yolo', emails: ['yolo@example.com'], accounts: [{ data: { provider: 'other', field: 'value' } }] }); expect(this.session.getProviderAccounts('twitter')).to.deep.equal([]); }); it('should return all requested accounts', function() { this.session.setUser({ _id: '1', name: 'yolo', emails: ['yolo@example.com'], accounts: [{ data: { provider: 'other', field: 'value' } }, { data: { provider: 'twitter', field1: 'value1' } }, { data: { provider: 'twitter', field2: 'value2' } }] }); expect(this.session.getProviderAccounts('twitter')).to.deep.equal([{ provider: 'twitter', field1: 'value1' }, { provider: 'twitter', field2: 'value2' }]); }); }); describe('userIsDomainAdministrator function', function() { beforeEach(function() { this.session.setDomain({ _id: '1', name: 'hello', administrators: [] }); this.session.setUser({ _id: 'admin', name: 'admin', emails: ['admin@example.com'] }); }); it('should return false if user is not domain administrator', function() { expect(this.session.userIsDomainAdministrator()).to.be.false; }); it('should return true if user is domain administrator', function() { this.session.domain.administrators.push({ user_id: this.session.user._id }); expect(this.session.userIsDomainAdministrator()).to.be.true; }); it('should return true if user is domain administrator (deprecated)', function() { this.session.domain.administrator = this.session.user._id; expect(this.session.userIsDomainAdministrator()).to.be.true; }); }); }); describe('sessionFactory service', function() { var service, $rootScope, userdefer, domaindefer, tokendefer, userAPI, domainAPI, session, tokenAPI; beforeEach(function() { userAPI = { currentUser: function() { userdefer = $q.defer(); return userdefer.promise; }, user: function() { userdefer = $q.defer(); return userdefer.promise; } }; domainAPI = { get: function() { domaindefer = $q.defer(); return domaindefer.promise; } }; session = { setUser: function() {}, setDomain: function() {}, setLogin: function() {}, setLogout: function() {}, isLoggedIn: function() {}, domain: {}, ready: { then: function() {} } }; tokenAPI = { getNewToken: function() { tokendefer = $q.defer(); return tokendefer.promise; } }; module(function($provide) { $provide.value('userAPI', userAPI); $provide.value('domainAPI', domainAPI); $provide.value('tokenAPI', tokenAPI); $provide.value('session', session); }); inject(function($injector, _$rootScope_) { service = $injector.get('sessionFactory'); $rootScope = _$rootScope_; }); }); it('should callback(error.data) if there is an error with error.data in the user request', function(done) { service.fetchUser(function(error) { if (error) { expect(error).to.deep.equal({error: 'error', message: 'message'}); done(); } else { done(new Error()); } }); userdefer.reject({data: {error: 'error', message: 'message'}}); $rootScope.$digest(); }); it('should render the error template if the user does not belong to a domain', function(done) { service.fetchUser(function(error) { if (error) { expect(error).to.deep.equal({error: 400, message: 'Invalid user', details: 'User does not belong to a domain', displayLogout: true}); done(); } else { done(new Error()); } }); userdefer.resolve({data: {_id: 'user1', name: 'foo'}}); $rootScope.$digest(); }); it('should call domainAPI.get() with the first domain id in user.domains', function(done) { domainAPI.get = function(id) { expect(id).to.equal('I1'); done(); }; service.fetchUser(function() {}); userdefer.resolve({data: {_id: 'user1', name: 'foo', domains: [{domain_id: 'I1'}, {domain_id: 'I2'}]}}); $rootScope.$digest(); }); it('should render the error template if there is an error in the domain request', function(done) { service.fetchUser(function(error) { if (error) { expect(error).to.deep.equal({error: 'error', message: 'message'}); done(); } else { done(new Error()); } }); userdefer.resolve({data: {_id: 'user1', name: 'foo', domains: [{domain_id: 'I1'}, {domain_id: 'I2'}]}}); $rootScope.$digest(); domaindefer.reject({data: {error: 'error', message: 'message'}}); $rootScope.$digest(); }); it('should render the application template if domain & user request succeded', function(done) { service.fetchUser(function(error) { if (error) { done(new Error()); } else { done(); } }); userdefer.resolve({data: {_id: 'user1', name: 'foo', domains: [{domain_id: 'I1'}, {domain_id: 'I2'}]}}); $rootScope.$digest(); domaindefer.resolve({data: {_id: 'D1', name: 'domain1'}}); $rootScope.$digest(); }); it('should call session.setUser when user is retrieved', function(done) { session.setUser = function(user) { expect(user).to.deep.equal({_id: 'user1', name: 'foo', domains: [{domain_id: 'I1'}, {domain_id: 'I2'}]}); done(); }; service.fetchUser(function(error) { if (error) { done(new Error()); } else { done(); } }); service.fetchUser(function() {}); userdefer.resolve({data: {_id: 'user1', name: 'foo', domains: [{domain_id: 'I1'}, {domain_id: 'I2'}]}}); $rootScope.$digest(); }); it('should call session.setDomain when domain is retrieved', function(done) { session.setDomain = function(domain) { expect(domain).to.deep.equal({_id: 'D1', name: 'domain1'}); done(); }; service.fetchUser(function() {}); userdefer.resolve({data: {_id: 'user1', name: 'foo', domains: [{domain_id: 'I1'}, {domain_id: 'I2'}]}}); $rootScope.$digest(); domaindefer.resolve({data: {_id: 'D1', name: 'domain1'}}); $rootScope.$digest(); }); }); });