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;
+    });
+
+
+  });
+
+
 });