From 5849f8afe26147474d38a5380239b02ad7fe3c25 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 16 Jun 2015 16:09:22 -0700 Subject: [PATCH] [Addressability] Add spec for BrowseObjectController Add spec for BrowseObjectController, added to track current view selection from/to query string params, WTD-1149. --- .../browse/src/BrowseObjectController.js | 1 + .../browse/test/BrowseObjectControllerSpec.js | 99 +++++++++++++++++++ platform/commonUI/browse/test/suite.json | 3 +- 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 platform/commonUI/browse/test/BrowseObjectControllerSpec.js diff --git a/platform/commonUI/browse/src/BrowseObjectController.js b/platform/commonUI/browse/src/BrowseObjectController.js index ed94fe0c01..c511898871 100644 --- a/platform/commonUI/browse/src/BrowseObjectController.js +++ b/platform/commonUI/browse/src/BrowseObjectController.js @@ -37,6 +37,7 @@ define( function selectViewIfMatching(view) { if (view.key === locationViewKey) { + $scope.representation = $scope.representation || {}; $scope.representation.selected = view; } } diff --git a/platform/commonUI/browse/test/BrowseObjectControllerSpec.js b/platform/commonUI/browse/test/BrowseObjectControllerSpec.js new file mode 100644 index 0000000000..e498c1dc12 --- /dev/null +++ b/platform/commonUI/browse/test/BrowseObjectControllerSpec.js @@ -0,0 +1,99 @@ +/***************************************************************************** + * 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,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ + + +define( + ["../src/BrowseObjectController"], + function (BrowseObjectController) { + "use strict"; + + describe("The browse object controller", function () { + var mockScope, + mockLocation, + mockRoute, + mockUnlisten, + controller; + + // Utility function; look for a $watch on scope and fire it + function fireWatch(expr, value) { + mockScope.$watch.calls.forEach(function (call) { + if (call.args[0] === expr) { + call.args[1](value); + } + }); + } + + beforeEach(function () { + mockScope = jasmine.createSpyObj( + "$scope", + [ "$on", "$watch" ] + ); + mockRoute = { current: { params: {} } }; + mockLocation = jasmine.createSpyObj( + "$location", + [ "path", "search" ] + ); + mockUnlisten = jasmine.createSpy("unlisten"); + + mockScope.$on.andReturn(mockUnlisten); + + controller = new BrowseObjectController( + mockScope, + mockLocation, + mockRoute + ); + }); + + it("updates query parameters when selected view changes", function () { + fireWatch("representation.selected.key", "xyz"); + expect(mockLocation.search).toHaveBeenCalledWith('view', "xyz"); + + // Exercise the Angular workaround + mockScope.$on.mostRecentCall.args[1](); + expect(mockUnlisten).toHaveBeenCalled(); + }); + + it("sets the active view from query parameters", function () { + var mockDomainObject = jasmine.createSpyObj( + "domainObject", + ['getId', 'getModel', 'getCapability', 'useCapability'] + ), + testViews = [ + { key: 'abc' }, + { key: 'def', someKey: 'some value' }, + { key: 'xyz' } + ]; + + mockDomainObject.useCapability.andCallFake(function (c) { + return (c === 'view') && testViews; + }); + mockLocation.search.andReturn({ view: 'def' }); + + fireWatch('domainObject', mockDomainObject); + expect(mockScope.representation.selected) + .toEqual(testViews[1]); + }); + + }); + } +); diff --git a/platform/commonUI/browse/test/suite.json b/platform/commonUI/browse/test/suite.json index 21d76dae05..e36f345caa 100644 --- a/platform/commonUI/browse/test/suite.json +++ b/platform/commonUI/browse/test/suite.json @@ -1,5 +1,6 @@ [ "BrowseController", + "BrowseObjectController", "creation/CreateAction", "creation/CreateActionProvider", "creation/CreateMenuController", @@ -10,4 +11,4 @@ "navigation/NavigationService", "windowing/FullscreenAction", "windowing/WindowTitler" -] \ No newline at end of file +]