From e2217e008a1325a0f5f2fc22256b6cbe575c7859 Mon Sep 17 00:00:00 2001 From: Pete Richards Date: Fri, 4 May 2018 13:26:10 -0700 Subject: [PATCH] don't allow plot or table view of summary widget (#2030) --- .../summaryWidget/SummaryWidgetViewPolicy.js | 45 +++++++++++++ src/plugins/summaryWidget/plugin.js | 11 +++- .../test/SummaryWidgetViewPolicySpec.js | 66 +++++++++++++++++++ 3 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 src/plugins/summaryWidget/SummaryWidgetViewPolicy.js create mode 100644 src/plugins/summaryWidget/test/SummaryWidgetViewPolicySpec.js diff --git a/src/plugins/summaryWidget/SummaryWidgetViewPolicy.js b/src/plugins/summaryWidget/SummaryWidgetViewPolicy.js new file mode 100644 index 0000000000..ee1cf2d595 --- /dev/null +++ b/src/plugins/summaryWidget/SummaryWidgetViewPolicy.js @@ -0,0 +1,45 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2017, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT 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 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([ + +], function ( + +) { + + /** + * Policy determining which views can apply to summary widget. Disables + * any view other than normal summary widget view. + */ + function SummaryWidgetViewPolicy() { + } + + SummaryWidgetViewPolicy.prototype.allow = function (view, domainObject) { + if (domainObject.getModel().type === 'summary-widget') { + return view.key === 'summary-widget-viewer'; + } + return true; + + }; + + return SummaryWidgetViewPolicy; +}); diff --git a/src/plugins/summaryWidget/plugin.js b/src/plugins/summaryWidget/plugin.js index 60ae749583..92220a7ae2 100755 --- a/src/plugins/summaryWidget/plugin.js +++ b/src/plugins/summaryWidget/plugin.js @@ -2,12 +2,14 @@ define([ './SummaryWidgetsCompositionPolicy', './src/telemetry/SummaryWidgetMetadataProvider', './src/telemetry/SummaryWidgetTelemetryProvider', - './src/views/SummaryWidgetViewProvider' + './src/views/SummaryWidgetViewProvider', + './SummaryWidgetViewPolicy' ], function ( SummaryWidgetsCompositionPolicy, SummaryWidgetMetadataProvider, SummaryWidgetTelemetryProvider, - SummaryWidgetViewProvider + SummaryWidgetViewProvider, + SummaryWidgetViewPolicy ) { function plugin() { @@ -87,6 +89,11 @@ define([ openmct.legacyExtension('policies', {category: 'composition', implementation: SummaryWidgetsCompositionPolicy, depends: ['openmct'] }); + openmct.legacyExtension('policies', { + category: 'view', + implementation: SummaryWidgetViewPolicy, + depends: ['openmct'] + }); openmct.telemetry.addProvider(new SummaryWidgetMetadataProvider(openmct)); openmct.telemetry.addProvider(new SummaryWidgetTelemetryProvider(openmct)); openmct.objectViews.addProvider(new SummaryWidgetViewProvider(openmct)); diff --git a/src/plugins/summaryWidget/test/SummaryWidgetViewPolicySpec.js b/src/plugins/summaryWidget/test/SummaryWidgetViewPolicySpec.js new file mode 100644 index 0000000000..71ec566c8f --- /dev/null +++ b/src/plugins/summaryWidget/test/SummaryWidgetViewPolicySpec.js @@ -0,0 +1,66 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2017, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT 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 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([ + '../SummaryWidgetViewPolicy' +], function ( + SummaryWidgetViewPolicy +) { + + describe('SummaryWidgetViewPolicy', function () { + var policy; + var domainObject; + var view; + beforeEach(function () { + policy = new SummaryWidgetViewPolicy(); + domainObject = jasmine.createSpyObj('domainObject', [ + 'getModel' + ]); + domainObject.getModel.andReturn({}); + view = {}; + }); + + it('returns true for other object types', function () { + domainObject.getModel.andReturn({ + type: 'random' + }); + expect(policy.allow(view, domainObject)).toBe(true); + }); + + it('allows summary widget view for summary widgets', function () { + domainObject.getModel.andReturn({ + type: 'summary-widget' + }); + view.key = 'summary-widget-viewer'; + expect(policy.allow(view, domainObject)).toBe(true); + }); + + it('disallows other views for summary widgets', function () { + domainObject.getModel.andReturn({ + type: 'summary-widget' + }); + view.key = 'other view'; + expect(policy.allow(view, domainObject)).toBe(false); + }); + + }); +});