AMBARI-10827 JS error with toggling widget view. (ababiichuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2514cda0 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2514cda0 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2514cda0 Branch: refs/heads/trunk Commit: 2514cda00537319837be819a38f748a0f194f2a7 Parents: 11a09c5 Author: aBabiichuk <ababiic...@cybervisiontech.com> Authored: Wed Apr 29 14:59:11 2015 +0300 Committer: aBabiichuk <ababiic...@cybervisiontech.com> Committed: Wed Apr 29 14:59:11 2015 +0300 ---------------------------------------------------------------------- ambari-web/app/styles/application.less | 1 + .../configs/widgets/combo_config_widget_view.js | 2 +- .../configs/widgets/config_widget_view.js | 2 +- .../configs/widgets/list_config_widget_view.js | 2 +- .../widgets/slider_config_widget_view.js | 30 ++++++----- .../widgets/time_interval_spinner_view.js | 28 +++++----- .../widgets/combo_config_widget_view_test.js | 25 +++++++++ .../configs/widgets/config_widget_view_test.js | 12 +++++ .../widgets/slider_config_widget_view_test.js | 55 +++++++++++++++++++- .../widgets/time_interval_spinner_view_test.js | 47 +++++++++++++++++ 10 files changed, 176 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/app/styles/application.less ---------------------------------------------------------------------- diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less index 271771d..8cd22c4 100644 --- a/ambari-web/app/styles/application.less +++ b/ambari-web/app/styles/application.less @@ -5630,6 +5630,7 @@ input[type="radio"].align-checkbox, input[type="checkbox"].align-checkbox { table-layout: fixed; // for width to be equally distributed margin: 0 -20px; .config-section { + overflow: hidden; height: 100%; padding: 18px; border: 1px solid #aaa; http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js index b3655e1..3686224 100644 --- a/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js +++ b/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js @@ -131,7 +131,7 @@ App.ComboConfigWidgetView = App.ConfigWidgetView.extend({ }, isValueCompatibleWithWidget: function() { - return this.get('content.valuesList').someProperty('configValue', this.get('config.value')); + return this._super() && this.get('content.valuesList').someProperty('configValue', this.get('config.value')); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/app/views/common/configs/widgets/config_widget_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/widgets/config_widget_view.js b/ambari-web/app/views/common/configs/widgets/config_widget_view.js index 37d2c9c..6b7dda4 100644 --- a/ambari-web/app/views/common/configs/widgets/config_widget_view.js +++ b/ambari-web/app/views/common/configs/widgets/config_widget_view.js @@ -282,7 +282,7 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo * @returns {boolean} */ isValueCompatibleWithWidget: function() { - return true + return this.get('config.isValid'); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/app/views/common/configs/widgets/list_config_widget_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/widgets/list_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/list_config_widget_view.js index 3a5112c..aa154cf 100644 --- a/ambari-web/app/views/common/configs/widgets/list_config_widget_view.js +++ b/ambari-web/app/views/common/configs/widgets/list_config_widget_view.js @@ -261,7 +261,7 @@ App.ListConfigWidgetView = App.ConfigWidgetView.extend({ }, isValueCompatibleWithWidget: function() { - return this.get('options').someProperty('value', this.get('config.value')); + return this._super() && this.get('options').someProperty('value', this.get('config.value')); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js index 394ad6a..5634319 100644 --- a/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js +++ b/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js @@ -446,19 +446,25 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({ }.observes('parentView.content.isActive', 'parentView.parentView.tab.isActive'), isValueCompatibleWithWidget: function() { - var configValue = this.get('parseFunction')(this.get('config.value')); - if (this.get('config.stackConfigProperty.valueAttributes.minimum')) { - var min = this.get('parseFunction')(this.get('config.stackConfigProperty.valueAttributes.minimum')); - if (configValue < min) return false; - } - if (this.get('config.stackConfigProperty.valueAttributes.maximum')) { - var max = this.get('parseFunction')(this.get('config.stackConfigProperty.valueAttributes.maximum')); - if (configValue > max) return false; - } - if (this.get('config.stackConfigProperty.valueAttributes.step')) { - if (configValue % this.get('config.stackConfigProperty.valueAttributes.increment_step') != 0) return false; + if (this._super()) { + if (!this.get('validateFunction')(this.get('config.value'))) { + return false; + } + var configValue = this.get('parseFunction')(this.get('config.value')); + if (this.get('config.stackConfigProperty.valueAttributes.minimum')) { + var min = this.get('parseFunction')(this.get('config.stackConfigProperty.valueAttributes.minimum')); + if (configValue < min) return false; + } + if (this.get('config.stackConfigProperty.valueAttributes.maximum')) { + var max = this.get('parseFunction')(this.get('config.stackConfigProperty.valueAttributes.maximum')); + if (configValue > max) return false; + } + if (this.get('config.stackConfigProperty.valueAttributes.increment_step')) { + if (configValue % this.get('parseFunction')(this.get('config.stackConfigProperty.valueAttributes.increment_step')) != 0) return false; + } + return true; } - return true + return false; } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js b/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js index 40a88dc..fb5879d 100644 --- a/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js +++ b/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js @@ -237,18 +237,22 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({ }, isValueCompatibleWithWidget: function() { - var configValue = parseInt(this.get('config.value')); - if (this.get('config.stackConfigProperty.valueAttributes.minimum')) { - var min = parseInt(this.get('config.stackConfigProperty.valueAttributes.minimum')); - if (configValue < min) return false; - } - if (this.get('config.stackConfigProperty.valueAttributes.maximum')) { - var max = parseInt(this.get('config.stackConfigProperty.valueAttributes.maximum')); - if (configValue > max) return false; - } - if (this.get('config.stackConfigProperty.valueAttributes.step')) { - if (configValue % this.get('config.stackConfigProperty.valueAttributes.increment_step') != 0) return false; + if (this._super()) { + var configValue = parseInt(this.get('config.value')); + if (isNaN(configValue)) return false; + if (this.get('config.stackConfigProperty.valueAttributes.minimum')) { + var min = parseInt(this.get('config.stackConfigProperty.valueAttributes.minimum')); + if (configValue < min) return false; + } + if (this.get('config.stackConfigProperty.valueAttributes.maximum')) { + var max = parseInt(this.get('config.stackConfigProperty.valueAttributes.maximum')); + if (configValue > max) return false; + } + if (this.get('config.stackConfigProperty.valueAttributes.increment_step')) { + if (configValue % this.get('config.stackConfigProperty.valueAttributes.increment_step') != 0) return false; + } + return true; } - return true + return false; } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/test/views/common/configs/widgets/combo_config_widget_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/common/configs/widgets/combo_config_widget_view_test.js b/ambari-web/test/views/common/configs/widgets/combo_config_widget_view_test.js index 7e8a768..4f66c57 100644 --- a/ambari-web/test/views/common/configs/widgets/combo_config_widget_view_test.js +++ b/ambari-web/test/views/common/configs/widgets/combo_config_widget_view_test.js @@ -148,4 +148,29 @@ describe('App.ComboConfigWidgetView', function() { }); }); }); + + describe('#isValueCompatibleWithWidget()', function() { + beforeEach(function() { + this.view.set('content', {}); + this.view.set('config', {}); + }); + it('pass validation', function() { + this.view.set('config.isValid', true); + this.view.set('config.value', 'v1'); + this.view.set('content.valuesList', [{configValue: 'v1'}, {configValue: 'v2'}]); + expect(this.view.isValueCompatibleWithWidget()).to.be.true; + }); + + it('fail validation by isValid', function() { + this.view.set('config.isValid', false); + expect(this.view.isValueCompatibleWithWidget()).to.be.false; + }); + + it('fail validation value that missing from list', function() { + this.view.set('config.isValid', true); + this.view.set('config.value', 'v3'); + this.view.set('content.valuesList', [{configValue: 'v1'}, {configValue: 'v2'}]); + expect(this.view.isValueCompatibleWithWidget()).to.be.false; + }); + }); }); http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js b/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js index 2165fac..ea4f72f 100644 --- a/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js +++ b/ambari-web/test/views/common/configs/widgets/config_widget_view_test.js @@ -218,4 +218,16 @@ describe('App.ConfigWidgetView', function () { }); }); + + describe('#isValueCompatibleWithWidget()', function() { + it('pass validation', function() { + view.set('config.isValid', true); + expect(view.isValueCompatibleWithWidget()).to.be.true; + }); + + it('fail validation', function() { + view.set('config.isValid', false); + expect(view.isValueCompatibleWithWidget()).to.be.false; + }); + }); }); http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/test/views/common/configs/widgets/slider_config_widget_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/common/configs/widgets/slider_config_widget_view_test.js b/ambari-web/test/views/common/configs/widgets/slider_config_widget_view_test.js index 40874bc..d96743a 100644 --- a/ambari-web/test/views/common/configs/widgets/slider_config_widget_view_test.js +++ b/ambari-web/test/views/common/configs/widgets/slider_config_widget_view_test.js @@ -17,7 +17,7 @@ */ var App = require('app'); - +var validator = require('utils/validator'); var viewInt, viewFloat, viewPercent; describe('App.SliderConfigWidgetView', function () { @@ -370,4 +370,57 @@ describe('App.SliderConfigWidgetView', function () { }); }); + describe('#isValueCompatibleWithWidget', function() { + var stackConfigProperty = null; + + beforeEach(function() { + viewInt.set('config', {}); + stackConfigProperty = App.StackConfigProperty.createRecord({name: 'p1', valueAttributes: {minimum: 1, maximum: 10, increment_step: 4, type: 'int'}}); + viewInt.set('config.stackConfigProperty', stackConfigProperty); + viewInt.set('config.isValid', true); + }); + + it ('fail by config validation', function() { + viewInt.set('config.isValid', false); + expect(viewInt.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail by view validation', function() { + viewInt.set('config.value', 'a'); + expect(viewInt.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail by view validation int', function() { + viewInt.set('config.value', '2.2'); + expect(viewInt.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail by view validation float', function() { + viewFloat.set('config.value', '2.2.2'); + viewFloat.set('validateFunction', validator.isValidFloat); + expect(viewFloat.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail: to large', function() { + viewInt.set('config.value', 12); + expect(viewInt.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail: to small', function() { + viewInt.set('config.value', 0); + expect(viewInt.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail: wrong step', function() { + viewInt.set('config.stackConfigProperty', stackConfigProperty); + viewInt.set('config.value', '3'); + expect(viewInt.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('ok', function() { + viewInt.set('config.value', 4); + expect(viewInt.isValueCompatibleWithWidget()).to.be.true; + }); + }); + }); http://git-wip-us.apache.org/repos/asf/ambari/blob/2514cda0/ambari-web/test/views/common/configs/widgets/time_interval_spinner_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/common/configs/widgets/time_interval_spinner_view_test.js b/ambari-web/test/views/common/configs/widgets/time_interval_spinner_view_test.js index dc3c6dd..fd80f3f 100644 --- a/ambari-web/test/views/common/configs/widgets/time_interval_spinner_view_test.js +++ b/ambari-web/test/views/common/configs/widgets/time_interval_spinner_view_test.js @@ -244,4 +244,51 @@ describe('App.TimeIntervalSpinnerView', function () { }); + describe('#isValueCompatibleWithWidget', function() { + var stackConfigProperty = null; + + beforeEach(function() { + view.set('config', {}); + stackConfigProperty = App.StackConfigProperty.createRecord({name: 'p1', valueAttributes: {minimum: 1, maximum: 10, increment_step: 4, type: 'int'}}); + view.set('config.stackConfigProperty', stackConfigProperty); + view.set('config.isValid', true); + }); + + it ('fail by config validation', function() { + view.set('config.isValid', false); + expect(view.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail by view validation', function() { + view.set('config.value', 'a'); + expect(view.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail by view validation int', function() { + view.set('config.value', '2.2'); + expect(view.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail: to large', function() { + view.set('config.value', 12); + expect(view.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail: to small', function() { + view.set('config.value', 0); + expect(view.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('fail: wrong step', function() { + view.set('config.stackConfigProperty', stackConfigProperty); + view.set('config.value', '3'); + expect(view.isValueCompatibleWithWidget()).to.be.false; + }); + + it ('ok', function() { + view.set('config.value', 4); + expect(view.isValueCompatibleWithWidget()).to.be.true; + }); + }); + }); \ No newline at end of file