horizon/horizon/static/framework/widgets/details/routed-details-view.control...

120 lines
3.8 KiB
JavaScript

/**
* (c) Copyright 2016 Hewlett-Packard Development Company, L.P.
*
* 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('RoutedDetailsViewController', function() {
var ctrl, deferred, $timeout, $q, actionResultService, navigationsService;
beforeEach(module('horizon.framework.widgets.details'));
beforeEach(inject(function($injector, $controller, _$q_, _$timeout_) {
$q = _$q_;
deferred = $q.defer();
$timeout = _$timeout_;
var service = {
getResourceType: function() {
return {
load: function() { return deferred.promise; },
parsePath: function() { return 'my-context'; },
itemName: function() { return 'A name'; },
initActions: angular.noop,
getDefaultIndexUrl: function() { return '/project/images/'; }
};
},
getDefaultDetailsTemplateUrl: angular.noop
};
actionResultService = {
getIdsOfType: function() { return []; }
};
navigationsService = {
expandNavigationByUrl: function() { return ['Project', 'Compute', 'Images']; },
setBreadcrumb: angular.noop
};
ctrl = $controller("RoutedDetailsViewController", {
'horizon.framework.conf.resource-type-registry.service': service,
'horizon.framework.util.actions.action-result.service': actionResultService,
'horizon.framework.util.navigations.service': navigationsService,
'horizon.framework.widgets.modal-wait-spinner.service': {
showModalSpinner: angular.noop,
hideModalSpinner: angular.noop
},
'$routeParams': {
type: 'OS::Glance::Image',
path: '1234'
}
});
}));
it('sets resourceType', function() {
expect(ctrl.resourceType).toBeDefined();
});
it('sets context', function() {
expect(ctrl.context.identifier).toEqual('my-context');
});
it('sets itemData when item loads', function() {
deferred.resolve({data: {some: 'data'}});
expect(ctrl.itemData).toBeUndefined();
$timeout.flush();
expect(ctrl.itemData).toEqual({some: 'data'});
});
it('sets itemName when item loads', function() {
deferred.resolve({data: {some: 'data'}});
expect(ctrl.itemData).toBeUndefined();
$timeout.flush();
expect(ctrl.itemName).toEqual('A name');
});
describe('resultHandler', function() {
it('handles empty results', function() {
var result = $q.defer();
result.resolve({});
ctrl.resultHandler(result.promise);
$timeout.flush();
expect(ctrl.showDetails).not.toBe(true);
});
it('handles falsy results', function() {
var result = $q.defer();
result.resolve(false);
ctrl.resultHandler(result.promise);
$timeout.flush();
expect(ctrl.showDetails).not.toBe(true);
});
it('handles matched results', function() {
spyOn(actionResultService, 'getIdsOfType').and.returnValue([1, 2, 3]);
var result = $q.defer();
result.resolve({some: 'thing'});
ctrl.resultHandler(result.promise);
deferred.resolve({data: {some: 'data'}});
$timeout.flush();
expect(ctrl.showDetails).toBe(true);
});
});
});
})();