horizon/horizon/static/framework/util/navigations/navigations.service.spec.js

185 lines
6.3 KiB
JavaScript

/*
* (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function() {
'use strict';
describe('horizon.framework.util.navigations.service', function() {
var service, navigations, spyElement;
var imagesUrl = '/project/images/';
var breadcrumb = ['Project', 'Compute', 'Images'];
var breadcrumbWithoutGroup = ['Project', 'Images'];
function getNavsElement (selector) {
try {
// for searching element
return navigations.find(selector);
} catch (e) {
// for creating element
return $(selector);
}
}
beforeEach(module('horizon.framework.util.navigations'));
beforeEach(inject(function($injector) {
service = $injector.get('horizon.framework.util.navigations.service');
navigations = angular.element(
'<div>' +
' <!-- navigation side bar -->' +
' <li class="openstack-dashboard">' +
' <a class="" aria-expanded="true">' +
' Project' +
' </a>' +
' <ul class="in" style="">' +
' <li class="openstack-panel-group">' +
' <a class="" area-expanded="true">' +
' Compute' +
' </a>' +
' <div class="in" style="">' +
' <a class="openstack-panel active" href="/project/images/">' +
' Images' +
' </a>' +
' </div>' +
' </li>' +
' </ul>' +
' </li>' +
' <!-- breadcrumb -->' +
' <div class="page-breadcrumb">' +
' <ol class="breadcrumb">' +
' <li>Project</li>' +
' <li>Compute</li>' +
' <li class="active">Images</li>' +
' </ol>' +
' </div>' +
'</div>');
spyElement = spyOn(angular, 'element').and.callFake(getNavsElement);
}));
afterEach(function() {
spyElement.and.callThrough();
});
describe('getActivePanelUrl', function() {
it('returns an empty array if no items', function() {
var activeUrl = service.getActivePanelUrl();
expect(activeUrl).toBe(imagesUrl);
});
});
describe('collapseAllNavigation', function() {
it('collapse all nodes on navigation side bar', function() {
service.collapseAllNavigation();
var hasIn = navigations.find('.in');
expect(hasIn.length).toBe(0);
var collapsed = navigations.find('a.collapsed[aria-expanded=false]');
expect(collapsed.length).toBe(2);
var hasActive = navigations.find('a.openstack-panel.active');
expect(hasActive.length).toBe(0);
});
});
describe('expandNavigationByUrl', function() {
it('expands navigation side bar and return their label of selected nodes', function() {
spyOn(service, 'collapseAllNavigation').and.callThrough();
var list = service.expandNavigationByUrl(imagesUrl);
expect(list).toEqual(breadcrumb);
var hasIn = navigations.find('.in');
expect(hasIn.length).toBe(2);
var expanded = navigations.find('a[aria-expanded=true]');
expect(expanded.length).toBe(2);
var hasActive = navigations.find('a.openstack-panel.active');
expect(hasActive.length).toBe(1);
});
});
describe('expandNavigationByUrl', function() {
it('expands navigation side bar without panelgroup' +
'and return their label of selected nodes', function() {
navigations = angular.element(
'<div>' +
' <!-- navigation side bar -->' +
' <li class="openstack-dashboard">' +
' <a class="" aria-expanded="true">' +
' Project' +
' </a>' +
' <ul class="in" style="">' +
' <div class="in" style="">' +
' <a class="openstack-panel active" href="/project/images/">' +
' Images' +
' </a>' +
' </div>' +
' </ul>' +
' </li>' +
' <!-- breadcrumb -->' +
' <div class="page-breadcrumb">' +
' <ol class="breadcrumb">' +
' <li>Project</li>' +
' <li>Compute</li>' +
' <li class="active">Images</li>' +
' </ol>' +
' </div>' +
'</div>');
spyOn(service, 'collapseAllNavigation').and.callThrough();
var list = service.expandNavigationByUrl(imagesUrl);
expect(list).toEqual(breadcrumbWithoutGroup);
var hasIn = navigations.find('.in');
expect(hasIn.length).toBe(2);
var expanded = navigations.find('a[aria-expanded=true]');
expect(expanded.length).toBe(1);
var hasActive = navigations.find('a.openstack-panel.active');
expect(hasActive.length).toBe(1);
});
});
describe('setBreadcrumb', function() {
it('sets breadcrumb items from specified array', function() {
service.setBreadcrumb(['Identity', 'Roles']);
expect(navigations.text('Identity').length).toBe(1);
expect(navigations.text('Roles').length).toBe(1);
});
});
describe('setAbsoluteURI', function() {
it('sets absolute uri', function() {
var url = service.setAbsoluteURI('/dashboard/', '/project/images/');
expect(url).toBe('/dashboard/project/images/');
});
});
describe('isNavigationExists', function() {
it('returns true if navigation for specified URL exists', function() {
var result = service.isNavigationExists('/project/images/');
expect(result).toEqual(true);
});
it('returns false if navigation for specified URL does not exist', function() {
var result = service.isNavigationExists('/not/found/');
expect(result).toEqual(false);
});
});
});
})();