horizon/horizon/static/framework/widgets/charts/pie-chart.spec.js

261 lines
9.7 KiB
JavaScript

/*
* (c) Copyright 2015 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('horizon.framework.widgets.charts module', function () {
it('should be defined', function () {
expect(angular.module('horizon.framework.widgets.charts')).toBeDefined();
});
});
describe('pie chart directive', function () {
var $scope, $elementMax, $elementTotal, $elementOverMax,
$elementNoQuota, quotaChartDefaults;
beforeEach(module('templates'));
beforeEach(module('horizon.framework'));
function cleanSpaces(string) {
return string.trim().replace(/\s+/, ' ');
}
beforeEach(inject(function ($injector) {
var $compile = $injector.get('$compile');
$scope = $injector.get('$rootScope').$new();
quotaChartDefaults = $injector.get('horizon.framework.widgets.charts.quotaChartDefaults');
$scope.testDataTotal = {
title: 'Total Instances',
label: '25%',
data: [
{ label: quotaChartDefaults.usageLabel,
value: 1,
colorClass: quotaChartDefaults.usageColorClass },
{ label: quotaChartDefaults.addedLabel,
value: 1,
colorClass: quotaChartDefaults.addedColorClass },
{ label: quotaChartDefaults.remainingLabel,
value: 6,
colorClass: quotaChartDefaults.remainingColorClass,
hideKey: true }
]
};
$scope.testDataMax = {};
$scope.testDataOverMax = {};
$scope.testDataNoQuota = {};
// Max chart is similar to Total chart data structure
// but has an additional 'maxLimit' property
angular.copy($scope.testDataTotal, $scope.testDataMax);
$scope.testDataMax.maxLimit = 8;
// using the Max chart, assign values to test for overMax
angular.copy($scope.testDataMax, $scope.testDataOverMax);
$scope.testDataOverMax.data[0].value = 6;
$scope.testDataOverMax.data[1].value = 3;
$scope.testDataOverMax.data[2].value = 0;
$scope.testDataOverMax.overMax = true;
angular.copy($scope.testDataMax, $scope.testDataNoQuota);
$scope.testDataNoQuota.maxLimit = Infinity;
$scope.chartSettings = {
innerRadius: 24,
outerRadius: 30,
titleClass: 'pie-chart-title-medium',
showTitle: true,
showLabel: true,
showLegend: true,
tooltipIcon: 'fa-square'
};
// Max/quota chart markup
var markupMax = '<pie-chart chart-data="testDataMax"' +
' chart-settings="chartSettings">' +
'</pie-chart>';
$elementMax = angular.element(markupMax);
$compile($elementMax)($scope);
// Over Max/quota chart markup
var markupOverMax = '<pie-chart chart-data="testDataOverMax"' +
' chart-settings="chartSettings">' +
'</pie-chart>';
$elementOverMax = angular.element(markupOverMax);
$compile($elementOverMax)($scope);
// Total chart markup
var markupTotal = '<pie-chart chart-data="testDataTotal" ' +
' chart-settings="chartSettings">' +
'</pie-chart>';
$elementTotal = angular.element(markupTotal);
$compile($elementTotal)($scope);
// Unlimited quota chart markup
var markupNoQuota = '<pie-chart chart-data="testDataNoQuota" ' +
' chart-settings="chartSettings">' +
'</pie-chart>';
$elementNoQuota = angular.element(markupNoQuota);
$compile($elementNoQuota)($scope);
$scope.$apply();
}));
it('Max chart should be compiled', function () {
expect($elementMax.html().trim()).not.toBe('');
});
it('OverMax chart should be compiled', function () {
expect($elementOverMax.html().trim()).not.toBe('');
});
it('Total chart should be compiled', function () {
expect($elementTotal.html().trim()).not.toBe('');
});
it('Max chart should have svg element', function () {
expect($elementMax.find('svg').length).toBe(1);
});
it('OverMax chart should have svg element', function () {
expect($elementOverMax.find('svg').length).toBe(1);
});
it('Total chart should have svg element', function () {
expect($elementTotal.find('svg').length).toBe(1);
});
it('Unlimited quota chart should have hidden svg element', function () {
expect($elementNoQuota.find('svg').css('display')).toBe('');
});
it('Max chart should have 3 path elements', function () {
expect($elementMax.find('path.slice').length).toBe(3);
});
it('OverMax chart should have 3 path elements', function () {
expect($elementOverMax.find('path.slice').length).toBe(3);
});
it('Total chart should have 3 path elements', function () {
expect($elementTotal.find('path.slice').length).toBe(3);
});
it('Max chart should have correct css classes for slices', function () {
var slices = $elementMax.find('path.slice');
expect(angular.element(slices[0]).attr('class')).toBe('slice usage');
expect(angular.element(slices[1]).attr('class')).toBe('slice added');
expect(angular.element(slices[2]).attr('class')).toBe('slice remaining');
});
it('OverMax chart should have correct css classes for slices', function () {
var slices = $elementOverMax.find('path.slice');
expect(angular.element(slices[0]).attr('class')).toBe('slice usage');
expect(angular.element(slices[1]).attr('class')).toBe('slice added');
expect(angular.element(slices[2]).attr('class')).toBe('slice remaining');
});
it('Total chart should have correct css classes for slices', function () {
var slices = $elementTotal.find('path.slice');
expect(angular.element(slices[0]).attr('class')).toBe('slice usage');
expect(angular.element(slices[1]).attr('class')).toBe('slice added');
expect(angular.element(slices[2]).attr('class')).toBe('slice remaining');
});
it('Max chart should have title "Total Instances (8 Max)"', function () {
var title = $elementMax.find('.pie-chart-title').text().trim();
expect(title).toBe('Total Instances (8 Max)');
});
it('OverMax chart should have title "Total Instances (8 Max)"', function () {
var title = $elementOverMax.find('.pie-chart-title').text().trim();
expect(title).toBe('Total Instances (8 Max)');
});
it('Total chart should have title "Total Instances (8 Total)"', function () {
var title = $elementTotal.find('.pie-chart-title').text().trim();
expect(title).toBe('Total Instances (8 Total)');
});
it('Unlimited Quota chart should have title "Total Instances (No Limit)"', function () {
var title = $elementNoQuota.find('.pie-chart-title').text().trim();
expect(title).toBe('Total Instances (No Limit)');
});
it('Max chart should have a legend', function () {
expect($elementMax.find('.pie-chart-legend').length).toBe(1);
});
it('OverMax chart should have a legend', function () {
expect($elementOverMax.find('.pie-chart-legend').length).toBe(1);
});
it('Unlimited quotachart should have a legend', function () {
expect($elementNoQuota.find('.pie-chart-legend').length).toBe(1);
});
it('Total chart should have a legend', function () {
expect($elementTotal.find('.pie-chart-legend').length).toBe(1);
});
it ('Max chart should have correct legend keys and labels', function () {
var legendKeys = $elementMax.find('.pie-chart-legend .slice-legend');
var firstKeyLabel = legendKeys[0];
var secondKeyLabel = legendKeys[1];
expect(cleanSpaces(firstKeyLabel.textContent)).toBe('1 Current Usage');
expect(cleanSpaces(secondKeyLabel.textContent)).toBe('1 Added');
});
it ('OverMax chart should have correct legend keys and labels', function () {
var legendKeys = $elementOverMax.find('.pie-chart-legend .slice-legend');
var firstKeyLabel = legendKeys[0];
var secondKeyLabel = legendKeys[1];
expect(cleanSpaces(firstKeyLabel.textContent)).toBe('6 Current Usage');
expect(cleanSpaces(secondKeyLabel.textContent)).toBe('3 Added');
});
it ('OverMax chart should have "danger" class', function () {
var pieChart = $elementOverMax.find('svg').parent();
expect(pieChart.hasClass('danger')).toBe(true);
});
it ('Total chart should have correct legend keys and labels', function () {
var legendKeys = $elementTotal.find('.pie-chart-legend .slice-legend');
var firstKeyLabel = legendKeys[0];
var secondKeyLabel = legendKeys[1];
expect(cleanSpaces(firstKeyLabel.textContent)).toEqual('1 Current Usage');
expect(cleanSpaces(secondKeyLabel.textContent)).toEqual('1 Added');
});
it ('Unlimited quota chart should have correct legend keys and labels', function () {
var legendKeys = $elementNoQuota.find('.pie-chart-legend .slice-legend');
var firstKeyLabel = legendKeys[0];
var secondKeyLabel = legendKeys[1];
expect(cleanSpaces(firstKeyLabel.textContent)).toEqual('1 Current Usage');
expect(cleanSpaces(secondKeyLabel.textContent)).toEqual('1 Added');
});
});
})();