diff --git a/platform/features/events/test/EventListControllerSpec.js b/platform/features/events/test/EventListControllerSpec.js index e69de29bb2..63a762e4d4 100644 --- a/platform/features/events/test/EventListControllerSpec.js +++ b/platform/features/events/test/EventListControllerSpec.js @@ -0,0 +1,110 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-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. + *****************************************************************************/ +/*global define,describe,it,expect,beforeEach,waitsFor,jasmine*/ + +/** + * EventSpec. Created by shale on 06/24/2015. + */ +define( + ["../src/EventListController"], + function (EventListController) { + "use strict"; + + describe("The event list controller", function () { + var mockScope, + mockTelemetry, + testMetadata, + controller; + + beforeEach(function () { + mockScope = jasmine.createSpyObj( + "$scope", + [ "$on", "$watch" ] + ); + mockTelemetry = jasmine.createSpyObj( + "telemetryController", + [ "getResponse", "getMetadata", "getTelemetryObjects" ] + ); + testMetadata = [ + { + domains: [ + { key: "d0", name: "D0" }, + { key: "d1", name: "D1" } + ], + ranges: [ + { key: "r0", name: "R0" }, + { key: "r1", name: "R1" } + ] + }, + { + domains: [ + { key: "d0", name: "D0" }, + { key: "d2", name: "D2" } + ], + ranges: [ + { key: "r0", name: "R0" } + ] + } + ]; + mockTelemetry.getMetadata.andReturn(testMetadata); + mockTelemetry.getResponse.andReturn([]); + mockTelemetry.getTelemetryObjects.andReturn([]); + mockScope.telemetry = mockTelemetry; + controller = new EventListController(mockScope); + }); + + it("listens for telemetry data updates", function () { + expect(mockScope.$on).toHaveBeenCalledWith( + "telemetryUpdate", + jasmine.any(Function) + ); + }); + + it("watches for telemetry controller changes", function () { + expect(mockScope.$watch).toHaveBeenCalledWith( + "telemetry", + jasmine.any(Function) + ); + }); + + it("provides a column for each unique domain and range", function () { + // Should have five columns based on metadata above, + // (d0, d1, d2, r0, r1) + mockScope.$watch.mostRecentCall.args[1](mockTelemetry); + expect(mockScope.headers).toEqual(["D0", "D1", "D2", "R0", "R1"]); + }); + + it("does not throw if telemetry controller is undefined", function () { + // Just a general robustness check + mockScope.telemetry = undefined; + expect(mockScope.$watch.mostRecentCall.args[1]) + .not.toThrow(); + }); + + it("provides default columns if domain/range metadata is unavailable", function () { + mockTelemetry.getMetadata.andReturn([]); + mockScope.$watch.mostRecentCall.args[1](mockTelemetry); + expect(mockScope.headers).toEqual(["Time", "Message"]); + }); + }); + } +); \ No newline at end of file diff --git a/platform/features/events/test/EventListPopulatorSpec.js b/platform/features/events/test/EventListPopulatorSpec.js index e69de29bb2..b263c003a0 100644 --- a/platform/features/events/test/EventListPopulatorSpec.js +++ b/platform/features/events/test/EventListPopulatorSpec.js @@ -0,0 +1,103 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-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. + *****************************************************************************/ +/*global define,describe,it,expect,beforeEach,waitsFor,jasmine*/ + +/** + * EventSpec. Created by shale on 06/24/2015. + */ +define( + ["../src/EventListPopulator"], + function (EventListPopulator) { + "use strict"; + + describe("The event list populator", function () { + var mockColumns, + mockDatas, + mockDomainObjects, + populator; + + function makeMockColumn(name, index) { + var mockColumn = jasmine.createSpyObj( + "column" + index, + [ "getTitle", "getValue" ] + ); + mockColumn.getTitle.andReturn(name); + mockColumn.getValue.andCallFake(function (obj, data, i) { + return data.getDomainValue(i); + }); + return mockColumn; + } + + function makeMockData(bias, index) { + var mockData = jasmine.createSpyObj( + "data" + index, + [ "getDomainValue", "getPointCount" ] + ); + mockData.getPointCount.andReturn(1000); + mockData.getDomainValue.andCallFake(function (i) { + return i + bias; + }); + return mockData; + } + + function makeMockDomainObject(name, index) { + var mockDomainObject = jasmine.createSpyObj( + "domainObject" + index, + [ "getId", "getModel" ] + ); + return mockDomainObject; + } + + beforeEach(function () { + mockColumns = ["A", "B", "C", "D"].map(makeMockColumn); + mockDatas = [ 10, 0, 3 ].map(makeMockData); + mockDomainObjects = ["A", "B", "C"].map(makeMockDomainObject); + populator = new EventListPopulator(mockColumns); + }); + + it("returns column headers", function () { + expect(populator.getHeaders()).toEqual(["A", "B", "C", "D"]); + }); + + it("provides rows on request, with all columns in each row", function () { + var rows = populator.getRows(mockDatas, mockDomainObjects, 84); + expect(rows.length).toEqual(84); + rows.forEach(function (row) { + expect(row.length).toEqual(4); // number of columns + }); + }); + + it("returns rows in reverse domain order", function () { + var rows = populator.getRows(mockDatas, mockDomainObjects, 84), + previous = Number.NEGATIVE_INFINITY; + + // Should always be most-recent-last + rows.forEach(function (row) { + expect(row[0]).not.toBeLessThan(previous); + previous = row[0]; + }); + + }); + + }); + } +); \ No newline at end of file diff --git a/platform/features/events/test/MessagesViewPolicySpec.js b/platform/features/events/test/MessagesViewPolicySpec.js new file mode 100644 index 0000000000..b2bfc17e3d --- /dev/null +++ b/platform/features/events/test/MessagesViewPolicySpec.js @@ -0,0 +1,67 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-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. + *****************************************************************************/ +/*global define,describe,it,expect,beforeEach,jasmine*/ + +/** + * EventSpec. Created by shale on 06/24/2015. + */ +define( + ["../src/policies/MessagesViewPolicy"], + function (MessagesViewPolicy) { + "use strict"; + + describe("The messages view policy", function () { + var mockDomainObject, + testType, + policy; + + beforeEach(function () { + mockDomainObject = jasmine.createSpyObj( + 'domainObject', + ['getModel'] + ); + mockDomainObject.getModel.andCallFake(function (c) { + return {type: testType}; + }); + + policy = new MessagesViewPolicy(); + }); + + it("disallows the message view for non Event Generators", function () { + testType = 'notAnEventGenerator'; + expect(policy.allow({ key: 'messages' }, mockDomainObject)) + .toBeFalsy(); + }); + + it("allows the message view for Event Generators", function () { + testType = 'eventGenerator'; + expect(policy.allow({ key: 'messages' }, mockDomainObject)) + .toBeTruthy(); + }); + + it("returns true when the current view is not the Messages view", function () { + expect(policy.allow({ key: 'notMessages' }, mockDomainObject)) + .toBeTruthy(); + }); + }); + } +); \ No newline at end of file