blob: 5101ba8073520bcc7297dbee9c389307096b4f8f [file] [log] [blame]
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -08001/// <reference path="../../../../typings/index.d.ts" />
2
3import * as $ from 'jquery';
4import 'jasmine-jquery';
5import * as angular from 'angular';
6import 'angular-mocks';
7import {IXosNavigationRoute} from '../services/navigation';
8import {xosNav} from './nav';
9
10let element, scope: angular.IRootScopeService, compile: ng.ICompileService, isolatedScope;
11
12let baseRoutes: IXosNavigationRoute[] = [
13 {label: 'Home', state: 'xos'},
14 {label: 'Core', state: 'xos.core'}
15];
16
17const NavigationService = function(){
18 this.query = () => baseRoutes;
19};
20
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080021const AuthMock = {
Matteo Scandolo04964232017-01-07 12:53:46 -080022 logout: jasmine.createSpy('logout').and.returnValue({then: () => {
23 return;
24 }})
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080025};
26
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080027describe('Nav component', () => {
28 beforeEach(() => {
29 angular
30 .module('xosNav', ['app/core/nav/nav.html', 'ui.router'])
31 .component('xosNav', xosNav)
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080032 .service('NavigationService', NavigationService)
Matteo Scandolo828d1e82017-01-17 14:49:38 -080033 .value('AuthService', AuthMock)
Matteo Scandolo9d7940c2017-01-19 18:28:43 -080034 .value('StyleConfig', {})
Matteo Scandolo4222a432017-01-23 12:18:40 -080035 .value('XosSidePanel', {})
36 .value('XosComponentInjector', {});
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080037 angular.mock.module('xosNav');
38 });
39
40 beforeEach(angular.mock.inject(($rootScope: ng.IRootScopeService, $compile: ng.ICompileService) => {
41 scope = $rootScope;
42 compile = $compile;
43 element = $compile('<xos-nav></xos-nav>')($rootScope);
44 $rootScope.$digest();
45 isolatedScope = element.isolateScope();
46
47 // clear routes
48 isolatedScope.routes = [];
49 }));
50
51 it('should render a list of routes', () => {
Matteo Scandolo266907e2016-12-20 13:41:42 -080052 const routes = $('.nav li:not(.nav-info)', element);
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080053 expect(routes.length).toBe(2);
54 });
55
56 it('should render child routes', () => {
57 baseRoutes = [
58 {label: 'Home', state: 'xos'},
59 {label: 'Core', state: 'xos.core', children: [
60 {label: 'Slices', state: 'xos.core.slices', parent: 'xos.core'}
61 ]}
62 ];
63 scope.$apply();
Matteo Scandolo266907e2016-12-20 13:41:42 -080064 const childRouteContainer = $('.nav-second li', element);
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080065 expect(childRouteContainer.length).toBe(1);
66 });
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080067
68 it('should call the logout method', () => {
69 // NOTE upgrade to test the ng-click binding
70 // const btn = $(element).find('.nav-info .btn-block');
71 // btn.click();
72 // scope.$digest();
73 isolatedScope.vm.logout();
74 expect(AuthMock.logout).toHaveBeenCalled();
75 });
Matteo Scandoloe0d71ea2016-12-19 11:56:12 -080076});