Mercurial > hg > thermostat-ng > web-client
view src/app/app-root.controller.spec.js @ 274:bdbc30b9f43c default tip master
Alternative authService migration approach
Allows one service instance to be shared between Angular and AngularJS.
Reviewed-by: jkang
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-October/025509.html
author | Andrew Azores <aazores@redhat.com> |
---|---|
date | Thu, 26 Oct 2017 10:47:34 -0400 |
parents | 2eb2ae0f3b3f |
children |
line wrap: on
line source
/** * Copyright 2012-2017 Red Hat, Inc. * * Thermostat is distributed under the GNU General Public License, * version 2 or any later version (with a special exception described * below, commonly known as the "Classpath Exception"). * * A copy of GNU General Public License (GPL) is included in this * distribution, in the file COPYING. * * Linking Thermostat code with other modules is making a combined work * based on Thermostat. Thus, the terms and conditions of the GPL * cover the whole combination. * * As a special exception, the copyright holders of Thermostat give you * permission to link this code with independent modules to produce an * executable, regardless of the license terms of these independent * modules, and to copy and distribute the resulting executable under * terms of your choice, provided that you also meet, for each linked * independent module, the terms and conditions of the license of that * module. An independent module is a module which is not derived from * or based on Thermostat code. If you modify Thermostat, you may * extend this exception to your version of the software, but you are * not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. */ import { default as authModule, config } from './components/auth/auth.module.js'; import controllerModule from './app-root.controller.js'; describe('AppRootController', () => { let rootScope, authService, translate, ctrl; beforeEach(() => { angular.mock.module(authModule); config(); angular.mock.module(controllerModule); angular.mock.module($provide => { 'ngInject'; $provide.value('$transitions', { onBefore: angular.noop }); let localStorage = { getItem: sinon.stub(), hasItem: sinon.stub(), removeItem: sinon.spy(), setItem: sinon.spy(), clear: sinon.spy() }; $provide.value('localStorage', localStorage); authService = { logout: sinon.spy(), status: sinon.stub().returns(true), username: 'foo-user', }; $provide.value('authService', authService); translate = sinon.stub().returns({ then: sinon.stub().yields({ 'navbar.states.JVM_LISTING': 'JVM Listing', 'navbar.states.MULTICHARTS': 'Multicharts' }) }); }); angular.mock.inject(($controller, $rootScope) => { 'ngInject'; rootScope = $rootScope; ctrl = $controller('AppRootController', { environment: 'testing', $scope: rootScope.$new(), authService: authService, $translate: translate }); ctrl.$onInit(); }); }); ['testing', 'development', 'production'].forEach(env => { describe(env, () => { beforeEach(angular.mock.inject($controller => { 'ngInject'; ctrl = $controller('AppRootController', { environment: env, $scope: rootScope.$new(), authService: authService, $translate: translate }); ctrl.$onInit(); })); it('should set loginStatus', () => { ctrl.loginStatus.should.be.True(); authService.status.should.be.calledOnce(); }); }); }); describe('logout()', () => { it('should delegate to AuthService', () => { authService.logout.should.not.be.called(); ctrl.logout(); authService.logout.should.be.calledOnce(); }); }); describe('username', () => { it('should be set on init', () => { ctrl.should.have.ownProperty('username'); ctrl.username.should.equal(authService.username); }); it('should be set on userLoginChanged according to authService username', () => { authService.username = 'new-username'; rootScope.$broadcast('userLoginChanged'); ctrl.should.have.ownProperty('username'); ctrl.username.should.equal('new-username'); }); }); });