You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2016/03/21 18:11:54 UTC
ambari git commit: AMBARI-15488. Text field is displayed instead of
Hive default query queue dropdown (alexantonenko)
Repository: ambari
Updated Branches:
refs/heads/branch-2.2 953150fea -> 3baba0ed0
AMBARI-15488. Text field is displayed instead of Hive default query queue dropdown (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/3baba0ed
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3baba0ed
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3baba0ed
Branch: refs/heads/branch-2.2
Commit: 3baba0ed0e1232ae06e13679d7678119210f8c58
Parents: 953150f
Author: Alex Antonenko <hi...@gmail.com>
Authored: Mon Mar 21 16:24:32 2016 +0200
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Mon Mar 21 19:11:49 2016 +0200
----------------------------------------------------------------------
.../configs/widgets/list_config_widget_view.js | 26 +++-
.../widgets/list_config_widget_view_test.js | 128 +++++++++++++++++++
2 files changed, 149 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/3baba0ed/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 568c405..1a4be62 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
@@ -111,23 +111,31 @@ App.ListConfigWidgetView = App.ConfigWidgetView.extend({
willInsertElement: function () {
this._super();
this.parseCardinality();
- this.calculateOptions();
- this.calculateInitVal();
+ this.onOptionsChangeBeforeRender();
},
didInsertElement: function () {
this.initPopover();
this._super();
this.toggleWidgetState();
+ this.onOptionsChangeAfterRender();
+ Em.run.next(function () {
+ App.tooltip(this.$('[rel="tooltip"]'));
+ });
+ },
+
+ onOptionsChangeBeforeRender: function () {
+ this.calculateOptions();
+ this.calculateInitVal();
+ },
+
+ onOptionsChangeAfterRender: function () {
this.addObserver('options.@each.isSelected', this, this.calculateVal);
this.addObserver('options.@each.isSelected', this, this.checkSelectedItemsCount);
if (this.isValueCompatibleWithWidget()) {
this.calculateVal();
}
this.checkSelectedItemsCount();
- Em.run.next(function () {
- App.tooltip(this.$('[rel="tooltip"]'));
- });
},
/**
@@ -148,6 +156,14 @@ App.ListConfigWidgetView = App.ConfigWidgetView.extend({
this.set('options', options);
},
+ entriesObserver: function () {
+ this.removeObserver('options.@each.isSelected', this, this.calculateVal);
+ this.removeObserver('options.@each.isSelected', this, this.checkSelectedItemsCount);
+ this.onOptionsChangeBeforeRender();
+ this.initIncompatibleWidgetAsTextBox();
+ this.onOptionsChangeAfterRender();
+ }.observes('config.stackConfigProperty.valueAttributes.entries.@each'),
+
/**
* Get initial value for <code>val</code> using calculated earlier <code>options</code>
* Used on <code>willInsertElement</code> and when user click on "Undo"-button (to restore default value)
http://git-wip-us.apache.org/repos/asf/ambari/blob/3baba0ed/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js b/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
index d72e38e..bd98787 100644
--- a/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
+++ b/ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
@@ -194,4 +194,132 @@ describe('App.ListConfigWidgetView', function () {
});
});
+ describe('#onOptionsChangeBeforeRender', function () {
+
+ beforeEach(function () {
+ sinon.stub(view, 'calculateOptions', Em.K);
+ sinon.stub(view, 'calculateInitVal', Em.K);
+ view.onOptionsChangeBeforeRender();
+ });
+
+ afterEach(function () {
+ view.calculateOptions.restore();
+ view.calculateInitVal.restore();
+ });
+
+ it('should calculate options array', function () {
+ expect(view.calculateOptions.calledOnce).to.be.true;
+ });
+
+ it('should calculate initial value', function () {
+ expect(view.calculateInitVal.calledOnce).to.be.true;
+ });
+
+ });
+
+ describe('#onOptionsChangeAfterRender', function () {
+
+ var cases = [
+ {
+ calculateValCallCount: 1,
+ isValueCompatibleWithWidget: true,
+ title: 'correct value'
+ },
+ {
+ calculateValCallCount: 0,
+ isValueCompatibleWithWidget: false,
+ title: 'incorrect value'
+ }
+ ];
+
+ cases.forEach(function (item) {
+
+ describe(item.title, function () {
+
+ beforeEach(function () {
+ sinon.stub(view, 'addObserver', Em.K);
+ sinon.stub(view, 'calculateVal', Em.K);
+ sinon.stub(view, 'checkSelectedItemsCount', Em.K);
+ sinon.stub(view, 'isValueCompatibleWithWidget').returns(item.isValueCompatibleWithWidget);
+ view.onOptionsChangeAfterRender();
+ });
+
+ afterEach(function () {
+ view.addObserver.restore();
+ view.calculateVal.restore();
+ view.checkSelectedItemsCount.restore();
+ view.isValueCompatibleWithWidget.restore();
+ });
+
+ it('observers registration', function () {
+ expect(view.addObserver.calledTwice).to.be.true;
+ });
+
+ it('calculateVal observer', function () {
+ expect(view.addObserver.firstCall.args).to.eql(['options.@each.isSelected', view, view.calculateVal]);
+ });
+
+ it('checkSelectedItemsCount observer', function () {
+ expect(view.addObserver.secondCall.args).to.eql(['options.@each.isSelected', view, view.checkSelectedItemsCount]);
+ });
+
+ it('value calculation', function () {
+ expect(view.calculateVal.callCount).to.equal(item.calculateValCallCount);
+ });
+
+ it('should check selected items count', function () {
+ expect(view.checkSelectedItemsCount.calledOnce).to.be.true;
+ });
+
+ });
+
+ });
+
+ });
+
+ describe('#entriesObserver', function () {
+
+ beforeEach(function () {
+ sinon.stub(view, 'removeObserver', Em.K);
+ sinon.stub(view, 'onOptionsChangeBeforeRender', Em.K);
+ sinon.stub(view, 'initIncompatibleWidgetAsTextBox', Em.K);
+ sinon.stub(view, 'onOptionsChangeAfterRender', Em.K);
+ view.entriesObserver();
+ });
+
+ afterEach(function () {
+ view.removeObserver.restore();
+ view.onOptionsChangeBeforeRender.restore();
+ view.initIncompatibleWidgetAsTextBox.restore();
+ view.onOptionsChangeAfterRender.restore();
+ });
+
+ it('observers removal', function () {
+ expect(view.removeObserver.calledTwice).to.be.true;
+ });
+
+ it('calculateVal observer', function () {
+ expect(view.removeObserver.firstCall.args).to.eql(['options.@each.isSelected', view, view.calculateVal]);
+ });
+
+ it('checkSelectedItemsCount observer', function () {
+ expect(view.removeObserver.secondCall.args).to.eql(['options.@each.isSelected', view, view.checkSelectedItemsCount]);
+ });
+
+ it('first options change handler', function () {
+ expect(view.onOptionsChangeBeforeRender.calledOnce).to.be.true;
+ });
+
+ it('incompatible value processing', function () {
+ expect(view.initIncompatibleWidgetAsTextBox.calledOnce).to.be.true;
+ });
+
+ it('second options change handler', function () {
+ expect(view.onOptionsChangeAfterRender.calledOnce).to.be.true;
+ });
+
+
+ });
+
+
});