openmct/platform/features/timeline/test/controllers/graph/TimelineGraphSpec.js

171 lines
6.4 KiB
JavaScript
Raw Normal View History

/*****************************************************************************
* Open MCT Web, Copyright (c) 2009-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is 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.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
define(
['../../../src/controllers/graph/TimelineGraph'],
function (TimelineGraph) {
describe("A Timeline's resource graph", function () {
var mockDomainObjects,
mockRenderer,
testColors,
mockGraphs,
graph;
function asPromise(v) {
return (v || {}).then ? v : {
then: function (callback) {
return asPromise(callback(v));
}
};
}
beforeEach(function () {
testColors = {
a: [0, 1, 0],
b: [1, 0, 1],
c: [1, 0, 0]
};
mockGraphs = [];
mockDomainObjects = {};
['a', 'b', 'c'].forEach(function (k, i) {
var mockGraph = jasmine.createSpyObj(
'utilization-' + k,
['getPointCount', 'getDomainValue', 'getRangeValue']
);
mockDomainObjects[k] = jasmine.createSpyObj(
'domainObject-' + k,
['getCapability', 'useCapability']
);
mockDomainObjects[k].useCapability.andReturn(asPromise({
testResource: mockGraph
}));
mockGraph.getPointCount.andReturn(i + 2);
mockGraph.testField = k;
mockGraph.testIndex = i;
// Store to allow changes later
mockGraphs.push(mockGraph);
});
mockRenderer = jasmine.createSpyObj(
'renderer',
['render', 'decode']
);
mockRenderer.render.andCallFake(function (utilization) {
var result = [];
while (result.length < (utilization.testIndex + 2) * 2) {
result.push(Math.floor(result.length / 2));
// Alternate +/- to give something to test to
result.push(
((result.length % 4 > 1) ? -1 : 1) *
(10 * utilization.testIndex)
);
}
return result;
});
mockRenderer.decode.andCallFake(function (color) {
return testColors[color];
});
graph = new TimelineGraph(
'testResource',
mockDomainObjects,
mockRenderer
);
});
it("exposes minimum/maximum", function () {
expect(graph.minimum()).toEqual(-20);
expect(graph.maximum()).toEqual(20);
});
it("exposes resource key", function () {
expect(graph.key).toEqual('testResource');
});
it("exposes a rendered drawing object", function () {
// Much of the work here is done by the renderer,
// so just check that it got used and assigned
expect(graph.drawingObject.lines).toEqual([
{
color: testColors.a,
buffer: [0, 0, 1, 0],
points: 2
},
{
color: testColors.b,
buffer: [0, 10, 1, -10, 2, 10],
points: 3
},
{
color: testColors.c,
buffer: [0, 20, 1, -20, 2, 20, 3, -20],
points: 4
}
]);
});
it("allows its bounds to be specified", function () {
graph.setBounds(42, 12321);
expect(graph.drawingObject.origin[0]).toEqual(42);
expect(graph.drawingObject.dimensions[0]).toEqual(12321);
});
it("provides a minimum/maximum even with no data", function () {
mockGraphs.forEach(function (mockGraph) {
mockGraph.getPointCount.andReturn(0);
});
// Create a graph of these utilizations
graph = new TimelineGraph(
'testResource',
mockDomainObjects,
mockRenderer
);
// Verify that we get some usable defaults
expect(graph.minimum()).toEqual(jasmine.any(Number));
expect(graph.maximum()).toEqual(jasmine.any(Number));
expect(graph.maximum() > graph.minimum()).toBeTruthy();
});
it("refreshes lines upon request", function () {
// Mock renderer looks at testIndex, so change it here...
mockGraphs[0].testIndex = 3;
// Should trigger a new render
graph.refresh();
// Values correspond to the new index now
expect(graph.drawingObject.lines[0].buffer).toEqual(
[0, 30, 1, -30, 2, 30, 3, -30, 4, 30]
);
});
});
}
);