AMBARI-14515. Improve Ambari UI UT (p.3) (onechiporenko)

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

Branch: refs/heads/trunk
Commit: a487e5018d320bb0943df0a27fcd6242e084ff80
Parents: 376fc6f
Author: Oleg Nechiporenko <onechipore...@apache.org>
Authored: Tue Dec 29 11:55:40 2015 +0200
Committer: Oleg Nechiporenko <onechipore...@apache.org>
Committed: Tue Dec 29 15:13:47 2015 +0200

----------------------------------------------------------------------
 ambari-web/test/app_test.js                     |  47 +-
 .../global/cluster_controller_test.js           | 160 +++--
 .../global/update_controller_test.js            |  13 +-
 ambari-web/test/controllers/installer_test.js   | 208 ++++--
 .../progress_popup_controller_test.js           | 111 +++-
 .../resourceManager/step3_controller_test.js    |  38 +-
 .../admin/highAvailability_controller_test.js   | 166 +++--
 .../admin/kerberos/step2_controller_test.js     |  30 +-
 .../admin/kerberos/step4_controller_test.js     |  23 +-
 .../admin/kerberos/step6_controller_test.js     |  22 +-
 .../controllers/main/admin/kerberos_test.js     | 102 ++-
 .../admin/stack_and_upgrade_controller_test.js  | 390 +++++++----
 .../definitions_configs_controller_test.js      |  63 +-
 ...anage_alert_notifications_controller_test.js |  31 +-
 .../heatmap_metrics/heatmap_metric_test.js      | 109 ++-
 .../controllers/main/charts/heatmap_test.js     |  22 +-
 .../dashboard/config_history_controller_test.js |  20 +-
 .../main/host/configs_service_test.js           |  16 +-
 .../test/controllers/main/host/details_test.js  | 656 ++++++++++++-------
 .../main/service/add_controller_test.js         | 109 ++-
 .../main/service/info/config_test.js            |  94 ++-
 .../test/controllers/main/service/item_test.js  | 141 ++--
 .../manage_config_groups_controller_test.js     | 137 +++-
 .../service/reassign/step1_controller_test.js   |  28 +-
 .../service/reassign/step4_controller_test.js   |  32 +-
 .../main/service/reassign_controller_test.js    |  16 +-
 .../widgets/create/step2_controller_test.js     | 302 ++++++---
 .../test/controllers/main/service_test.js       |  78 ++-
 .../controllers/main/views_controller_test.js   |   5 +-
 ambari-web/test/controllers/main_test.js        |  18 +-
 ambari-web/test/router_test.js                  |  38 +-
 31 files changed, 2202 insertions(+), 1023 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/app_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/app_test.js b/ambari-web/test/app_test.js
index dea2464..972f57f 100644
--- a/ambari-web/test/app_test.js
+++ b/ambari-web/test/app_test.js
@@ -103,12 +103,22 @@ describe('App', function () {
     ];
 
     testCases.forEach(function (test) {
-      it(test.title, function () {
-        sinon.stub(App.Service, 'find', function () {
-          return test.service;
+      describe(test.title, function () {
+
+        beforeEach(function () {
+          sinon.stub(App.Service, 'find', function () {
+            return test.service;
+          });
+        });
+
+        afterEach(function () {
+          App.Service.find.restore();
         });
-        expect(App.get('falconServerURL')).to.equal(test.result);
-        App.Service.find.restore();
+
+        it('App.falconServerURL is ' + test.result, function () {
+          expect(App.get('falconServerURL')).to.equal(test.result);
+        });
+
       });
     });
   });
@@ -219,19 +229,42 @@ describe('App', function () {
       })
     ];
 
-    it('distribute services by categories', function () {
+    beforeEach(function () {
       sinon.stub(App.StackService, 'find', function () {
         return stackServices;
       });
+    });
+
+    afterEach(function () {
+      App.StackService.find.restore();
+    });
 
+    it('App.services.all', function () {
       expect(App.get('services.all')).to.eql(['S1', 'S2', 'S3', 'S4', 'S5', 
'S6', 'S7']);
+    });
+
+    it('App.services.clientOnly', function () {
       expect(App.get('services.clientOnly')).to.eql(['S1']);
+    });
+
+    it('App.services.hasClient', function () {
       expect(App.get('services.hasClient')).to.eql(['S2']);
+    });
+
+    it('App.services.hasMaster', function () {
       expect(App.get('services.hasMaster')).to.eql(['S3']);
+    });
+
+    it('App.services.hasSlave', function () {
       expect(App.get('services.hasSlave')).to.eql(['S4']);
+    });
+
+    it('App.services.noConfigTypes', function () {
       expect(App.get('services.noConfigTypes')).to.eql(['S5']);
+    });
+
+    it('App.services.monitoring', function () {
       expect(App.get('services.monitoring')).to.eql(['S6']);
-      App.StackService.find.restore();
     });
   });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/global/cluster_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/cluster_controller_test.js 
b/ambari-web/test/controllers/global/cluster_controller_test.js
index c2f3498..a020b46 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -202,6 +202,7 @@ describe('App.clusterController', function () {
   });
 
   describe("#createKerberosAdminSession()", function() {
+
     beforeEach(function () {
       sinon.stub(App.ajax, 'send', function() {
         return {success: Em.K}
@@ -209,21 +210,24 @@ describe('App.clusterController', function () {
       sinon.stub(credentialUtils, 'createOrUpdateCredentials', function() {
         return $.Deferred().resolve().promise();
       });
+      this.stub = sinon.stub(App, 'get');
+      this.stub.withArgs('clusterName').returns('test');
     });
+
     afterEach(function () {
       App.ajax.send.restore();
       credentialUtils.createOrUpdateCredentials.restore();
+      App.get.restore();
     });
+
     it("KDC Store supports disabled, credentials updated via kdc session 
call", function() {
-      sinon.stub(App, 'get')
-        .withArgs('supports.storeKDCCredentials').returns(false)
-        .withArgs('clusterName').returns('test');
+      this.stub.withArgs('supports.storeKDCCredentials').returns(false);
       controller.createKerberosAdminSession({
         principal: 'admin',
         key: 'pass',
         type: 'persistent'
       }, {});
-      App.get.restore();
+
       expect(App.ajax.send.getCall(0).args[0]).to.eql({
         name: 'common.cluster.update',
         sender: controller,
@@ -238,15 +242,12 @@ describe('App.clusterController', function () {
       });
     });
     it("KDC Store supports enabled, credentials updated via credentials 
storage call", function() {
-      sinon.stub(App, 'get')
-        .withArgs('supports.storeKDCCredentials').returns(true)
-        .withArgs('clusterName').returns('test');
+      this.stub.withArgs('supports.storeKDCCredentials').returns(true);
       controller.createKerberosAdminSession({
         principal: 'admin',
         key: 'pass',
         type: 'persistent'
       }, {});
-      App.get.restore();
       expect(App.ajax.send.called).to.be.eql(false);
       
expect(credentialUtils.createOrUpdateCredentials.getCall(0).args).to.eql([
         'test', 'kdc.admin.credential', {
@@ -292,20 +293,36 @@ describe('App.clusterController', function () {
       App.get.restore();
     });
 
-    it('should check detailed repo version for HDP 2.2', function () {
-      sinon.stub(App, 
'get').withArgs('currentStackName').returns('HDP').withArgs('currentStackVersionNumber').returns('2.2');
-      controller.checkDetailedRepoVersion();
-      expect(App.ajax.send.calledOnce).to.be.true;
+    describe('should check detailed repo version for HDP 2.2', function () {
+
+      beforeEach(function () {
+        sinon.stub(App, 
'get').withArgs('currentStackName').returns('HDP').withArgs('currentStackVersionNumber').returns('2.2');
+      });
+
+      it('request is sent', function () {
+        controller.checkDetailedRepoVersion();
+        expect(App.ajax.send.calledOnce).to.be.true;
+      });
     });
 
     cases.forEach(function (item) {
-      it(item.title, function () {
-        sinon.stub(App, 'get', function (key) {
-          return item[key] || Em.get(App, key);
+      describe(item.title, function () {
+
+        beforeEach(function () {
+          sinon.stub(App, 'get', function (key) {
+            return item[key] || Em.get(App, key);
+          });
+          controller.checkDetailedRepoVersion();
         });
-        controller.checkDetailedRepoVersion();
-        expect(App.ajax.send.called).to.be.false;
-        
expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
+
+        it('request is not sent', function () {
+          expect(App.ajax.send.called).to.be.false;
+        });
+
+        it('App.isStormMetricsSupported is ' + item.isStormMetricsSupported, 
function () {
+          
expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
+        });
+
       });
     });
 
@@ -438,14 +455,18 @@ describe('App.clusterController', function () {
 
   describe("#restoreUpgradeState()", function() {
     var data = {upgradeData: {}};
-    var mock = {done: function(callback) {
-      callback(data.upgradeData);
-    }};
+    var mock = {
+      done: function (callback) {
+        callback(data.upgradeData);
+      }
+    };
     var upgradeController = Em.Object.create({
       restoreLastUpgrade: Em.K,
       initDBProperties: Em.K,
       loadUpgradeData: Em.K,
-      loadStackVersionsToModel: function(){return {done: Em.K};}
+      loadStackVersionsToModel: function () {
+        return {done: Em.K};
+      }
     });
 
     beforeEach(function () {
@@ -458,6 +479,7 @@ describe('App.clusterController', function () {
       sinon.spy(upgradeController, 'loadUpgradeData');
       sinon.spy(upgradeController, 'loadStackVersionsToModel');
     });
+
     afterEach(function () {
       mock.done.restore();
       controller.getAllUpgrades.restore();
@@ -468,31 +490,77 @@ describe('App.clusterController', function () {
       upgradeController.loadUpgradeData.restore();
       upgradeController.loadStackVersionsToModel.restore();
     });
-    it("has upgrade request", function() {
-      data.upgradeData = {items: [
-        {
-          Upgrade: {
-            request_id: 1
+
+    describe("has upgrade request", function() {
+
+      beforeEach(function () {
+        data.upgradeData = {items: [
+          {
+            Upgrade: {
+              request_id: 1
+            }
           }
-        }
-      ]};
-      controller.restoreUpgradeState();
-      expect(controller.getAllUpgrades.calledOnce).to.be.true;
-      expect(App.get('upgradeState')).to.equal('PENDING');
-      
expect(upgradeController.restoreLastUpgrade.calledWith(data.upgradeData.items[0])).to.be.true;
-      
expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
-      expect(upgradeController.initDBProperties.called).to.be.false;
-      expect(upgradeController.loadUpgradeData.called).to.be.false;
-    });
-    it("does not have upgrade request", function() {
-      data.upgradeData = {items: []};
-      controller.restoreUpgradeState();
-      expect(controller.getAllUpgrades.calledOnce).to.be.true;
-      expect(App.get('upgradeState')).to.equal('PENDING');
-      expect(upgradeController.restoreLastUpgrade.called).to.be.false;
-      
expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
-      expect(upgradeController.initDBProperties.calledOnce).to.be.true;
-      expect(upgradeController.loadUpgradeData.calledWith(true)).to.be.true;
+        ]};
+        controller.restoreUpgradeState();
+      });
+
+      it('getAllUpgrades is called once', function () {
+        expect(controller.getAllUpgrades.calledOnce).to.be.true;
+      });
+
+      it('upgradeState is PENDING', function () {
+        expect(App.get('upgradeState')).to.equal('PENDING');
+      });
+
+      it('restoreLastUpgrade is called with valid arguments', function () {
+        
expect(upgradeController.restoreLastUpgrade.calledWith(data.upgradeData.items[0])).to.be.true;
+      });
+
+      it('loadStackVersionsToModel is called with valid arguments', function 
() {
+        
expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
+      });
+
+      it('initDBProperties is not called', function () {
+        expect(upgradeController.initDBProperties.called).to.be.false;
+      });
+
+      it('loadUpgradeData is not called', function () {
+        expect(upgradeController.loadUpgradeData.called).to.be.false;
+      });
+
+    });
+
+    describe("does not have upgrade request", function() {
+
+      beforeEach(function () {
+        data.upgradeData = {items: []};
+        controller.restoreUpgradeState();
+      });
+
+      it('getAllUpgrades is called once', function () {
+        expect(controller.getAllUpgrades.calledOnce).to.be.true;
+      });
+
+      it('upgradeState is PENDING', function () {
+        expect(App.get('upgradeState')).to.equal('PENDING');
+      });
+
+      it('restoreLastUpgrade is not called', function () {
+        expect(upgradeController.restoreLastUpgrade.called).to.be.false;
+      });
+
+      it('loadStackVersionsToModel is called with valid arguments', function 
() {
+        
expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
+      });
+
+      it('initDBProperties is called once', function () {
+        expect(upgradeController.initDBProperties.calledOnce).to.be.true;
+      });
+
+      it('loadUpgradeData is called with valid arguments', function () {
+        expect(upgradeController.loadUpgradeData.calledWith(true)).to.be.true;
+      });
+
     });
   });
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/global/update_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/update_controller_test.js 
b/ambari-web/test/controllers/global/update_controller_test.js
index 807d99d..010e30a 100644
--- a/ambari-web/test/controllers/global/update_controller_test.js
+++ b/ambari-web/test/controllers/global/update_controller_test.js
@@ -34,18 +34,19 @@ describe('App.UpdateController', function () {
 
   describe('#getUrl()', function () {
 
-    it('testMode = true', function () {
-      App.set('testMode', true);
-      expect(controller.getUrl('test', '/real')).to.equal('test');
+    beforeEach(function () {
+      sinon.stub(App, 'get').withArgs('testMode').returns(false);
+    });
+
+    afterEach(function () {
+      App.get.restore();
     });
 
     it('testMode = false', function () {
-      App.set('testMode', false);
       expect(controller.getUrl('test', 
'/real')).to.equal('/api/v1/clusters//real');
     });
 
-    it('testMode = false', function () {
-      App.set('testMode', false);
+    it('testMode = false (2)', function () {
       controller.set('clusterName', 'mycluster');
       expect(controller.getUrl('test', 
'/real')).to.equal('/api/v1/clusters/mycluster/real');
     });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/installer_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/installer_test.js 
b/ambari-web/test/controllers/installer_test.js
index 06d4ca7..65b911c 100644
--- a/ambari-web/test/controllers/installer_test.js
+++ b/ambari-web/test/controllers/installer_test.js
@@ -462,17 +462,25 @@ describe('App.InstallerController', function () {
   });
 
   describe('#loadMap', function() {
-    it ('Should load cluster', function() {
+
+    describe('Should load cluster', function() {
       var loadCluster = false;
       var checker = {
         load: function() {
           loadCluster = true;
         }
       };
-      installerController.loadMap['0'][0].callback.call(checker);
-      expect(loadCluster).to.be.true;
+
+      beforeEach(function () {
+        installerController.loadMap['0'][0].callback.call(checker);
+      });
+
+      it('cluster info is loaded', function () {
+        expect(loadCluster).to.be.true;
+      });
     });
-    it ('Should load stacks', function() {
+
+    describe('Should load stacks', function() {
       var loadStacks = false;
       var checker = {
         loadStacks: function() {
@@ -483,52 +491,84 @@ describe('App.InstallerController', function () {
           };
         }
       };
-      installerController.loadMap['1'][0].callback.call(checker);
-      expect(loadStacks).to.be.true;
+
+      beforeEach(function () {
+        installerController.loadMap['1'][0].callback.call(checker);
+      });
+
+      it('stack info is loaded', function () {
+        expect(loadStacks).to.be.true;
+      });
     });
-    it ('Should load stacks async', function() {
+
+    describe ('Should load stacks async', function() {
       var loadStacksVersions = false;
       var checker = {
         loadStacksVersions: function() {
           loadStacksVersions = true;
         }
       };
-      installerController.loadMap['1'][1].callback.call(checker, 
true).then(function(data){
-        expect(data).to.be.true;
+
+      it('stack versions are loaded', function () {
+        installerController.loadMap['1'][1].callback.call(checker, 
true).then(function(data){
+          expect(data).to.be.true;
+        });
+        expect(loadStacksVersions).to.be.false;
       });
-      expect(loadStacksVersions).to.be.false;
     });
-    it ('Should load installOptions', function() {
-      var loadStacks = false;
+
+    describe('Should load installOptions', function() {
+      var installOptions = false;
       var checker = {
         load: function() {
-          loadStacks = true;
+          installOptions = true;
         }
       };
-      installerController.loadMap['2'][0].callback.call(checker);
-      expect(loadStacks).to.be.true;
+
+      beforeEach(function () {
+        installerController.loadMap['2'][0].callback.call(checker);
+      });
+
+      it('install option are loaded', function () {
+        expect(installOptions).to.be.true;
+      });
     });
-    it ('Should load loadConfirmedHosts', function() {
+
+    describe('Should load loadConfirmedHosts', function() {
       var loadConfirmedHosts = false;
       var checker = {
         loadConfirmedHosts: function() {
           loadConfirmedHosts = true;
         }
       };
-      installerController.loadMap['3'][0].callback.call(checker);
-      expect(loadConfirmedHosts).to.be.true;
+
+      beforeEach(function () {
+        installerController.loadMap['3'][0].callback.call(checker);
+      });
+
+      it('confirmed hosts are loaded', function () {
+        expect(loadConfirmedHosts).to.be.true;
+      });
     });
-    it ('Should load loadServices', function() {
+
+    describe('Should load loadServices', function() {
       var loadServices = false;
       var checker = {
         loadServices: function() {
           loadServices = true;
         }
       };
-      installerController.loadMap['4'][0].callback.call(checker);
-      expect(loadServices).to.be.true;
+
+      beforeEach(function () {
+        installerController.loadMap['4'][0].callback.call(checker);
+      });
+
+      it('services are loaded', function () {
+        expect(loadServices).to.be.true;
+      });
     });
-    it ('Should load loadServices', function() {
+
+    describe('Should load loadServices (2)', function() {
       var setSkipSlavesStep = false;
       var loadMasterComponentHosts = false;
       var loadConfirmedHosts = false;
@@ -548,14 +588,30 @@ describe('App.InstallerController', function () {
           loadRecommendations = true;
         }
       };
-      installerController.loadMap['5'][0].callback.call(checker);
-      expect(loadConfirmedHosts).to.be.true;
-      expect(setSkipSlavesStep).to.be.true;
-      expect(loadMasterComponentHosts).to.be.true;
-      expect(loadRecommendations).to.be.true;
+
+      beforeEach(function () {
+        installerController.loadMap['5'][0].callback.call(checker);
+      });
+
+      it('confirmed hosts are loaded', function() {
+        expect(loadConfirmedHosts).to.be.true;
+      });
+
+      it('`skipSlavesStep` is loaded', function() {
+        expect(setSkipSlavesStep).to.be.true;
+      });
+
+      it('master components hosts are loaded', function() {
+        expect(loadMasterComponentHosts).to.be.true;
+      });
+
+      it('recommendations are loaded', function() {
+        expect(loadRecommendations).to.be.true;
+      });
 
     });
-    it ('Should load serviceConfigGroups', function() {
+
+    describe ('Should load serviceConfigGroups', function() {
       var loadServiceConfigGroups = false;
       var loadServiceConfigProperties = false;
       var loadCurrentHostGroups = false;
@@ -579,14 +635,34 @@ describe('App.InstallerController', function () {
           loadConfigThemes = true;
         }
       };
-      installerController.loadMap['7'][0].callback.call(checker);
-      expect(loadServiceConfigGroups).to.be.true;
-      expect(loadServiceConfigProperties).to.be.true;
-      expect(loadCurrentHostGroups).to.be.true;
-      expect(loadRecommendationsConfigs).to.be.true;
-      expect(loadConfigThemes).to.be.true;
+
+      beforeEach(function () {
+        installerController.loadMap['7'][0].callback.call(checker);
+      });
+
+      it('config groups are loaded', function () {
+        expect(loadServiceConfigGroups).to.be.true;
+      });
+
+      it('config properties are loaded', function () {
+        expect(loadServiceConfigProperties).to.be.true;
+      });
+
+      it('current host groups are loaded', function () {
+        expect(loadCurrentHostGroups).to.be.true;
+      });
+
+      it('recommendations are loaded', function () {
+        expect(loadRecommendationsConfigs).to.be.true;
+      });
+
+      it('config themes are loaded', function () {
+        expect(loadConfigThemes).to.be.true;
+      });
+
     });
-    it ('Should load clients', function() {
+
+    describe('Should load clients', function() {
       var loadSlaveComponentHosts = false;
       var loadClients = false;
       var loadRecommendations = false;
@@ -602,11 +678,25 @@ describe('App.InstallerController', function () {
           loadRecommendations = true;
         }
       };
-      installerController.loadMap['6'][0].callback.call(checker);
-      expect(loadSlaveComponentHosts).to.be.true;
-      expect(loadClients).to.be.true;
-      expect(loadRecommendations).to.be.true;
+
+      beforeEach(function () {
+        installerController.loadMap['6'][0].callback.call(checker);
+      });
+
+      it('slave components hosts are loaded', function () {
+        expect(loadSlaveComponentHosts).to.be.true;
+      });
+
+      it('clients are loaded', function () {
+        expect(loadClients).to.be.true;
+      });
+
+      it('recommendations are loaded', function () {
+        expect(loadRecommendations).to.be.true;
+      });
+
     });
+
   });
 
   describe('#removeHosts', function() {
@@ -1121,18 +1211,34 @@ describe('App.InstallerController', function () {
     ];
 
     tests.forEach(function(test) {
-      it(test.m, function() {
-        sinon.stub(App.Stack, 'find').returns(test.stacks);
-        sinon.stub(App.router, 
'get').withArgs('clusterController.isCustomJDK').returns(test.isCustomJDK)
-          
.withArgs('clusterController.ambariProperties').returns(test.ambariProperties);
-        sinon.stub(App, 'showConfirmationPopup', Em.K);
-        var successCallback = sinon.spy();
-        installerController.validateJDKVersion(successCallback);
-        expect(successCallback.called).to.be.eql(test.successCallbackCalled);
-        expect(App.showConfirmationPopup.called).to.be.eql(test.popupCalled);
-        App.router.get.restore();
-        App.Stack.find.restore();
-        App.showConfirmationPopup.restore();
+
+      describe(test.m, function() {
+
+        var successCallback;
+
+        beforeEach(function ()  {
+          sinon.stub(App.Stack, 'find').returns(test.stacks);
+          sinon.stub(App.router, 
'get').withArgs('clusterController.isCustomJDK').returns(test.isCustomJDK)
+            
.withArgs('clusterController.ambariProperties').returns(test.ambariProperties);
+          sinon.stub(App, 'showConfirmationPopup', Em.K);
+          successCallback = sinon.spy();
+          installerController.validateJDKVersion(successCallback);
+        });
+
+        afterEach(function () {
+          App.router.get.restore();
+          App.Stack.find.restore();
+          App.showConfirmationPopup.restore();
+        });
+
+        it('successCallback is ' + (test.successCallbackCalled ? '' : 'not') + 
' called', function () {
+          
expect(successCallback.called).to.be.equal(test.successCallbackCalled);
+        });
+
+        it('App.showConfirmationPopup. is ' + (test.popupCalled ? '' : 'not') 
+ ' called', function () {
+          
expect(App.showConfirmationPopup.called).to.be.equal(test.popupCalled);
+        });
+
       });
     });
   });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
 
b/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
index bd8deb3..2a9a4d7 100644
--- 
a/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
+++ 
b/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
@@ -44,13 +44,32 @@ describe('App.HighAvailabilityProgressPopupController', 
function () {
       App.updater.immediateRun.restore();
     });
 
-    it('should start task polling', function () {
-      controller.startTaskPolling(1, 2);
-      expect(controller.get('isTaskPolling')).to.be.true;
-      expect(controller.get('taskInfo.id'), 2);
-      expect(controller.get('taskInfo.requestId'), 1);
-      expect(App.updater.run.calledOnce).to.be.true;
-      expect(App.updater.immediateRun.calledOnce).to.be.true;
+    describe('should start task polling', function () {
+
+      beforeEach(function () {
+        controller.startTaskPolling(1, 2);
+      });
+
+      it('isTaskPolling = true', function () {
+        expect(controller.get('isTaskPolling')).to.be.true;
+      });
+
+      it('taskInfo.id = 2', function () {
+        expect(controller.get('taskInfo.id'), 2);
+      });
+
+      it('taskInfo.requestId = 1', function () {
+        expect(controller.get('taskInfo.requestId'), 1);
+      });
+
+      it('App.updater.run is called once', function () {
+        expect(App.updater.run.calledOnce).to.be.true;
+      });
+
+      it('App.updater.immediateRun is called once', function () {
+        expect(App.updater.immediateRun.calledOnce).to.be.true;
+      });
+
     });
 
   });
@@ -125,17 +144,36 @@ describe('App.HighAvailabilityProgressPopupController', 
function () {
 
     cases.forEach(function (item) {
       var message = title.format(item.isTaskPolling ? '' : 'not ', 
item.status);
-      it(message, function () {
-        controller.updateTaskSuccessCallback({
-          Tasks: $.extend(tasks, {
-            status: item.status
-          })
+      describe(message, function () {
+
+        beforeEach(function () {
+          controller.updateTaskSuccessCallback({
+            Tasks: $.extend(tasks, {
+              status: item.status
+            })
+          });
         });
-        expect(controller.get('taskInfo.stderr')).to.equal('error');
-        expect(controller.get('taskInfo.stdout')).to.equal('output');
-        
expect(controller.get('taskInfo.outputLog')).to.equal('output-log.txt');
-        expect(controller.get('taskInfo.errorLog')).to.equal('error-log.txt');
-        expect(controller.get('isTaskPolling')).to.equal(item.isTaskPolling);
+
+        it('stderr is valid', function () {
+          expect(controller.get('taskInfo.stderr')).to.equal('error');
+        });
+
+        it('stdout is valid', function () {
+          expect(controller.get('taskInfo.stdout')).to.equal('output');
+        });
+
+        it('outputLog is valid', function () {
+          
expect(controller.get('taskInfo.outputLog')).to.equal('output-log.txt');
+        });
+
+        it('errorLog is valid', function () {
+          
expect(controller.get('taskInfo.errorLog')).to.equal('error-log.txt');
+        });
+
+        it('isTaskPolling is valid', function () {
+          expect(controller.get('isTaskPolling')).to.equal(item.isTaskPolling);
+        });
+
       });
     });
 
@@ -171,17 +209,36 @@ describe('App.HighAvailabilityProgressPopupController', 
function () {
     });
 
     cases.forEach(function (item) {
-      it(item.title, function () {
-        controller.setProperties({
-          requestIds: [1, 2],
-          stageId: item.stageId
+      describe(item.title, function () {
+
+        beforeEach(function () {
+          controller.setProperties({
+            requestIds: [1, 2],
+            stageId: item.stageId
+          });
+          controller.getHosts();
+        });
+
+        it('two requests are sent', function () {
+          expect(App.ajax.send.calledTwice).to.be.true;
         });
-        controller.getHosts();
-        expect(App.ajax.send.calledTwice).to.be.true;
-        expect(App.ajax.send.firstCall.args[0].name).to.equal(item.name);
-        expect(App.ajax.send.secondCall.args[0].name).to.equal(item.name);
-        
expect(App.ajax.send.firstCall.args[0].data.stageId).to.eql(item.stageIdPassed);
-        
expect(App.ajax.send.secondCall.args[0].data.stageId).to.eql(item.stageIdPassed);
+
+        it('1st call name is valid', function () {
+          expect(App.ajax.send.firstCall.args[0].name).to.equal(item.name);
+        });
+
+        it('2nd call name is valid', function () {
+          expect(App.ajax.send.secondCall.args[0].name).to.equal(item.name);
+        });
+
+        it('1st stageId is valid', function () {
+          
expect(App.ajax.send.firstCall.args[0].data.stageId).to.eql(item.stageIdPassed);
+        });
+
+        it('2nd stageId is valid', function () {
+          
expect(App.ajax.send.secondCall.args[0].data.stageId).to.eql(item.stageIdPassed);
+        });
+
       });
     });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
 
b/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
index fedcb8e..5b34dd4 100644
--- 
a/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
+++ 
b/ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
@@ -295,35 +295,59 @@ describe('App.RMHighAvailabilityWizardStep3Controller', 
function () {
           })
         ];
       });
+      controller.setDynamicConfigValues(configs, data);
     });
 
     afterEach(function () {
       App.HostComponent.find.restore();
     });
 
-    it('setting new RM properties values', function () {
-      controller.setDynamicConfigValues(configs, data);
+    it('yarn.resourcemanager.hostname.rm1 value', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.hostname.rm1').get('value')).to.equal('h0');
+    });
+    it('yarn.resourcemanager.hostname.rm1 recommendedValue', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.hostname.rm1').get('recommendedValue')).to.equal('h0');
+    });
+    it('yarn.resourcemanager.hostname.rm2 value', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.hostname.rm2').get('value')).to.equal('h1');
+    });
+    it('yarn.resourcemanager.hostname.rm2 recommendedValue', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.hostname.rm2').get('recommendedValue')).to.equal('h1');
-
+    });
+    it('yarn.resourcemanager.webapp.address.rm1 value', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.webapp.address.rm1').get('value')).to.equal('h0:1234');
+    });
+    it('yarn.resourcemanager.webapp.address.rm1 recommendedValue', function () 
{
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.webapp.address.rm1').get('recommendedValue')).to.equal('h0:1234');
+    });
+    it('yarn.resourcemanager.webapp.address.rm2 value', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.webapp.address.rm2').get('value')).to.equal('h1:1234');
+    });
+    it('yarn.resourcemanager.webapp.address.rm2 recommendedValue', function () 
{
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.webapp.address.rm2').get('recommendedValue')).to.equal('h1:1234');
-
+    });
+    it('yarn.resourcemanager.webapp.https.address.rm1 value', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.webapp.https.address.rm1').get('value')).to.equal('h0:4321');
+    });
+    it('yarn.resourcemanager.webapp.https.address.rm1 recommendedValue', 
function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.webapp.https.address.rm1').get('recommendedValue')).to.equal('h0:4321');
+    });
+    it('yarn.resourcemanager.webapp.https.address.rm2 value', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.webapp.https.address.rm2').get('value')).to.equal('h1:4321');
+    });
+    it('yarn.resourcemanager.webapp.https.address.rm2 recommendedValue', 
function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.webapp.https.address.rm2').get('recommendedValue')).to.equal('h1:4321');
-
+    });
+    it('yarn.resourcemanager.zk-address value', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.zk-address').get('value')).to.equal('h2:2222,h3:2222');
+    });
+    it('yarn.resourcemanager.zk-address recommendedValue', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.zk-address').get('recommendedValue')).to.equal('h2:2222,h3:2222');
     });
-
-    it('Setting new HAWQ RM properties values', function () {
+    it('yarn.resourcemanager.ha value', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.ha').get('value')).to.equal('h0:8032,h1:8032');
+    });
+    it('yarn.resourcemanager.ha recommendedValud', function () {
       expect(configs.configs.findProperty('name', 
'yarn.resourcemanager.scheduler.ha').get('recommendedValue')).to.equal('h0:8030,h1:8030');
     });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js 
b/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js
index 0a75d9f..1e3d140 100644
--- a/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/highAvailability_controller_test.js
@@ -38,40 +38,51 @@ describe('App.MainAdminHighAvailabilityController', 
function () {
       });
       sinon.spy(controller, "showErrorPopup");
     });
+
     afterEach(function () {
       App.router.transitionTo.restore();
       controller.showErrorPopup.restore();
       App.HostComponent.find.restore();
+      App.router.get.restore();
     });
 
-    it('NAMENODE in INSTALLED state', function () {
-      hostComponents = [
-        Em.Object.create({
-          componentName: 'NAMENODE',
-          workStatus: 'INSTALLED'
-        }),
-        Em.Object.create({
-          componentName: 'ZOOKEEPER_SERVER',
-          workStatus: 'INSTALLED'
-        }),
-        Em.Object.create({
-          componentName: 'ZOOKEEPER_SERVER',
-          workStatus: 'INSTALLED'
-        }),
-        Em.Object.create({
-          componentName: 'ZOOKEEPER_SERVER',
-          workStatus: 'INSTALLED'
-        })
-      ];
+    describe('NAMENODE in INSTALLED state', function () {
+      beforeEach(function () {
+        hostComponents = [
+          Em.Object.create({
+            componentName: 'NAMENODE',
+            workStatus: 'INSTALLED'
+          }),
+          Em.Object.create({
+            componentName: 'ZOOKEEPER_SERVER',
+            workStatus: 'INSTALLED'
+          }),
+          Em.Object.create({
+            componentName: 'ZOOKEEPER_SERVER',
+            workStatus: 'INSTALLED'
+          }),
+          Em.Object.create({
+            componentName: 'ZOOKEEPER_SERVER',
+            workStatus: 'INSTALLED'
+          })
+        ];
+        sinon.stub(App.router, 'get', function() {
+          return 3;
+        });
+        this.result = controller.enableHighAvailability();
+      });
 
-      sinon.stub(App.router, 'get', function(){
-        return 3;
+      it('enableHighAvailability result is false', function () {
+        expect(this.result).to.be.false;
       });
-      expect(controller.enableHighAvailability()).to.be.false;
-      expect(controller.showErrorPopup.calledOnce).to.be.true;
-      App.router.get.restore();
+
+      it('showErrorPopup is called once', function () {
+        expect(controller.showErrorPopup.calledOnce).to.be.true;
+      });
+
     });
-    it('Cluster has less than 3 ZOOKEPER_SERVER components', function () {
+
+    describe('Cluster has less than 3 ZOOKEPER_SERVER components', function () 
{
       hostComponents = [
         Em.Object.create({
           componentName: 'NAMENODE',
@@ -79,14 +90,24 @@ describe('App.MainAdminHighAvailabilityController', 
function () {
         })
       ];
 
-      sinon.stub(App.router, 'get', function(){
-        return 3;
+      beforeEach(function () {
+        sinon.stub(App.router, 'get', function(){
+          return 3;
+        });
+        this.result = controller.enableHighAvailability();
       });
-      expect(controller.enableHighAvailability()).to.be.false;
-      expect(controller.showErrorPopup.called).to.be.true;
-      App.router.get.restore();
+
+      it('enableHighAvailability result is false', function () {
+        expect(this.result).to.be.false;
+      });
+
+      it('showErrorPopup is called', function () {
+        expect(controller.showErrorPopup.called).to.be.true;
+      });
+
     });
-    it('total hosts number less than 3', function () {
+
+    describe('total hosts number less than 3', function () {
       hostComponents = [
         Em.Object.create({
           componentName: 'NAMENODE',
@@ -105,39 +126,62 @@ describe('App.MainAdminHighAvailabilityController', 
function () {
           workStatus: 'INSTALLED'
         })
       ];
-      sinon.stub(App.router, 'get', function () {
-        return 1;
+
+      beforeEach(function () {
+        sinon.stub(App.router, 'get', function () {
+          return 1;
+        });
+        this.result = controller.enableHighAvailability();
       });
-      expect(controller.enableHighAvailability()).to.be.false;
-      expect(controller.showErrorPopup.calledOnce).to.be.true;
-      App.router.get.restore();
+
+      it('enableHighAvailability result is false', function () {
+        expect(this.result).to.be.false;
+      });
+
+      it('showErrorPopup is called once', function () {
+        expect(controller.showErrorPopup.calledOnce).to.be.true;
+      });
+
     });
-    it('All checks passed', function () {
-      hostComponents = [
-        Em.Object.create({
-          componentName: 'NAMENODE',
-          workStatus: 'STARTED'
-        }),
-        Em.Object.create({
-          componentName: 'ZOOKEEPER_SERVER',
-          workStatus: 'INSTALLED'
-        }),
-        Em.Object.create({
-          componentName: 'ZOOKEEPER_SERVER',
-          workStatus: 'INSTALLED'
-        }),
-        Em.Object.create({
-          componentName: 'ZOOKEEPER_SERVER',
-          workStatus: 'INSTALLED'
-        })
-      ];
-      sinon.stub(App.router, 'get', function(){
-        return 3;
+
+    describe('All checks passed', function () {
+      beforeEach(function () {
+        hostComponents = [
+          Em.Object.create({
+            componentName: 'NAMENODE',
+            workStatus: 'STARTED'
+          }),
+          Em.Object.create({
+            componentName: 'ZOOKEEPER_SERVER',
+            workStatus: 'INSTALLED'
+          }),
+          Em.Object.create({
+            componentName: 'ZOOKEEPER_SERVER',
+            workStatus: 'INSTALLED'
+          }),
+          Em.Object.create({
+            componentName: 'ZOOKEEPER_SERVER',
+            workStatus: 'INSTALLED'
+          })
+        ];
+        sinon.stub(App.router, 'get', function() {
+          return 3;
+        });
+        this.result = controller.enableHighAvailability();
       });
-      expect(controller.enableHighAvailability()).to.be.true;
-      
expect(App.router.transitionTo.calledWith('main.services.enableHighAvailability')).to.be.true;
-      expect(controller.showErrorPopup.calledOnce).to.be.false;
-      App.router.get.restore();
+
+      it('enableHighAvailability result is true', function () {
+        expect(this.result).to.be.true;
+      });
+
+      it('user is moved to enable HA', function () {
+        
expect(App.router.transitionTo.calledWith('main.services.enableHighAvailability')).to.be.true;
+      });
+
+      it('showErrorPopup is not called', function () {
+        expect(controller.showErrorPopup.calledOnce).to.be.false;
+      });
+
     });
   });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/admin/kerberos/step2_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/admin/kerberos/step2_controller_test.js 
b/ambari-web/test/controllers/main/admin/kerberos/step2_controller_test.js
index c87c86c..275588d 100644
--- a/ambari-web/test/controllers/main/admin/kerberos/step2_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/kerberos/step2_controller_test.js
@@ -79,17 +79,27 @@ describe('App.KerberosWizardStep2Controller', function() {
     ];
 
     tests.forEach(function(test) {
-      it('Should trim values for properties ' + Em.keys(test.e).join(','), 
function() {
-        sinon.stub(App.StackService, 
'find').returns([Em.Object.create({serviceName: 'KERBEROS'})]);
-        controller.set('stepConfigs', [
-          App.ServiceConfig.create({
-            configs: test.stepConfigs.map(function(item) { return 
_createProperty(item[0], item[1], item[2]); })
-          })
-        ]);
-        var result = controller.createKerberosSiteObj('some-site', 
'random-tag');
-        App.StackService.find.restore();
+      describe('Should trim values for properties ' + 
Em.keys(test.e).join(','), function() {
+        var result;
+
+        beforeEach(function () {
+          sinon.stub(App.StackService, 
'find').returns([Em.Object.create({serviceName: 'KERBEROS'})]);
+          controller.set('stepConfigs', [
+            App.ServiceConfig.create({
+              configs: test.stepConfigs.map(function(item) { return 
_createProperty(item[0], item[1], item[2]); })
+            })
+          ]);
+          result = controller.createKerberosSiteObj('some-site', 'random-tag');
+        });
+
+        afterEach(function () {
+          App.StackService.find.restore();
+        });
+
         Em.keys(test.e).forEach(function(propertyName) {
-          
expect(result.properties[propertyName]).to.be.eql(test.e[propertyName]);
+          it(propertyName, function () {
+            
expect(result.properties[propertyName]).to.be.eql(test.e[propertyName]);
+          });
         });
       });
     });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js 
b/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
index 7b2f877..3f284f4 100644
--- a/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
@@ -319,12 +319,23 @@ describe('App.KerberosWizardStep4Controller', function() {
       ];
 
       tests.forEach(function(test) {
-        it('Security {0} configure identities step should be 
{1}'.format(!!test.securityEnabled ? 'enabled' : 'disabled', !!test.stepSkipped 
? 'skipped' : 'not skipped'), function() {
-          sinon.stub(App, 
'get').withArgs('isKerberosEnabled').returns(test.securityEnabled);
-          this.wizardController.checkSecurityStatus();
-          App.get.restore();
-          controller.loadStep();
-          
expect(App.router.send.calledWith('next')).to.be.eql(test.stepSkipped);
+        var message = 'Security {0} configure identities step should be 
{1}'.format(!!test.securityEnabled ? 'enabled' : 'disabled', !!test.stepSkipped 
? 'skipped' : 'not skipped');
+        describe(message, function() {
+
+          beforeEach(function () {
+            sinon.stub(App, 
'get').withArgs('isKerberosEnabled').returns(test.securityEnabled);
+            this.wizardController.checkSecurityStatus();
+            controller.loadStep();
+          });
+
+          afterEach(function () {
+            App.get.restore();
+          });
+
+          it('`send` is ' + (test.stepSkipped ? '' : 'not') + ' called with 
`next`', function () {
+            
expect(App.router.send.calledWith('next')).to.be.eql(test.stepSkipped);
+          });
+
         });
       }, this);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/admin/kerberos/step6_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/admin/kerberos/step6_controller_test.js 
b/ambari-web/test/controllers/main/admin/kerberos/step6_controller_test.js
index 780f896..8fe9bc2 100644
--- a/ambari-web/test/controllers/main/admin/kerberos/step6_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/kerberos/step6_controller_test.js
@@ -37,13 +37,21 @@ describe('App.KerberosWizardStep6Controller', function() {
     ];
 
     tests.forEach(function(test) {
-      it('YARN installed: {0}, ATS supported: {1} list of commands should be 
{2}'.format(test.yarnInstalled, test.doesATSSupportKerberos, 
test.commands.toString()), function () {
-        var controller = App.KerberosWizardStep6Controller.create({ commands: 
['stopServices'] });
-        sinon.stub(App, 
'get').withArgs('doesATSSupportKerberos').returns(test.doesATSSupportKerberos);
-        sinon.stub(App.Service, 'find').returns(test.yarnInstalled ? 
[Em.Object.create({serviceName: 'YARN'})] : []);
-        sinon.stub(App.HostComponent, 'find').returns(test.ATSInstalled ? 
[Em.Object.create({componentName: 'APP_TIMELINE_SERVER'})] : []);
-        controller.checkComponentsRemoval();
-        expect(controller.get('commands').toArray()).to.eql(test.commands);
+      var message = 'YARN installed: {0}, ATS supported: {1} list of commands 
should be {2}'.format(test.yarnInstalled, test.doesATSSupportKerberos, 
test.commands.toString());
+      describe(message, function () {
+        var controller;
+        beforeEach(function () {
+          controller = App.KerberosWizardStep6Controller.create({ commands: 
['stopServices'] });
+          sinon.stub(App, 
'get').withArgs('doesATSSupportKerberos').returns(test.doesATSSupportKerberos);
+          sinon.stub(App.Service, 'find').returns(test.yarnInstalled ? 
[Em.Object.create({serviceName: 'YARN'})] : []);
+          sinon.stub(App.HostComponent, 'find').returns(test.ATSInstalled ? 
[Em.Object.create({componentName: 'APP_TIMELINE_SERVER'})] : []);
+          controller.checkComponentsRemoval();
+        });
+
+        it('commands are valid', function () {
+          expect(controller.get('commands').toArray()).to.eql(test.commands);
+        });
+
       });
     });
   });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/admin/kerberos_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/kerberos_test.js 
b/ambari-web/test/controllers/main/admin/kerberos_test.js
index e05dfdb..d69e168 100644
--- a/ambari-web/test/controllers/main/admin/kerberos_test.js
+++ b/ambari-web/test/controllers/main/admin/kerberos_test.js
@@ -61,20 +61,30 @@ describe('App.MainAdminKerberosController', function() {
       });
     });
 
-    it('should take displayType from predefinedSiteProperties', function () {
-      sinon.stub(App.configsCollection, 'getAll').returns([
-        {
-          name: 'hadoop.security.auth_to_local',
-          displayType: 'multiLine'
-        }
-      ]);
-      expect(controller.prepareConfigProperties([
-        Em.Object.create({
-          name: 'hadoop.security.auth_to_local',
-          serviceName: 'HDFS'
-        })
-      ])[0].get('displayType')).to.equal('multiLine');
-      App.configsCollection.getAll.restore();
+    describe('should take displayType from predefinedSiteProperties', function 
() {
+
+      beforeEach(function () {
+        sinon.stub(App.configsCollection, 'getAll').returns([
+          {
+            name: 'hadoop.security.auth_to_local',
+            displayType: 'multiLine'
+          }
+        ]);
+      });
+
+      afterEach(function () {
+        App.configsCollection.getAll.restore();
+      });
+
+      it('displayType is valid', function () {
+        expect(controller.prepareConfigProperties([
+          Em.Object.create({
+            name: 'hadoop.security.auth_to_local',
+            serviceName: 'HDFS'
+          })
+        ])[0].get('displayType')).to.equal('multiLine');
+      });
+
     });
   });
 
@@ -227,17 +237,31 @@ describe('App.MainAdminKerberosController', function() {
         result: true
       }
     ].forEach(function (test) {
-          it(test.m, function () {
-            sinon.stub(App, 'get').returns(test.isKerberosEnabled);
-            controller.set('securityEnabled', test.securityEnabled);
-            controller.set('kdc_type', test.kdc_type);
-            controller.getKDCSessionState(mock.callback);
+          describe(test.m, function () {
+
+            beforeEach(function () {
+              sinon.stub(App, 'get').returns(test.isKerberosEnabled);
+              controller.set('securityEnabled', test.securityEnabled);
+              controller.set('kdc_type', test.kdc_type);
+              controller.getKDCSessionState(mock.callback);
+            });
+
+
             if (test.result) {
-              expect(mock.callback.calledOnce).to.be.false;
-              expect(App.ajax.send.calledOnce).to.be.true;
-            } else {
-              expect(mock.callback.calledOnce).to.be.true;
-              expect(App.ajax.send.calledOnce).to.be.false;
+              it('callback is not called', function () {
+                expect(mock.callback.calledOnce).to.be.false;
+              });
+              it('1 request is sent', function () {
+                expect(App.ajax.send.calledOnce).to.be.true;
+              });
+            }
+            else {
+              it('callback is called once', function () {
+                expect(mock.callback.calledOnce).to.be.true;
+              });
+              it('no request is sent', function () {
+                expect(App.ajax.send.calledOnce).to.be.false;
+              });
             }
           });
         });
@@ -281,17 +305,29 @@ describe('App.MainAdminKerberosController', function() {
         result: true
       }
     ].forEach(function (test) {
-          it(test.m, function () {
-            sinon.stub(App, 'get').returns(test.isKerberosEnabled);
-            controller.set('securityEnabled', test.securityEnabled);
-            controller.set('kdc_type', test.kdc_type);
-            controller.getSecurityType(mock.callback);
+          describe(test.m, function () {
+
+            beforeEach(function () {
+              sinon.stub(App, 'get').returns(test.isKerberosEnabled);
+              controller.set('securityEnabled', test.securityEnabled);
+              controller.set('kdc_type', test.kdc_type);
+              controller.getSecurityType(mock.callback);
+            });
+
             if (test.result) {
-              expect(mock.callback.calledOnce).to.be.false;
-              expect(App.ajax.send.calledOnce).to.be.true;
+              it('callback os not called', function () {
+                expect(mock.callback.calledOnce).to.be.false;
+              });
+              it('1 request is sent', function () {
+                expect(App.ajax.send.calledOnce).to.be.true;
+              });
             } else {
-              expect(mock.callback.calledOnce).to.be.true;
-              expect(App.ajax.send.calledOnce).to.be.false;
+              it('callback is called once', function () {
+                expect(mock.callback.calledOnce).to.be.true;
+              });
+              it('no request is sent', function () {
+                expect(App.ajax.send.calledOnce).to.be.false;
+              });
             }
           });
         });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js 
b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 392f899..2651437 100644
--- 
a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ 
b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -523,15 +523,11 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
   });
 
   describe("#upgrade()", function() {
-    before(function () {
+    var callArgs;
+
+    beforeEach(function () {
       sinon.stub(App.ajax, 'send', Em.K);
       sinon.stub(controller, 'setDBProperty', Em.K);
-    });
-    after(function () {
-      App.ajax.send.restore();
-      controller.setDBProperty.restore();
-    });
-    it("make ajax call", function() {
       controller.set('currentVersion', {
         repository_version: '2.2'
       });
@@ -539,12 +535,30 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
         value: '2.2',
         label: 'HDP-2.2'
       });
-      var callArgs = App.ajax.send.getCall(0).args[0];
+      callArgs = App.ajax.send.getCall(0).args[0];
+    });
+
+    afterEach(function () {
+      App.ajax.send.restore();
+      controller.setDBProperty.restore();
+    });
+
+    it("request-data is valid", function() {
       expect(callArgs.data).to.eql({"value": '2.2', "label": 'HDP-2.2'});
-      expect(callArgs.name).to.eql('admin.upgrade.start');
+    });
+    it('request-name is valid', function () {
+      expect(callArgs.name).to.equal('admin.upgrade.start');
+    });
+    it('request-sender is valid', function () {
       expect(callArgs.sender).to.eql(controller);
-      expect(callArgs.success).to.eql('upgradeSuccessCallback');
+    });
+    it('callback is valid', function () {
+      expect(callArgs.success).to.equal('upgradeSuccessCallback');
+    });
+    it('callback is called', function () {
       expect(callArgs.callback).to.be.called;
+    });
+    it('setDBProperty is called with valid data', function () {
       expect(controller.setDBProperty.calledWith('currentVersion', {
         repository_version: '2.2'
       })).to.be.true;
@@ -552,19 +566,12 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
   });
 
   describe("#upgradeSuccessCallback()", function() {
-    before(function () {
+
+    beforeEach(function () {
       sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
       sinon.stub(controller, 'openUpgradeDialog', Em.K);
       sinon.stub(controller, 'setDBProperties', Em.K);
       sinon.stub(controller, 'load', Em.K);
-    });
-    after(function () {
-      App.clusterStatus.setClusterStatus.restore();
-      controller.openUpgradeDialog.restore();
-      controller.setDBProperties.restore();
-      controller.load.restore();
-    });
-    it("open upgrade dialog", function() {
       var data = {
         resources: [
           {
@@ -575,11 +582,31 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
         ]
       };
       controller.upgradeSuccessCallback(data, {}, {label: 'HDP-2.2.1', 
isDowngrade: true});
+    });
+
+    afterEach(function () {
+      App.clusterStatus.setClusterStatus.restore();
+      controller.openUpgradeDialog.restore();
+      controller.setDBProperties.restore();
+      controller.load.restore();
+    });
+
+    it('load is called ocne', function() {
       expect(controller.load.calledOnce).to.be.true;
+    });
+    it('upgradeVersion is HDP-2.2.1', function() {
       expect(controller.get('upgradeVersion')).to.equal('HDP-2.2.1');
+    });
+    it('upgradeData is null', function() {
       expect(controller.get('upgradeData')).to.be.null;
+    });
+    it('isDowngrade is true', function() {
       expect(controller.get('isDowngrade')).to.be.true;
+    });
+    it('App.clusterStatus.setClusterStatus is called once', function() {
       expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
+    });
+    it('controller.openUpgradeDialog is called once', function() {
       expect(controller.openUpgradeDialog.calledOnce).to.be.true;
     });
   });
@@ -678,22 +705,46 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
         groups = controller.get('upgradeData.upgradeGroups');
       });
 
-      it("checking 1st group", function() {
-        expect(groups[0].get('status')).to.equal('COMPLETED');
-        expect(groups[0].get('progress_percent')).to.equal(100);
-        expect(groups[0].get('completed_task_count')).to.equal(3);
-        
expect(groups[0].get('upgradeItems')[0].get('status')).to.equal('COMPLETED');
-        
expect(groups[0].get('upgradeItems')[0].get('progress_percent')).to.equal(100);
-        expect(groups[0].get('hasExpandableItems')).to.be.true;
+      describe("checking 1st group", function() {
+        it('status is COMPLETED', function () {
+          expect(groups[0].get('status')).to.equal('COMPLETED');
+        });
+        it('progress_percent is 100', function () {
+          expect(groups[0].get('progress_percent')).to.equal(100);
+        });
+        it('completed_task_count = 3', function () {
+          expect(groups[0].get('completed_task_count')).to.equal(3);
+        });
+        it('upgradeItems.0.status is COMPLETED', function () {
+          
expect(groups[0].get('upgradeItems')[0].get('status')).to.equal('COMPLETED');
+        });
+        it('upgradeItems.0.progress_percent is 100', function () {
+          
expect(groups[0].get('upgradeItems')[0].get('progress_percent')).to.equal(100);
+        });
+        it('hasExpandableItems is true', function () {
+          expect(groups[0].get('hasExpandableItems')).to.be.true;
+        });
       });
 
-      it('checking 2nd group', function () {
-        expect(groups[1].get('status')).to.equal('ABORTED');
-        expect(groups[1].get('progress_percent')).to.equal(50);
-        expect(groups[1].get('completed_task_count')).to.equal(1);
-        
expect(groups[1].get('upgradeItems').mapProperty('status')).to.eql(['ABORTED', 
'PENDING']);
-        
expect(groups[1].get('upgradeItems').mapProperty('progress_percent')).to.eql([99,
 0]);
-        expect(groups[1].get('hasExpandableItems')).to.be.false;
+      describe('checking 2nd group', function () {
+        it('status is ABORTED', function () {
+          expect(groups[1].get('status')).to.equal('ABORTED');
+        });
+        it('progress_percent is 50', function () {
+          expect(groups[1].get('progress_percent')).to.equal(50);
+        });
+        it('completed_task_count = 1', function () {
+          expect(groups[1].get('completed_task_count')).to.equal(1);
+        });
+        it('upgradeItems.[].status = ["ABORTED", "PENDING"]', function () {
+          
expect(groups[1].get('upgradeItems').mapProperty('status')).to.eql(['ABORTED', 
'PENDING']);
+        });
+        it('upgradeItems.[].progress_percent = [99, 0]', function () {
+          
expect(groups[1].get('upgradeItems').mapProperty('progress_percent')).to.eql([99,
 0]);
+        });
+        it('hasExpandableItems is false', function () {
+          expect(groups[1].get('hasExpandableItems')).to.be.false;
+        });
       });
 
     });
@@ -802,14 +853,17 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
   });
 
   describe("#confirmDowngrade()", function() {
+
     before(function () {
       sinon.spy(App, 'showConfirmationPopup');
       sinon.stub(controller, 'downgrade', Em.K);
     });
+
     after(function () {
       App.showConfirmationPopup.restore();
       controller.downgrade.restore();
     });
+
     it("show confirmation popup", function() {
       controller.set('currentVersion', Em.Object.create({
         repository_version: '2.2',
@@ -826,8 +880,9 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
   });
 
   describe("#upgradeOptions()", function() {
-    before(function () {
-      sinon.spy(App, 'ModalPopup');
+    var version = Em.Object.create({displayName: 'HDP-2.2'});
+    beforeEach(function () {
+      sinon.spy(App.ModalPopup, 'show');
       sinon.spy(App, 'showConfirmationFeedBackPopup');
       sinon.stub(controller, 'getSupportedUpgradeTypes').returns({
         done: function (callback) {
@@ -846,38 +901,77 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
           status: 'CURRENT'
         })
       ]);
-    });
-    beforeEach(function () {
       controller.get('runningCheckRequests').clear();
     });
-    after(function () {
-      App.ModalPopup.restore();
+
+    afterEach(function () {
+      App.ModalPopup.show.restore();
       App.showConfirmationFeedBackPopup.restore();
       controller.runPreUpgradeCheck.restore();
       controller.getSupportedUpgradeTypes.restore();
       controller.get('upgradeMethods').setEach('selected', false);
       App.RepositoryVersion.find.restore();
     });
-    it("show confirmation popup", function() {
-      var version = Em.Object.create({displayName: 'HDP-2.2'});
-      controller.set('isDowngrade', false);
-      var popup = controller.upgradeOptions(false, version);
-      expect(App.ModalPopup.calledOnce).to.be.true;
-      
expect(controller.get('upgradeMethods').everyProperty('isCheckRequestInProgress')).to.be.true;
-      
expect(controller.get('upgradeMethods').someProperty('selected')).to.be.false;
-      controller.get('upgradeMethods')[0].set('selected', true);
-      var confirmPopup = popup.onPrimary();
-      expect(App.showConfirmationFeedBackPopup.calledOnce).to.be.true;
-      confirmPopup.onPrimary();
-      expect(controller.runPreUpgradeCheck.calledWith(version)).to.be.true;
-      expect( controller.get('runningCheckRequests')).to.have.length(1);
-    });
-    it("NOT show confirmation popup on Downgrade", function() {
-      var version = Em.Object.create({displayName: 'HDP-2.2'});
-      controller.set('isDowngrade', true);
-      controller.upgradeOptions(false, version);
-      expect(App.ModalPopup.calledOnce).to.be.false;
-      expect( controller.get('runningCheckRequests')).to.have.length(1);
+
+    describe("show confirmation popup", function() {
+
+      beforeEach(function () {
+        controller.set('isDowngrade', false);
+        this.popup = controller.upgradeOptions(false, version);
+      });
+
+      it('popup is shown', function () {
+        expect(App.ModalPopup.show.calledOnce).to.be.true;
+      });
+
+      it('all upgradeMethods have isCheckRequestInProgress = true', function 
() {
+        
expect(controller.get('upgradeMethods').everyProperty('isCheckRequestInProgress')).to.be.true;
+      });
+
+      it('upgradeMethods no one is selected', function () {
+        
expect(controller.get('upgradeMethods').someProperty('selected')).to.be.false;
+      });
+
+      describe('#popup.onPrimary', function () {
+
+        beforeEach(function () {
+          controller.get('upgradeMethods')[0].set('selected', true);
+          this.confirmPopup = this.popup.onPrimary();
+        });
+
+        it('showConfirmationFeedBackPopup is called once', function () {
+          expect(App.showConfirmationFeedBackPopup.calledOnce).to.be.true;
+        });
+
+        describe('#confirmPopup.onPrimary', function () {
+          beforeEach(function () {
+            this.confirmPopup.onPrimary();
+          });
+
+          it('runPreUpgradeCheck is called with correct version', function () {
+            
expect(controller.runPreUpgradeCheck.calledWith(version)).to.be.true;
+          });
+
+          it('runningCheckRequests has 1 item', function () {
+            expect(controller.get('runningCheckRequests')).to.have.length(1);
+          });
+
+        });
+
+      });
+
+    });
+
+    describe("NOT show confirmation popup on Downgrade", function() {
+      beforeEach(function () {
+        controller.set('isDowngrade', true);
+        controller.upgradeOptions(false, version);
+      });
+
+      it('runningCheckRequests has 1 item', function () {
+        expect( controller.get('runningCheckRequests')).to.have.length(1);
+      });
+
     });
   });
 
@@ -896,7 +990,7 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
   });
 
   describe("#downgrade()", function() {
-    before(function () {
+    beforeEach(function () {
       sinon.stub(App.ajax, 'send', Em.K);
       sinon.stub(controller, 'abortUpgrade');
       sinon.stub(App.RepositoryVersion, 'find').returns([
@@ -905,20 +999,25 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
           repositoryVersion: '2.3'
         })
       ]);
-    });
-    after(function () {
-      App.ajax.send.restore();
-      controller.abortUpgrade.restore();
-      App.RepositoryVersion.find.restore();
-    });
-    it("make ajax call", function() {
       controller.set('upgradeVersion', 'HDP-2.3');
       controller.set('upgradeType', 'NON_ROLLING');
       controller.downgrade(Em.Object.create({
         repository_version: '2.2',
         repository_name: 'HDP-2.2'
       }), {context: 'context'});
+      this.callArgs = App.ajax.send.getCall(0).args[0];
+    });
+
+    afterEach(function () {
+      App.ajax.send.restore();
+      controller.abortUpgrade.restore();
+      App.RepositoryVersion.find.restore();
+    });
+
+    it('abortUpgrade is called once', function() {
       expect(controller.abortUpgrade.calledOnce).to.be.true;
+    });
+    it('request-data is valid', function () {
       expect(App.ajax.send.getCall(0).args[0].data).to.eql({
         from: '2.3',
         value: '2.2',
@@ -926,11 +1025,18 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
         isDowngrade: true,
         upgradeType: "NON_ROLLING"
       });
-      var callArgs = App.ajax.send.getCall(0).args[0];
-      expect(callArgs.name).to.eql('admin.downgrade.start');
-      expect(callArgs.sender).to.eql(controller);
-      expect(callArgs.success).to.eql('upgradeSuccessCallback');
-      expect(callArgs.callback).to.be.called;
+    });
+    it('request-name is valid', function () {
+      expect(this.callArgs.name).to.eql('admin.downgrade.start');
+    });
+    it('request-sender is valid', function () {
+      expect(this.callArgs.sender).to.eql(controller);
+    });
+    it('callback is valid', function () {
+      expect(this.callArgs.success).to.eql('upgradeSuccessCallback');
+    });
+    it('callback is called', function () {
+      expect(this.callArgs.callback).to.be.called;
     });
   });
 
@@ -1001,28 +1107,39 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
   });
 
   describe("#setUpgradeItemStatus()", function () {
-    before(function () {
+    var item;
+    beforeEach(function () {
       sinon.stub(App.ajax, 'send', function () {
         return {
           done: Em.clb
         }
       });
-    });
-    after(function () {
-      App.ajax.send.restore();
-    });
-    it("valid request is sent", function () {
-      var item = Em.Object.create({
+      item = Em.Object.create({
         request_id: 1,
         stage_id: 1,
         group_id: 1
       });
       controller.setUpgradeItemStatus(item, 'PENDING');
-      var callArgs = App.ajax.send.getCall(0).args[0];
-      expect(callArgs.data).to.eql({upgradeId: 1, itemId: 1, groupId: 1, 
status: 'PENDING'});
-      expect(callArgs.name).to.eql('admin.upgrade.upgradeItem.setState');
-      expect(callArgs.sender).to.eql(controller);
-      expect(callArgs.callback).to.be.called;
+      this.callArgs = App.ajax.send.getCall(0).args[0];
+    });
+
+    afterEach(function () {
+      App.ajax.send.restore();
+    });
+
+    it('request-data is valid', function () {
+      expect(this.callArgs.data).to.eql({upgradeId: 1, itemId: 1, groupId: 1, 
status: 'PENDING'});
+    });
+    it('request-name is valid', function () {
+      expect(this.callArgs.name).to.eql('admin.upgrade.upgradeItem.setState');
+    });
+    it('request-sendeer is valid', function () {
+      expect(this.callArgs.sender).to.eql(controller);
+    });
+    it('callback is called', function () {
+      expect(this.callArgs.callback).to.be.called;
+    });
+    it('item.status is PENDING', function () {
       expect(item.get('status')).to.equal('PENDING');
     });
   });
@@ -1238,17 +1355,24 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
     });
 
     cases.forEach(function (item) {
-      it(item.title, function () {
-        sinon.stub(App.RepositoryVersion, 'find').returns([
-          Em.Object.create({
-            status: 'CURRENT',
-            stackVersionType: item.stackVersionType
-          })
-        ]);
-        controller.set('currentVersion', {
-          repository_version: item.repoVersion
+      describe(item.title, function () {
+
+        beforeEach(function () {
+          sinon.stub(App.RepositoryVersion, 'find').returns([
+            Em.Object.create({
+              status: 'CURRENT',
+              stackVersionType: item.stackVersionType
+            })
+          ]);
+          controller.set('currentVersion', {
+            repository_version: item.repoVersion
+          });
         });
-        
expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
+
+        it('isStormMetricsSupported is ' + (item.isStormMetricsSupported ? '' 
: 'not') + ' supported', function () {
+          
expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
+        });
+
       });
     });
 
@@ -1259,25 +1383,42 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
     beforeEach(function() {
       sinon.stub($, 'ajax', Em.K);
       controller.set('isFinalizeItem', true);
+      this.stub = sinon.stub(App, 'get');
     });
 
     afterEach(function () {
       $.ajax.restore();
+      this.stub.restore();
     });
 
-    it('should do ajax-request', function () {
-      sinon.stub(App, 'get').withArgs('upgradeState').returns('HOLDING');
-      controller.updateFinalize();
-      App.get.restore();
-      expect($.ajax.calledOnce).to.be.true;
+    describe('should do ajax-request', function () {
+
+      beforeEach(function () {
+        this.stub.withArgs('upgradeState').returns('HOLDING');
+        controller.updateFinalize();
+      });
+
+      it('request is sent', function () {
+        expect($.ajax.calledOnce).to.be.true;
+      });
+
     });
 
-    it('shouldn\'t do ajax-request', function () {
-      sinon.stub(App, 
'get').withArgs('upgradeState').returns('HOLDING_TIMEDOUT');
-      controller.updateFinalize();
-      App.get.restore();
-      expect(controller.get('isFinalizeItem')).to.be.false;
-      expect($.ajax.calledOnce).to.be.false;
+    describe('shouldn\'t do ajax-request', function () {
+
+      beforeEach(function () {
+        this.stub.withArgs('upgradeState').returns('HOLDING_TIMEDOUT');
+        controller.updateFinalize();
+      });
+
+      it('request is not sent', function () {
+        expect($.ajax.called).to.be.false;
+      });
+
+      it('isFinalizeItem is false', function () {
+        expect(controller.get('isFinalizeItem')).to.be.false;
+      });
+
     });
 
   });
@@ -1900,19 +2041,38 @@ describe('App.MainAdminStackAndUpgradeController', 
function() {
     });
 
     cases.forEach(function (item) {
-      it(item.title, function () {
-        var runningCheckRequests = controller.get('runningCheckRequests');
-        appGetMock.returns(item.supportsPreUpgradeCheck);
-        controller.runPreUpgradeCheckOnly({
-          type: item.type
+      describe(item.title, function () {
+        var runningCheckRequests;
+        beforeEach(function () {
+          runningCheckRequests = controller.get('runningCheckRequests');
+          appGetMock.returns(item.supportsPreUpgradeCheck);
+          controller.runPreUpgradeCheckOnly({
+            type: item.type
+          });
         });
-        expect(upgradeMethods.findProperty('type', 
'ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 
'action')).to.eql(item.ru);
-        expect(upgradeMethods.findProperty('type', 
'NON_ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 
'action')).to.eql(item.eu);
-        expect(App.ajax.send.callCount).to.equal(item.ajaxCallCount);
-        
expect(runningCheckRequests).to.have.length(item.runningCheckRequestsLength);
+
+        it('ROLLING properties', function () {
+          expect(upgradeMethods.findProperty('type', 
'ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 
'action')).to.eql(item.ru);
+        });
+
+        it('NON_ROLLING properties', function () {
+          expect(upgradeMethods.findProperty('type', 
'NON_ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 
'action')).to.eql(item.eu);
+        });
+
+        it(item.ajaxCallCount + ' requests sent', function () {
+          expect(App.ajax.send.callCount).to.equal(item.ajaxCallCount);
+        });
+
+        it('runningCheckRequests length is ' + 
item.runningCheckRequestsLength, function () {
+          
expect(runningCheckRequests).to.have.length(item.runningCheckRequestsLength);
+        });
+
         if (item.runningCheckRequestsLength) {
-          expect(runningCheckRequests[0].type).to.equal(item.type);
+          it('runningCheckRequests.type is ' + item.type, function () {
+            expect(runningCheckRequests[0].type).to.equal(item.type);
+          });
         }
+
       });
     });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
 
b/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
index 530c6ad..f39f7bf 100644
--- 
a/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
+++ 
b/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
@@ -474,8 +474,7 @@ describe('App.MainAlertDefinitionConfigsController', 
function () {
 
   describe('#changeType()', function () {
 
-    it('should disable and enable appropriate configs', function () {
-
+    beforeEach(function () {
       controller.set('allServices', ['service1', 'service2']);
       controller.set('allScopes', ['scope1', 'scope2']);
 
@@ -484,25 +483,57 @@ describe('App.MainAlertDefinitionConfigsController', 
function () {
         Em.Object.create({name: 'component', isDisabled: false}),
         Em.Object.create({name: 'scope', isDisabled: false})
       ]);
+    });
 
-      controller.changeType('Host Alert Definition');
+    describe('Host Alert Definition', function () {
 
-      expect(controller.get('configs').everyProperty('isDisabled', 
true)).to.be.true;
-      expect(controller.get('configs').findProperty('name', 
'service').get('options')).to.eql(['Ambari']);
-      expect(controller.get('configs').findProperty('name', 
'service').get('value')).to.equal('Ambari');
-      expect(controller.get('configs').findProperty('name', 
'component').get('value')).to.equal('Ambari Agent');
-      expect(controller.get('configs').findProperty('name', 
'scope').get('options')).to.eql(['Host']);
-      expect(controller.get('configs').findProperty('name', 
'scope').get('value')).to.equal('Host');
+      beforeEach(function () {
+        controller.changeType('Host Alert Definition');
+      });
 
-      controller.changeType('alert_type_service');
+      it('all configs are disabled', function () {
+        expect(controller.get('configs').everyProperty('isDisabled', 
true)).to.be.true;
+      });
+      it('service.options = ["Ambari"]', function () {
+        expect(controller.get('configs').findProperty('name', 
'service').get('options')).to.eql(['Ambari']);
+      });
+      it('service.value = "Ambari"', function () {
+        expect(controller.get('configs').findProperty('name', 
'service').get('value')).to.equal('Ambari');
+      });
+      it('component.value = "Ambari Agent"', function () {
+        expect(controller.get('configs').findProperty('name', 
'component').get('value')).to.equal('Ambari Agent');
+      });
+      it('scope.options = ["Host"]', function () {
+        expect(controller.get('configs').findProperty('name', 
'scope').get('options')).to.eql(['Host']);
+      });
+      it('isDisabled.value = "Host"', function () {
+        expect(controller.get('configs').findProperty('name', 
'scope').get('value')).to.equal('Host');
+      });
+    });
 
-      expect(controller.get('configs').everyProperty('isDisabled', 
false)).to.be.true;
-      expect(controller.get('configs').findProperty('name', 
'service').get('options')).to.eql(['service1', 'service2']);
-      expect(controller.get('configs').findProperty('name', 
'service').get('value')).to.equal('service1');
-      expect(controller.get('configs').findProperty('name', 
'component').get('value')).to.equal('No component');
-      expect(controller.get('configs').findProperty('name', 
'scope').get('options')).to.eql(['scope1', 'scope2']);
-      expect(controller.get('configs').findProperty('name', 
'scope').get('value')).to.equal('scope1');
+    describe('alert_type_service', function () {
 
+      beforeEach(function () {
+        controller.changeType('alert_type_service');
+      });
+      it('all configs are not disabled', function () {
+        expect(controller.get('configs').everyProperty('isDisabled', 
false)).to.be.true;
+      });
+      it('service.options = ["service1", "service2"]', function () {
+        expect(controller.get('configs').findProperty('name', 
'service').get('options')).to.eql(['service1', 'service2']);
+      });
+      it('service.value = "service1"', function () {
+        expect(controller.get('configs').findProperty('name', 
'service').get('value')).to.equal('service1');
+      });
+      it('component.value = "No component"', function () {
+        expect(controller.get('configs').findProperty('name', 
'component').get('value')).to.equal('No component');
+      });
+      it('scope.options = ["scope1", "scope2"]', function () {
+        expect(controller.get('configs').findProperty('name', 
'scope').get('options')).to.eql(['scope1', 'scope2']);
+      });
+      it('scope.value = "scope1"', function () {
+        expect(controller.get('configs').findProperty('name', 
'scope').get('value')).to.equal('scope1');
+      });
     });
 
   });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a487e501/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
 
b/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
index 25ed383..025ce86 100644
--- 
a/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
+++ 
b/ambari-web/test/controllers/main/alerts/manage_alert_notifications_controller_test.js
@@ -585,20 +585,20 @@ describe('App.ManageAlertNotificationsController', 
function () {
           expect(view.get('parentView.hasErrors')).to.be.true;
         });
 
-        it('should check inputFields.name.value', function () {
+        it('should check inputFields.name.value (2)', function () {
           view.set('controller.inputFields.name.errorMsg', 'error');
           view.set('controller.inputFields.name.value', 'test');
           
expect(view.get('controller.inputFields.name.errorMsg')).to.equal('');
         });
 
-        it('should check inputFields.name.value', function () {
+        it('should check inputFields.name.value (3)', function () {
           view.set('isEdit', true);
           view.set('controller.inputFields.name.value', '');
           
expect(view.get('controller.inputFields.name.errorMsg')).to.equal(Em.I18n.t('alerts.actions.manage_alert_notifications_popup.error.name.empty'));
           expect(view.get('parentView.hasErrors')).to.be.true;
         });
 
-        it('should check inputFields.name.value', function () {
+        it('should check inputFields.name.value (4)', function () {
           view.set('isEdit', true);
           view.set('controller.inputFields.name.errorMsg', 'error');
           view.set('controller.inputFields.name.value', 'test');
@@ -620,7 +620,7 @@ describe('App.ManageAlertNotificationsController', function 
() {
 
         });
 
-        it('should check inputFields.retypeSMTPPassword.value', function () {
+        it('should check inputFields.retypeSMTPPassword.value (2)', function 
() {
 
           view.set('parentView.hasErrors', true);
           view.set('controller.inputFields.retypeSMTPPassword.errorMsg', 
'error');
@@ -883,24 +883,33 @@ describe('App.ManageAlertNotificationsController', 
function () {
   });
 
   describe('#deleteAlertNotificationSuccessCallback()', function () {
+    var mockSelectedAlertNotification;
 
-    it("should call loadAlertNotifications, 
selectedAlertNotification.deleteRecord and set null to 
selectedAlertNotification", function () {
-
-      var mockSelectedAlertNotification = {
+    beforeEach(function () {
+      mockSelectedAlertNotification = {
         deleteRecord: Em.K
       };
       controller.set('selectedAlertNotification', 
mockSelectedAlertNotification);
       sinon.stub(controller, 'loadAlertNotifications', Em.K);
       sinon.spy(mockSelectedAlertNotification, 'deleteRecord');
-
       controller.deleteAlertNotificationSuccessCallback();
+    });
+
+    afterEach(function () {
+      controller.loadAlertNotifications.restore();
+      mockSelectedAlertNotification.deleteRecord.restore();
+    });
 
+    it("should call loadAlertNotifications", function () {
       expect(controller.loadAlertNotifications.calledOnce).to.be.true;
+    });
+
+    it("should call selectedAlertNotification.deleteRecord", function () {
       expect(mockSelectedAlertNotification.deleteRecord.calledOnce).to.be.true;
-      expect(controller.get('selectedAlertNotification')).to.equal(null);
+    });
 
-      controller.loadAlertNotifications.restore();
-      mockSelectedAlertNotification.deleteRecord.restore();
+    it("should set null to selectedAlertNotification", function () {
+      expect(controller.get('selectedAlertNotification')).to.equal(null);
     });
 
   });

Reply via email to