Repository: ambari
Updated Branches:
  refs/heads/trunk 5ddb6c732 -> f5696614e


AMBARI-12254. Disable/hide 'Add Service' link on 'Stack' page during RU 
(onechiporenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f5696614
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f5696614
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f5696614

Branch: refs/heads/trunk
Commit: f5696614e2a9a75bc84ef983c84826b0565ceadf
Parents: 5ddb6c7
Author: Oleg Nechiporenko <onechipore...@apache.org>
Authored: Thu Jul 2 15:40:49 2015 +0300
Committer: Oleg Nechiporenko <onechipore...@apache.org>
Committed: Thu Jul 2 19:41:20 2015 +0300

----------------------------------------------------------------------
 ambari-web/app/styles/application.less          |  5 +++
 .../main/admin/stack_upgrade/services.hbs       |  2 +-
 .../main/admin/stack_upgrade/services_view.js   |  8 +++-
 .../admin/stack_upgrade/services_view_test.js   | 41 ++++++++++++++++++--
 4 files changed, 51 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f5696614/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less 
b/ambari-web/app/styles/application.less
index 42ca66e..6313a01 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -5717,6 +5717,11 @@ input[type="radio"].align-checkbox, 
input[type="checkbox"].align-checkbox {
 .path-link {
   white-space: nowrap;
   cursor: pointer;
+  &.not-active-link:hover {
+    color: #999;
+    text-decoration: none;
+    cursor: default;
+  }
 }
 
 .bottom-border {

http://git-wip-us.apache.org/repos/asf/ambari/blob/f5696614/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs 
b/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
index 56d13bf..a87c50c 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
@@ -35,7 +35,7 @@
         {{#if service.isInstalled}}
           <span class="label label-success">{{t common.installed}}</span>
         {{else}}
-          <a class="path-link" {{action goToAddService service.serviceName 
target="view"}}>
+          <a {{bindAttr class=":path-link 
view.isAddServiceAvailable::not-active-link"}} {{action goToAddService 
service.serviceName target="view"}}>
             {{t services.service.add}}</a>
         {{/if}}
       </td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f5696614/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js 
b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
index db38a4c..edc4a36 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
@@ -22,6 +22,10 @@ var App = require('app');
 App.MainAdminStackServicesView = Em.View.extend({
   templateName: require('templates/main/admin/stack_upgrade/services'),
 
+  isAddServiceAvailable: function () {
+    return App.isAccessible('ADMIN');
+  }.property('App.supports.opsDuringRollingUpgrade', 'App.upgradeState', 
'App.isAdmin'),
+
   /**
    * @type {Array}
    */
@@ -44,7 +48,9 @@ App.MainAdminStackServicesView = Em.View.extend({
    * @param event
    */
   goToAddService: function (event) {
-    if (event.context == "KERBEROS") {
+    if (!App.isAccessible('ADMIN')) {
+      return;
+    } else if (event.context == "KERBEROS") {
       
App.router.get('mainAdminKerberosController').checkAndStartKerberosWizard();
       App.router.get('kerberosWizardController').setDBProperty('onClosePath', 
'main.admin.stackAndUpgrade.services');
     } else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/f5696614/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js 
b/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js
index 8e1f116..3154449 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js
@@ -48,29 +48,64 @@ describe('App.MainAdminStackServicesView', function () {
 
   describe("#goToAddService()" , function() {
     var mock = Em.Object.create({
-      checkAndStartKerberosWizard: Em.K,
-      setDBProperty: sinon.spy()
-    });
+        checkAndStartKerberosWizard: Em.K,
+        setDBProperty: sinon.spy()
+      }),
+      isAccessibleMock;
     beforeEach(function() {
       sinon.stub(App.get('router'), 'transitionTo', Em.K);
       sinon.stub(App.router, 'get').returns(mock);
       sinon.spy(mock, 'checkAndStartKerberosWizard');
+      isAccessibleMock = sinon.stub(App, 'isAccessible');
     });
     afterEach(function() {
       App.get('router').transitionTo.restore();
       App.router.get.restore();
       mock.checkAndStartKerberosWizard.restore();
+      App.isAccessible.restore();
+    });
+    it ("operations locked", function () {
+      isAccessibleMock.returns(false);
+      view.goToAddService();
+      expect(App.router.get.called).to.be.false;
+      expect(App.get('router').transitionTo.called).to.be.false;
     });
     it("routes to Add Service Wizard and set redirect path on wizard close", 
function() {
+      isAccessibleMock.returns(true);
       view.goToAddService({context: "serviceName"});
       expect(App.router.get.calledWith('addServiceController') && 
mock.setDBProperty.calledWith('onClosePath', 
'main.admin.stackAndUpgrade.services')).to.be.true;
       
expect(App.get('router').transitionTo.calledWith('main.serviceAdd')).to.be.true;
       expect(mock.get('serviceToInstall')).to.be.equal("serviceName");
     });
     it("routes to Security Wizard", function() {
+      isAccessibleMock.returns(true);
       view.goToAddService({context: "KERBEROS"});
       expect(App.router.get.calledWith('kerberosWizardController') && 
mock.setDBProperty.calledWith('onClosePath', 
'main.admin.stackAndUpgrade.services')).to.be.true;
       expect(mock.checkAndStartKerberosWizard.calledOnce).to.be.true;
     });
   });
+
+  describe('#isAddServiceAvailable', function () {
+
+    var cases = [true, false],
+      titleTemplate = 'should be {0}',
+      isAccessibleMock;
+
+    beforeEach(function() {
+      isAccessibleMock = sinon.stub(App, 'isAccessible');
+    });
+
+    afterEach(function() {
+      App.isAccessible.restore();
+    });
+
+    cases.forEach(function (item) {
+      it(titleTemplate.format(item.toString()), function () {
+        isAccessibleMock.returns(item);
+        view.propertyDidChange('isAddServiceAvailable');
+        expect(view.get('isAddServiceAvailable')).to.equal(item);
+      });
+    });
+
+  });
 });

Reply via email to