You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2017/04/01 07:07:48 UTC

[04/17] ambari git commit: AMBARI-20609 Fix Install Wizard data attribute. (ababiichuk)

AMBARI-20609 Fix Install Wizard data attribute. (ababiichuk)


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

Branch: refs/heads/branch-3.0-perf
Commit: ae647a2a4f58534cf18a3be7d4ca383a9c1f4e51
Parents: daad28f
Author: ababiichuk <ab...@hortonworks.com>
Authored: Fri Mar 31 15:08:53 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Sat Apr 1 10:07:36 2017 +0300

----------------------------------------------------------------------
 .../main/resources/ui/admin-web/app/index.html  |   4 +-
 ambari-web/app/controllers/installer.js         |   6 +-
 .../app/controllers/wizard/step1_controller.js  |   6 +-
 .../app/controllers/wizard/step3_controller.js  |   2 +
 ambari-web/app/messages.js                      |   8 +-
 ambari-web/app/models/repository.js             |  15 +-
 ambari-web/app/templates/application.hbs        |   6 +-
 ambari-web/app/templates/common/modal_popup.hbs |   2 +-
 ambari-web/app/templates/common/pagination.hbs  |   2 +-
 ambari-web/app/templates/login.hbs              |  12 +-
 ambari-web/app/templates/main.hbs               |   2 +-
 ambari-web/app/templates/wizard/step0.hbs       |   9 +-
 ambari-web/app/templates/wizard/step1.hbs       |  70 +++---
 ambari-web/app/templates/wizard/step2.hbs       | 246 ++++++++++---------
 ambari-web/app/templates/wizard/step3.hbs       |  63 ++---
 .../step3/step3_host_warning_popup_footer.hbs   |   5 +-
 .../wizard/step3/step3_host_warnings_popup.hbs  |  29 ++-
 .../step3/step3_registered_hosts_popup.hbs      |   2 +-
 ambari-web/app/utils/helper.js                  |   5 +-
 ambari-web/app/views/common/checkbox_view.js    |   1 +
 ambari-web/app/views/login.js                   |   6 +-
 ambari-web/app/views/wizard/step1_view.js       |   6 +-
 ambari-web/app/views/wizard/step2_view.js       |   4 +-
 .../wizard/step3/hostWarningPopupBody_view.js   |   3 +-
 ambari-web/test/controllers/installer_test.js   |   6 +-
 ambari-web/test/views/wizard/step1_view_test.js |  16 +-
 26 files changed, 279 insertions(+), 257 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-admin/src/main/resources/ui/admin-web/app/index.html
----------------------------------------------------------------------
diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/index.html b/ambari-admin/src/main/resources/ui/admin-web/app/index.html
index d17ec53..32f9ba7 100644
--- a/ambari-admin/src/main/resources/ui/admin-web/app/index.html
+++ b/ambari-admin/src/main/resources/ui/admin-web/app/index.html
@@ -48,8 +48,8 @@
   <header class="navbar navbar-static-top navbar-inverse">
     <div class="navbar-inner">
       <div class="container">
-        <a href="{{fromSiteRoot('/#/main/dashboard')}}" class="logo"><img src="/img/ambari-logo.png" alt="{{'common.apacheAmbari' | translate}}" title="{{'common.apacheAmbari' | translate}}"></a>
-        <a href="{{fromSiteRoot('/#/main/dashboard')}}" class="brand" title="{{'common.apacheAmbari' | translate}}">{{'common.ambari' | translate}}</a>
+        <a href="{{fromSiteRoot('/#/main/dashboard')}}" class="logo"><img src="/img/ambari-logo.png" alt="{{'common.apacheAmbari' | translate}}" title="{{'common.apacheAmbari' | translate}}" data-qa="ambari-logo"></a>
+        <a href="{{fromSiteRoot('/#/main/dashboard')}}" class="brand" title="{{'common.apacheAmbari' | translate}}" data-qa="ambari-title">{{'common.ambari' | translate}}</a>
         <ul class="nav navbar-nav navbar-right">
           <li>
             <div class="btn-group navbar-views-dropdown" dropdown is-open="viewsdropdown.isopen" ng-mouseover="viewsdropdown.isopen=true" ng-mouseout="viewsdropdown.isopen=false">

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/controllers/installer.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/installer.js b/ambari-web/app/controllers/installer.js
index 35056f7..553ec43 100644
--- a/ambari-web/app/controllers/installer.js
+++ b/ambari-web/app/controllers/installer.js
@@ -856,7 +856,7 @@ App.InstallerController = App.WizardController.extend(App.UserPref, {
             repo.setProperties({
               errorTitle: '',
               errorContent: '',
-              validation: App.Repository.validation.INPROGRESS
+              validation: 'INPROGRESS'
             });
             this.set('content.isCheckInProgress', true);
             App.ajax.send({
@@ -896,7 +896,7 @@ App.InstallerController = App.WizardController.extend(App.UserPref, {
       var os = selectedStack.get('operatingSystems').findProperty('id', data.osId);
       var repo = os.get('repositories').findProperty('repoId', data.repoId);
       if (repo) {
-        repo.set('validation', App.Repository.validation.OK);
+        repo.set('validation', 'OK');
       }
     }
     this.set('validationCnt', this.get('validationCnt') - 1);
@@ -916,7 +916,7 @@ App.InstallerController = App.WizardController.extend(App.UserPref, {
       var repo = os.get('repositories').findProperty('repoId', params.repoId);
       if (repo) {
         repo.setProperties({
-          validation: App.Repository.validation.INVALID,
+          validation: 'INVALID',
           errorTitle: request.status + ":" + request.statusText,
           errorContent: $.parseJSON(request.responseText) ? $.parseJSON(request.responseText).message : ""
         });

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/controllers/wizard/step1_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step1_controller.js b/ambari-web/app/controllers/wizard/step1_controller.js
index f397cd8..2ac295b 100644
--- a/ambari-web/app/controllers/wizard/step1_controller.js
+++ b/ambari-web/app/controllers/wizard/step1_controller.js
@@ -288,6 +288,8 @@ App.WizardStep1Controller = Em.Controller.extend({
 
       disablePrimary: Em.computed.alias('controller.readInfoIsNotProvided'),
 
+      'data-qa': 'vdf-modal',
+
       /**
        * Try to read version info from the url or file (if provided)
        */
@@ -381,9 +383,7 @@ App.WizardStep1Controller = Em.Controller.extend({
            * @type {Em.View}
            */
           fileInputView: Em.View.extend({
-            template: Em.Handlebars.compile('<input type="file" {{bindAttr class="controller.optionsToSelect.useLocalRepo.enterUrl.isSelected:disabled"}} />'),
-
-            classNames: ['vdf-input-indentation'],
+            template: Em.Handlebars.compile('<input type="file" {{bindAttr class="controller.optionsToSelect.useLocalRepo.enterUrl.isSelected:disabled"}} {{QAAttr "vdf-input"}}/>'),
 
             change: function (e) {
               var self = this;

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/controllers/wizard/step3_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step3_controller.js b/ambari-web/app/controllers/wizard/step3_controller.js
index 0e3acd2..7a07253 100644
--- a/ambari-web/app/controllers/wizard/step3_controller.js
+++ b/ambari-web/app/controllers/wizard/step3_controller.js
@@ -889,6 +889,8 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, App.Check
 
       autoHeight: false,
 
+      'data-qa': 'host-checks-modal',
+
       onPrimary: function () {
         self.set('checksUpdateStatus', null);
         this.hide();

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 594be03..a2edf06 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -754,10 +754,10 @@ Em.I18n.translations = {
   'installer.step3.hostWarningsPopup.report.user': '<br><br>######################################<br># Users<br>#<br># A space delimited list of users who should not exist.<br># Provided so that administrators can easily copy paths into scripts, email etc.<br># Example: userdel hdfs<br>######################################<br>USERS<br>',
   'installer.step3.hostWarningsPopup.report.folder': '\\ /folder',
   'installer.step3.hostWarningsPopup.checks': 'Host Checks found',
-  'installer.step3.hostWarningsPopup.notice':'After manually resolving the issues, click <b>Rerun Checks</b>.'+
-    '<br>To manually resolve issues on <b>each host</b> run the HostCleanup script (Python 2.6 or greater is required):'+
-    '<br><div class="code-snippet">python /usr/lib/python2.6/site-packages/ambari_agent/HostCleanup.py --silent --skip=users</div>' +
-    '<div class="alert alert-warning"><b>Note</b>: Clean up of Firewall and Transparent Huge Page issues are not supported by the HostCleanup script.</div>' +
+  'installer.step3.hostWarningsPopup.notice.beginning': 'After manually resolving the issues, click <b>Rerun Checks</b>.' +
+    '<br>To manually resolve issues on <b>each host</b> run the HostCleanup script (Python 2.6 or greater is required):<br>',
+  'installer.step3.hostWarningsPopup.notice.command': 'python /usr/lib/python2.6/site-packages/ambari_agent/HostCleanup.py --silent --skip=users',
+  'installer.step3.hostWarningsPopup.notice.end': '<div class="alert alert-warning"><b>Note</b>: Clean up of Firewall and Transparent Huge Page issues are not supported by the HostCleanup script.</div>' +
     '<div class="alert alert-warning"><b>Note</b>: To clean up in interactive mode, remove <b>--silent</b> option. To clean up all resources, including <i>users</i>, remove <b>--skip=users</b> option. Use <b>--help</b> for a list of available options.</div>',
   'installer.step3.hostWarningsPopup.summary':'{0} on {1}',
   'installer.step3.hostWarningsPopup.jdk':'JDK Issues',

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/models/repository.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/repository.js b/ambari-web/app/models/repository.js
index 9caef59..aeb3ec6 100644
--- a/ambari-web/app/models/repository.js
+++ b/ambari-web/app/models/repository.js
@@ -34,6 +34,12 @@ App.Repository = DS.Model.extend({
   operatingSystem: DS.belongsTo('App.OperatingSystem'),
 
   validation: DS.attr('string', {defaultValue: ''}),
+  validationClassName: Em.computed.getByKey('validationClassNameMap', 'validation', ''),
+  validationClassNameMap: {
+    INVALID: 'glyphicon glyphicon-exclamation-sign',
+    OK: 'glyphicon glyphicon-ok',
+    INPROGRESS: 'glyphicon glyphicon-repeat'
+  },
   errorContent: DS.attr('string', {defaultValue: ''}),
   errorTitle: DS.attr('string', {defaultValue: ''}),
 
@@ -48,7 +54,7 @@ App.Repository = DS.Model.extend({
   }.property('baseUrl'),
 
   invalidError: function() {
-    return this.get('validation') === App.Repository.validation.INVALID;
+    return this.get('validation') === 'INVALID';
   }.property('validation'),
 
   /**
@@ -71,12 +77,5 @@ App.Repository = DS.Model.extend({
 
 });
 
-App.Repository.validation = {
-  PENDING: '',
-  INVALID: 'glyphicon glyphicon-exclamation-sign',
-  OK: 'glyphicon glyphicon-ok',
-  INPROGRESS: 'glyphicon glyphicon-repeat'
-};
-
 
 App.Repository.FIXTURES = [];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/application.hbs b/ambari-web/app/templates/application.hbs
index c9776e3..03c47db 100644
--- a/ambari-web/app/templates/application.hbs
+++ b/ambari-web/app/templates/application.hbs
@@ -27,16 +27,16 @@
       <li class="navigation-header">
         {{#if enableLinks}}
           <a {{translateAttr href="topnav.logo.href"}} class="ambari-logo">
-            <img src="/img/ambari-logo.png" alt="Apache Ambari" title="Apache Ambari">
+            <img src="/img/ambari-logo.png" alt="Apache Ambari" title="Apache Ambari" {{QAAttr "ambari-logo"}}>
           </a>
         {{else}}
           <a class="ambari-logo">
-            <img src="/img/ambari-logo.png" alt="Apache Ambari" title="Apache Ambari">
+            <img src="/img/ambari-logo.png" alt="Apache Ambari" title="Apache Ambari" {{QAAttr "ambari-logo"}}>
           </a>
         {{/if}}
         <div class="btn-group">
           <div class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-            <span class="ambari-header" title="Apache Ambari">{{t app.name}}</span>
+            <span class="ambari-header" title="Apache Ambari" {{QAAttr "ambari-title"}}>{{t app.name}}</span>
             <span class="toggle-icon glyphicon glyphicon-triangle-bottom"></span>
           </div>
           <ul class="dropdown-menu">

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/common/modal_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/modal_popup.hbs b/ambari-web/app/templates/common/modal_popup.hbs
index 96aa6dc..476d331 100644
--- a/ambari-web/app/templates/common/modal_popup.hbs
+++ b/ambari-web/app/templates/common/modal_popup.hbs
@@ -36,7 +36,7 @@
       </div>
 
       {{! Modal Body }}
-      <div {{bindAttr class=":modal-body view.isHideBodyScroll:hidden-scroll"}}>
+      <div {{bindAttr class=":modal-body view.isHideBodyScroll:hidden-scroll"}} {{QAAttr "modal-body"}}>
         {{#if view.bodyClass}}
           {{view view.bodyClass}}
         {{else}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/common/pagination.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/pagination.hbs b/ambari-web/app/templates/common/pagination.hbs
index d917f92..f5b4fc2 100644
--- a/ambari-web/app/templates/common/pagination.hbs
+++ b/ambari-web/app/templates/common/pagination.hbs
@@ -18,7 +18,7 @@
 
 <div class="pagination-block-item">
   {{t tableView.filters.itemsPerPage}}
-  {{view view.rowsPerPageSelectView selectionBinding="view.dataView.displayLength"}}
+  {{view view.rowsPerPageSelectView selectionBinding="view.dataView.displayLength" data-qa="pagination-select"}}
 </div>
 <div class="pagination-block-item">{{view.dataView.paginationInfo}}</div>
 <div class="pagination-block-item">

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/login.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/login.hbs b/ambari-web/app/templates/login.hbs
index ed16734..5fcdfbf 100644
--- a/ambari-web/app/templates/login.hbs
+++ b/ambari-web/app/templates/login.hbs
@@ -20,20 +20,20 @@
 <div class="well login col-md-4 col-md-offset-4 col-sm-offset-4">
   <h2>{{t login.header}}</h2>
   {{#if errorMessage}}
-  <div class="alert alert-danger">
+  <div class="alert alert-danger" {{QAAttr "login-error"}}>
     {{errorMessage}}
   </div>
   {{/if}}
   <form>
     <div class="form-group">
-      <label>{{t login.username}}</label>
-      {{view view.loginTextField valueBinding="loginName" class="form-control" disabledBinding="isSubmitDisabled"}}
+      <label {{QAAttr "username-label"}}>{{t login.username}}</label>
+      {{view view.loginTextField valueBinding="loginName" class="form-control" disabledBinding="isSubmitDisabled" data-qa="username-input"}}
     </div>
     <div class="form-group">
-      <label>{{t common.password}}</label>
-      {{view view.passTextField type="password" valueBinding="password" class="form-control" disabledBinding="isSubmitDisabled"}}
+      <label {{QAAttr "password-label"}}>{{t common.password}}</label>
+      {{view view.passTextField type="password" valueBinding="password" class="form-control" disabledBinding="isSubmitDisabled" data-qa="password-input"}}
     </div>
-    <button class="btn btn-success login-btn" {{bindAttr disabled="isSubmitDisabled"}} {{action "submit" target="controller"}}>{{t login.loginButton}}</button>
+    <button class="btn btn-success" {{QAAttr "login-button"}} {{bindAttr disabled="isSubmitDisabled"}} {{action "submit" target="controller"}}>{{t login.loginButton}}</button>
   </form>
 </div>
 {{/unless}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/main.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main.hbs b/ambari-web/app/templates/main.hbs
index e442ea5..bf6fa56 100644
--- a/ambari-web/app/templates/main.hbs
+++ b/ambari-web/app/templates/main.hbs
@@ -24,7 +24,7 @@
   {{#unless isClusterDataLoaded}}
     <h2>{{t app.loadingPlaceholder}}</h2>
     <div class="progress">
-      <div class="progress-bar progress-bar-striped active" {{bindAttr style="controller.clusterDataLoadedPercent"}}></div>
+      <div class="progress-bar progress-bar-striped active" {{QAAttr "main-progress-bar"}} {{bindAttr style="controller.clusterDataLoadedPercent"}}></div>
     </div>
   {{/unless}}
   {{#if isClusterDataLoaded}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/wizard/step0.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step0.hbs b/ambari-web/app/templates/wizard/step0.hbs
index 0724ef1..fa76a21 100644
--- a/ambari-web/app/templates/wizard/step0.hbs
+++ b/ambari-web/app/templates/wizard/step0.hbs
@@ -22,19 +22,20 @@
   <div class="panel panel-default">
     <div class="panel-body">
       <div {{bindAttr class="view.onError:has-error :form-group"}}>
-        <label class="control-label" for="cluster-name">{{t installer.step0.clusterName}}
+        <label class="control-label" for="cluster-name" {{QAAttr "cluster-name-inscription"}}>{{t installer.step0.clusterName}}
           <a href="javascript:void(null)"
            rel="popover"
+            {{QAAttr "cluster-name-tooltip"}}
             {{translateAttr title="installer.step0.clusterName.tooltip.title"
             data-content="installer.step0.clusterName.tooltip.content"}}>{{t common.learnMore}}</a>
         </label>
 
         <div>
           <div class="col-sm-3 cluster-name-input">
-            {{view App.WizardStep0ViewClusterNameInput id="cluster-name" valueBinding="content.cluster.name" placeholder="cluster name" target="controller" classNames="form-control"}}
+            {{view App.WizardStep0ViewClusterNameInput id="cluster-name" valueBinding="content.cluster.name" placeholder="cluster name" target="controller" classNames="form-control" data-qa="cluster-name-input"}}
           </div>
           {{#if clusterNameError}}
-            <p class="help-block validation-block col-sm-9">{{clusterNameError}}</p>
+            <p class="help-block validation-block col-sm-9"  {{QAAttr "cluster-name-validation"}}>{{clusterNameError}}</p>
           {{/if}}
         </div>
       </div>
@@ -43,7 +44,7 @@
 </div>
 
 <div class="wizard-footer col-md-12 btn-area">
-  <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action "submit" target="controller"}}>
+  <button type="button" class="btn btn-success pull-right" {{QAAttr "wizard-next"}} {{bindAttr disabled="isSubmitDisabled"}} {{action "submit" target="controller"}}>
     {{#if App.router.nextBtnClickInProgress}}
         {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
     {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/wizard/step1.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step1.hbs b/ambari-web/app/templates/wizard/step1.hbs
index f72258b..793199c 100644
--- a/ambari-web/app/templates/wizard/step1.hbs
+++ b/ambari-web/app/templates/wizard/step1.hbs
@@ -15,7 +15,7 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-<div id="select-stack" class="wizard-content col-md-9">
+<div id="select-stack" class="wizard-content col-md-9" {{QAAttr "select-stack-page"}}>
   <h4 class="step-title">{{t installer.step1.header}}</h4>
   <p class="step-description">{{t installer.step1.body}}</p>
 
@@ -23,31 +23,29 @@
     <div class="panel-body">
       {{! left tabs }}
       <div class="tabs-menu">
-        <ul class="nav nav-tabs">
+        <ul class="nav nav-tabs" {{QAAttr "stack-tabs"}}>
           {{#each stack in availableStackTypes}}
-            <li {{bindAttr class="stack.isSelected:active"}}><a {{action "selectRepoInList" stack target="controller"}} href="#">{{stack.stackName}}</a></li>
+            <li {{bindAttr class="stack.isSelected:active"}} {{QAAttr "stack-tab"}}><a {{QAAttr "stack-link-{stack.stackName}"}} {{action "selectRepoInList" stack target="controller"}} href="#">{{stack.stackName}}</a></li>
           {{/each}}
         </ul>
       </div>
       <div class="stacks-options">
         <div class="details-panel">
-          <div class="version-info">
-            <div class="btn-group">
-              <button type="button" data-toggle="dropdown" class="btn dropdown-toggle btn-default">{{controller.selectedStack.displayName}} <span class="caret"></span></button>
-              <ul class="dropdown-menu">
-                {{#each stack in selectedStackType.stacks}}
-                  <li>
-                    {{!view view.stackRadioButton stackBinding="stack"}}
-                    <a href="#" {{action "changeVersion" stack target="controller"}}>{{stack.displayName}}
-                      {{#if stack.stackDefault}}
-                        ({{t installer.step1.changeVersion.defaultVersion}})
-                      {{/if}}
-                    </a>
-                  </li>
-                {{/each}}
-                <li><a href="#" {{action "uploadVdf" target="controller"}}>{{t installer.step1.addVersion}} ...</a></li>
-              </ul>
-            </div>
+          <div class="btn-group" {{QAAttr "select-version"}}>
+            <button type="button" data-toggle="dropdown" class="btn dropdown-toggle btn-default" {{QAAttr "select-version-button"}}>{{controller.selectedStack.displayName}} <span class="caret"></span></button>
+            <ul class="dropdown-menu">
+              {{#each stack in selectedStackType.stacks}}
+                <li>
+                  {{!view view.stackRadioButton stackBinding="stack"}}
+                  <a href="#" {{action "changeVersion" stack target="controller"}} {{QAAttr "{stack.displayName}"}}>{{stack.displayName}}
+                    {{#if stack.stackDefault}}
+                      ({{t installer.step1.changeVersion.defaultVersion}})
+                    {{/if}}
+                  </a>
+                </li>
+              {{/each}}
+              <li><a href="#" {{action "uploadVdf" target="controller"}} {{QAAttr "add-new-version"}}>{{t installer.step1.addVersion}} ...</a></li>
+            </ul>
           </div>
           <div class="version-contents-section">
             {{#unless servicesForSelectedStack}}
@@ -82,17 +80,17 @@
             <div class="row radio-group">
               {{! Public Repository radio }}
               <div {{bindAttr class=":col-sm-4 :radio :big-radio :public-radio :wizard-plain-text"}}>
-                {{view view.usePublicRepoRadioButton classNames="display-inline-block"}}
+                {{view view.usePublicRepoRadioButton classNames="display-inline-block" labelIdentifier="use-public-repo"}}
                 {{#if networkIssuesExist}}
                   <a id="public-disabled-link" class="display-inline-block" {{action "openPublicOptionDisabledWindow" target="view"}}>{{t installer.step1.selectUseRepoOptions.public.networkLost}}</a>
                 {{/if}}
               </div>
               {{!--Local repo radio--}}
-              {{view view.useLocalRepoRadioButton classNames="radio big-radio col-sm-4"}}
+              {{view view.useLocalRepoRadioButton classNames="radio big-radio col-sm-4" labelIdentifier="use-local-repo"}}
             </div>
             <div class="alert alert-info" role="alert">{{t installer.step1.useLocalRepo.infoForm.alert.baseUrl}}</div>
             {{#if view.showWarning}}
-              <div class="alert alert-warning">{{t installer.step1.attentionNeeded}}</div>
+              <div class="alert alert-warning" {{QAAttr "step1-warning"}}>{{t installer.step1.attentionNeeded}}</div>
             {{/if}}
 
             {{! OSes and Repositories }}
@@ -103,13 +101,14 @@
                   <div class="btn-group pull-right">
                     <button
                       type="button" {{bindAttr data-original-title="view.addOsButtonTooltip" class=":btn :btn-default :dropdown-toggle :add-os-button view.isAddOsButtonDisabled:disabled"}}
+                      {{QAAttr "add-os-button"}}
                       data-toggle="dropdown">
                       <i class="glyphicon glyphicon-plus"></i> {{t common.add}} &nbsp;<span class="caret"></span>
                     </button>
                     <ul class="dropdown-menu">
                       {{#each operatingSystem in selectedStack.operatingSystems}}
                         {{#unless operatingSystem.isSelected}}
-                          <li><a {{action "addOS" operatingSystem target="controller"}}>{{operatingSystem.osType}}</a></li>
+                          <li><a {{action "addOS" operatingSystem target="controller"}} {{QAAttr "add-os-{operatingSystem.osType}"}}>{{operatingSystem.osType}}</a></li>
                         {{/unless}}
                       {{/each}}
                     </ul>
@@ -131,28 +130,30 @@
                 {{#each operatingSystem in selectedStack.operatingSystems}}
                   {{#if operatingSystem.isSelected}}
                     <tr>
-                      <td class="col-sm-2">{{operatingSystem.osType}}</td>
+                      <td class="col-sm-2" {{QAAttr "os-type-label"}}>{{operatingSystem.osType}}</td>
                       <td class="col-sm-9" colspan="2">
-                        <table class="table table-condensed no-borders inner-table">
+                        <table class="table table-condensed no-borders inner-table" {{QAAttr "{operatingSystem.osType}"}}>
                           <tbody>
                             {{#each repository in operatingSystem.repositories}}
-                              <tr>
+                              <tr {{QAAttr "{repository.repoName}"}}>
                                 <td class="col-sm-3">{{repository.repoId}}</td>
                                 <td class="col-sm-1">
-                                  {{view view.popoverView repositoryBinding="repository"}}
+                                  {{view view.popoverView repositoryBinding="repository" data-qaBinding="repository.validation"}}
                                 </td>
                                 <td class="col-sm-8">
                                   <div {{bindAttr class=":repo-url repository.invalidFormatError:has-error repository.invalidError:has-error"}}>
-                                    {{view Ember.TextField placeholderBinding="repository.placeholder" valueBinding="repository.baseUrl" disabledBinding="controller.selectedStack.useRedhatSatellite" classNames="form-control"}}
+                                    {{view Ember.TextField placeholderBinding="repository.placeholder" valueBinding="repository.baseUrl" disabledBinding="controller.selectedStack.useRedhatSatellite" classNames="form-control" data-qa="repo-url-input"}}
                                     {{#if controller.selectedStack.usePublicRepo}}
                                       <i {{bindAttr class="repository.undo::invisible :icon-undo"}}
                                         {{action "doRestoreDefaultValue" repository target="controller"}}
-                                        {{translateAttr title="common.undo"}}>
+                                        {{translateAttr title="common.undo"}}
+                                        {{QAAttr "undo-icon"}}>
                                       </i>
                                     {{else}}
                                       <i {{bindAttr class="repository.notEmpty::invisible :icon-undo"}}
                                         {{action "doRestoreToEmpty" repository target="controller"}}
-                                        {{translateAttr title="common.undo"}}>
+                                        {{translateAttr title="common.undo"}}
+                                        {{QAAttr "undo-icon"}}>
                                       </i>
                                     {{/if}}
                                   </div>
@@ -163,7 +164,7 @@
                         </table>
                       </td>
                       <td class="col-sm-1">
-                        <a class="action remove-icon" href="#" {{action "removeOS" operatingSystem target="view"}}>
+                        <a class="action remove-icon" href="#" {{action "removeOS" operatingSystem target="view"}} {{QAAttr "remove-icon"}}>
                           <span class="icon icon-minus"></span>
                             {{t common.remove}}
                         </a>
@@ -182,6 +183,7 @@
                 labelClassNamesBinding="controller.selectedStack.useRedhatSatellite:disabled"
                 checkedBinding="skipValidationChecked"
                 disabledBinding="controller.selectedStack.useRedhatSatellite"
+                labelIdentifier="skip-validation"
               }}
                 <i class="glyphicon glyphicon-question-sign" rel="skip-validation-tooltip"
                 data-toggle="tooltip" {{translateAttr data-original-title="installer.step1.advancedRepo.skipValidation.tooltip"}}>
@@ -219,13 +221,13 @@
   </div>
 </div>
 <div class="wizard-footer col-md-12">
-  <button type="button" class="btn btn-default pull-left installer-back-btn" {{bindAttr disabled="App.router.btnClickInProgress"}} {{action back}}>
+  <button type="button" class="btn btn-default pull-left installer-back-btn" {{bindAttr disabled="App.router.btnClickInProgress"}} {{action back}} {{QAAttr "wizard-back"}}>
     &larr; {{t common.back}}
     {{#if App.router.backBtnClickInProgress}}
       {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
     {{/if}}
   </button>
-  <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="view.isSubmitDisabled"}} {{action next}}>
+  <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="view.isSubmitDisabled"}} {{action next}} {{QAAttr "wizard-next"}}>
     {{#if App.router.nextBtnClickInProgress}}
       {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
     {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/wizard/step2.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step2.hbs b/ambari-web/app/templates/wizard/step2.hbs
index e024088..836029f 100644
--- a/ambari-web/app/templates/wizard/step2.hbs
+++ b/ambari-web/app/templates/wizard/step2.hbs
@@ -23,162 +23,166 @@
   <div class="panel panel-default">
     <div class="panel-body">
 
-      <div id="targetHosts">
-        <div class="step-title">{{t installer.step2.targetHosts}}</div>
+      <div id="targetHosts" {{QAAttr "target-hosts"}}>
+        <div class="step-title" {{QAAttr "target-hosts-title"}}>{{t installer.step2.targetHosts}}</div>
         <div {{bindAttr class="hostsError:has-error :form-group :target-hosts-input"}}>
-          <p class="wizard-plain-text">{{t installer.step2.targetHosts.info}}. {{t installer.step2.orUse}}
+          <p class="wizard-plain-text" {{QAAttr "target-hosts-description"}}>{{t installer.step2.targetHosts.info}}. {{t installer.step2.orUse}}
             <a href="javascript:void(null)"
                rel="popover"
-              {{translateAttr title="installer.step2.hostPattern.tooltip.title" data-content="installer.step2.hostPattern.tooltip.content"}}>
-              {{t installer.step2.hostPattern.tooltip.title}}
+              {{translateAttr title="installer.step2.hostPattern.tooltip.title" data-content="installer.step2.hostPattern.tooltip.content"}}
+              {{QAAttr "pattern-expressions-link"}}>
+              <span {{QAAttr "pattern-expressions-link-text"}}>{{t installer.step2.hostPattern.tooltip.title}}</span>
             </a>
           </p>
 
           <div class="row">
             <div class="col-md-8">
-              {{view Ember.TextArea id="host-names" class="form-control" valueBinding="content.installOptions.hostNames" rows="5"
-              placeholder="host names"}}
+              {{view Ember.TextArea id="host-names" class="form-control" valueBinding="content.installOptions.hostNames"
+              rows="5" placeholder="host names" data-qa="target-hosts-textarea"}}
             </div>
             {{#if hostsError}}
               <div class="col-md-4">
-                <p class="help-block validation-block">{{hostsError}}</p>
+                <p class="help-block validation-block" {{QAAttr "host-names-validation"}}>{{hostsError}}</p>
               </div>
             {{/if}}
           </div>
         </div>
       </div>
 
-      <div id="hostConnectivity">
-        <div class="ambari-agents">
-          <div class="step-title">{{t installer.step2.sshKey}}</div>
-          <div class="row radio-button-options">
-            <div class="col-sm-5 row">
-              <div class="col-sm-1">
-                {{#view view.providingSSHKeyRadioButton}}{{/view}}
-              </div>
-              <div class="col-sm-10 wizard-plain-text">
-                {{#if useSSH}}
-                  {{t installer.step2.useSsh.provide}}
-                  <a href="javascript:void(null)"
-                     rel="popover"
-                    {{translateAttr title="installer.step2.useSsh.tooltip.title" data-content="installer.step2.useSsh.tooltip.content"}}>
-                    {{t installer.step2.useSsh.tooltip.title}}</a>
-                  {{t installer.step2.useSsh.provide_id_rsa}}
-                {{else}}
-                  {{t installer.step2.install.perform}}
-                  <a href="javascript:void(null)"
-                     rel="popover"
-                    {{translateAttr title="installer.step2.automaticInstall.tooltip.title" data-content="installer.step2.automaticInstall.tooltip.content"}}>
-                    {{t installer.step2.automaticInstall.tooltip.title}}</a>
-                  {{t installer.step2.install.perform_on_hosts}}
-                {{/if}}
-              </div>
+      <div {{QAAttr "host-registration-info"}}>
+        <div class="step-title" {{QAAttr "host-registration-info-title"}}>{{t installer.step2.sshKey}}</div>
+        <div class="row radio-button-options">
+          <div class="col-sm-5 row">
+            <div class="col-sm-1">
+              {{#view view.providingSSHKeyRadioButton labelIdentifier="ssh-key-radio-button"}}{{/view}}
             </div>
-            <div class="col-sm-5 row">
-              <div class="col-sm-1">
-                {{#view view.manualRegistrationRadioButton}}{{/view}}
-              </div>
-              <div class="col-sm-10 wizard-plain-text">
+            <div class="col-sm-10 wizard-plain-text">
+              {{#if useSSH}}
+                {{t installer.step2.useSsh.provide}}
+                <a href="javascript:void(null)"
+                   rel="popover"
+                  {{translateAttr title="installer.step2.useSsh.tooltip.title" data-content="installer.step2.useSsh.tooltip.content"}}
+                  {{QAAttr "ssh-tooltip-link"}}>
+                  {{t installer.step2.useSsh.tooltip.title}}</a>
+                {{t installer.step2.useSsh.provide_id_rsa}}
+              {{else}}
                 {{t installer.step2.install.perform}}
-                {{#if useSSH}}
-                  <a href="javascript:void(null)"
-                     rel="popover"
-                    {{translateAttr title="installer.step2.manualInstall.tooltip.title" data-content="installer.step2.manualInstall.tooltip.content"}}>
-                    {{t installer.step2.manualInstall.tooltip.title}}</a>
-                {{else}}
-                  <a href="javascript:void(null)"
-                     rel="popover"
-                    {{translateAttr title="installer.step2.manualInstall.tooltip.title" data-content="installer.step2.manualInstall.tooltip.content_no_ssh"}}>
-                    {{t installer.step2.manualInstall.tooltip.title}}</a>
-                {{/if}}
+                <a href="javascript:void(null)"
+                   rel="popover"
+                  {{translateAttr title="installer.step2.automaticInstall.tooltip.title" data-content="installer.step2.automaticInstall.tooltip.content"}}
+                  {{QAAttr "ssh-tooltip-link"}}>
+                  {{t installer.step2.automaticInstall.tooltip.title}}</a>
                 {{t installer.step2.install.perform_on_hosts}}
-                {{#if useSSH}}
-                  {{t installer.step2.install.without_ssh}}
-                {{/if}}
-              </div>
+              {{/if}}
+            </div>
+          </div>
+          <div class="col-sm-5 row">
+            <div class="col-sm-1">
+              {{#view view.manualRegistrationRadioButton labelIdentifier="manual-registration-radio-button"}}{{/view}}
+            </div>
+            <div class="col-sm-10 wizard-plain-text">
+              {{t installer.step2.install.perform}}
+              {{#if useSSH}}
+                <a href="javascript:void(null)"
+                   rel="popover"
+                  {{translateAttr title="installer.step2.manualInstall.tooltip.title" data-content="installer.step2.manualInstall.tooltip.content"}}
+                  {{QAAttr "ssh-tooltip-link"}}>
+                  {{t installer.step2.manualInstall.tooltip.title}}</a>
+              {{else}}
+                <a href="javascript:void(null)"
+                   rel="popover"
+                  {{translateAttr title="installer.step2.manualInstall.tooltip.title" data-content="installer.step2.manualInstall.tooltip.content_no_ssh"}}
+                  {{QAAttr "ssh-tooltip-link"}}>
+                  {{t installer.step2.manualInstall.tooltip.title}}</a>
+              {{/if}}
+              {{t installer.step2.install.perform_on_hosts}}
+              {{#if useSSH}}
+                {{t installer.step2.install.without_ssh}}
+              {{/if}}
             </div>
           </div>
+        </div>
+
+        {{#if useSSH}}
+          <div class="ssh-key-input">
+            {{#if view.isFileApi}}
+              <div>
+                {{view App.SshKeyFileUploader disabledBinding="view.sshKeyState"}}
+              </div>
+            {{/if}}
 
-          {{#if useSSH}}
-            <div class="ssh-key-input">
-              {{#if view.isFileApi}}
-                <div>
-                  {{view App.SshKeyFileUploader disabledBinding="view.sshKeyState"}}
+            {{! ssh key }}
+            <div {{bindAttr class="sshKeyError:has-error :form-group :row"}}>
+              <div class="col-md-8">
+                {{view Ember.TextArea class="form-control" rows="3" id="sshKey"
+                placeholder="ssh private key" disabledBinding="view.sshKeyState"
+                valueBinding="content.installOptions.sshKey" data-qa="ssh-key-textarea"}}
+              </div>
+              {{#if sshKeyError}}
+                <div class="col-md-4">
+                  <span class="help-block validation-block" {{QAAttr "ssh-key-validation"}}>{{sshKeyError}}</span>
                 </div>
               {{/if}}
+            </div>
+            {{! ssh key end }}
 
-              {{! ssh key }}
-              <div {{bindAttr class="sshKeyError:has-error :form-group :row"}}>
-                <div class="col-md-8">
-                  {{view Ember.TextArea class="form-control" rows="3" id="sshKey"
-                  placeholder="ssh private key" disabledBinding="view.sshKeyState" valueBinding="content.installOptions.sshKey"}}
+            {{! ssh user }}
+            <div {{bindAttr class="sshUserError:has-error :row"}}>
+              <div class="col-md-4">
+                <label rel="tooltip" {{translateAttr title="installer.step2.sshUser.toolTip"}} class="ssh-user wizard-plain-text">
+                  {{t installer.step2.sshUser}}
+                </label>
+              </div>
+              <div {{bindAttr class="sshUserError:has-error :form-group :col-md-4"}}>
+                {{view view.textFieldView valueBinding="content.installOptions.sshUser" isEnabledBinding="content.installOptions.useSsh" classNames="form-control pull-right" data-qa="ssh-user-input"}}
+              </div>
+              {{#if sshUserError}}
+                <div class="col-md-4">
+                  <span class="help-block validation-block help-inline">{{sshUserError}}</span>
                 </div>
-                {{#if sshKeyError}}
-                  <div class="col-md-4">
-                    <span class="help-block validation-block">{{sshKeyError}}</span>
-                  </div>
-                {{/if}}
+              {{/if}}
+            </div>
+            {{! ssh user end }}
+
+            {{! ssh port }}
+            <div {{bindAttr class="sshPortError:has-error :row"}}>
+              <div class="col-md-4">
+                <label rel="tooltip" {{translateAttr title="installer.step2.sshPort.toolTip"}} class="ssh-port wizard-plain-text">
+                  {{t installer.step2.sshPort}}
+                </label>
+              </div>
+              <div class="form-group col-md-4">
+                {{view view.textFieldView valueBinding="content.installOptions.sshPort" isEnabledBinding="content.installOptions.useSsh" classNames="form-control"}}
               </div>
-              {{! ssh key end }}
+              {{#if sshPortError}}
+                <div class="col-md-4">
+                  <span class="help-block validation-block help-inline">{{sshPortError}}</span>
+                </div>
+              {{/if}}
+            </div>
+            {{! ssh port end }}
 
-              {{! ssh user }}
-              <div {{bindAttr class="sshUserError:has-error :row"}}>
+            {{! ambari agent user }}
+            {{#if App.supports.customizeAgentUserAccount}}
+              <div {{bindAttr class="agentUserError:has-error :row"}}>
                 <div class="col-md-4">
-                  <label rel="tooltip" {{translateAttr title="installer.step2.sshUser.toolTip"}} class="ssh-user wizard-plain-text">
-                    {{t installer.step2.sshUser}}
+                  <label rel="tooltip" {{translateAttr title="installer.step2.agentUser.toolTip"}} class="ssh-user wizard-plain-text">
+                    {{t installer.step2.agentUser}}
                   </label>
                 </div>
-                <div {{bindAttr class="sshUserError:has-error :form-group :col-md-4"}}>
-                  {{view view.textFieldView valueBinding="content.installOptions.sshUser" isEnabledBinding="content.installOptions.useSsh" classNames="form-control pull-right"}}
+                <div {{bindAttr class="agentUserError:has-error :form-group :col-md-4"}}>
+                  {{view view.textFieldView valueBinding="content.installOptions.agentUser" isEnabledBinding="content.installOptions.useSsh" classNames="form-control"}}
                 </div>
-                {{#if sshUserError}}
+                {{#if agentUserError}}
                   <div class="col-md-4">
-                    <span class="help-block validation-block help-inline">{{sshUserError}}</span>
+                    <span class="help-block validation-block help-inline">{{agentUserError}}</span>
                   </div>
                 {{/if}}
               </div>
-              {{! ssh user end }}
-
-              {{! ssh port }}
-               <div {{bindAttr class="sshPortError:has-error :row"}}>
-                 <div class="col-md-4">
-                   <label rel="tooltip" {{translateAttr title="installer.step2.sshPort.toolTip"}} class="ssh-port wizard-plain-text">
-                    {{t installer.step2.sshPort}}
-                   </label>
-                 </div>
-                 <div class="form-group col-md-4">
-                   {{view view.textFieldView valueBinding="content.installOptions.sshPort" isEnabledBinding="content.installOptions.useSsh" classNames="form-control"}}
-                 </div>
-                 {{#if sshPortError}}
-                   <div class="col-md-4">
-                     <span class="help-block validation-block help-inline">{{sshPortError}}</span>
-                   </div>
-                 {{/if}}
-               </div>
-              {{! ssh port end }}
-
-              {{! ambari agent user }}
-              {{#if App.supports.customizeAgentUserAccount}}
-                <div {{bindAttr class="agentUserError:has-error :row"}}>
-                  <div class="col-md-4">
-                    <label rel="tooltip" {{translateAttr title="installer.step2.agentUser.toolTip"}} class="ssh-user wizard-plain-text">
-                      {{t installer.step2.agentUser}}
-                    </label>
-                  </div>
-                  <div {{bindAttr class="agentUserError:has-error :form-group :col-md-4"}}>
-                    {{view view.textFieldView valueBinding="content.installOptions.agentUser" isEnabledBinding="content.installOptions.useSsh" classNames="form-control"}}
-                  </div>
-                  {{#if agentUserError}}
-                    <div class="col-md-4">
-                      <span class="help-block validation-block help-inline">{{agentUserError}}</span>
-                    </div>
-                  {{/if}}
-                </div>
-              {{/if}}
-              {{! ambari agent user end }}
-            </div>
-          {{/if}}
-        </div>
+            {{/if}}
+            {{! ambari agent user end }}
+          </div>
+        {{/if}}
       </div>
     </div>
   </div>
@@ -187,14 +191,14 @@
 <div class="wizard-footer col-md-12">
   <div class="btn-area">
     {{#unless view.parentView.controller.hideBackButton}}
-      <button class="btn btn-default pull-left installer-back-btn" {{action back}} {{bindAttr disabled="App.router.btnClickInProgress"}}>
+      <button class="btn btn-default pull-left installer-back-btn" {{action back}} {{bindAttr disabled="App.router.btnClickInProgress"}} {{QAAttr "wizard-back"}}>
         &larr; {{t common.back}}
         {{#if App.router.backBtnClickInProgress}}
           {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
         {{/if}}
       </button>
     {{/unless}}
-    <button class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action evaluateStep target="controller"}}>
+    <button class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action evaluateStep target="controller"}} {{QAAttr "wizard-next"}}>
       {{#if App.router.nextBtnClickInProgress}}
         {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
       {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/wizard/step3.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step3.hbs b/ambari-web/app/templates/wizard/step3.hbs
index 09ba206..2a96379 100644
--- a/ambari-web/app/templates/wizard/step3.hbs
+++ b/ambari-web/app/templates/wizard/step3.hbs
@@ -18,7 +18,7 @@
 
 <div id="confirm-hosts" class="wizard-content col-md-9">
   <h4 class="step-title">{{t installer.step3.header}}</h4>
-  <p class="step-description">{{t installer.step3.body}}</p>
+  <p class="step-description" {{QAAttr "step3-description"}}>{{t installer.step3.body}}</p>
 
   <div class="panel panel-default">
     <div class="panel-body">
@@ -27,13 +27,13 @@
         <div class="panel-heading compact-panel-heading">
           <div class="button-section">
             {{#unless view.noHostsSelected}}
-              <button class="btn btn-primary step3-remove-selected-btn" {{action removeSelectedHosts target="controller" }}>
+              <button class="btn btn-primary" {{action removeSelectedHosts target="controller"}} {{QAAttr "remove-selected-button"}}>
                 <i class="glyphicon glyphicon-trash glyphicon-white"></i>
                 <span class="hidden-sm">{{t installer.step3.removeSelected}}</span>
               </button>
             {{/unless}}
             {{#unless isRetryDisabled}}
-              <button class="btn btn-primary decommission" {{action retrySelectedHosts target="view"}}>
+              <button class="btn btn-primary" {{action retrySelectedHosts target="view"}} {{QAAttr "retry-failed-button"}}>
                 <i class="glyphicon glyphicon-repeat glyphicon-white"></i>
                 <span class="hidden-sm">{{t installer.step3.retryFailed}}</span>
               </button>
@@ -44,7 +44,7 @@
                 <li class="first">{{t common.show}}:</li>
                 {{#each category in view.categories}}
                   <li {{bindAttr class=":filter-status category.itemClass"}}>
-                    <a {{action selectCategory category target="view"}} href="#">
+                    <a {{action selectCategory category target="view"}} {{QAAttr "hosts-filter-{category.hostsBootStatus}"}} href="#">
                       {{category.label}}
                     </a>
                   </li>
@@ -59,54 +59,55 @@
         </div>
         <div class="panel-body">
           <div class="pre-scrollable col-sm-12" style="max-height: 440px;">
-            <table id="confirm-hosts-table" class="table table-hover">
+            <table id="confirm-hosts-table" class="table table-hover" {{QAAttr "confirm-hosts-table"}}>
               <thead>
               <tr>
-                <th class="col-md-5">{{t common.host}}</th>
+                <th class="col-md-5" {{QAAttr "confirm-hosts-table-heading-cell"}}>{{t common.host}}</th>
                 <!-- retrieved from local storage initially -->
-                <th class="col-md-2">{{t common.progress}}</th>
-                <th class="col-md-2">{{t common.status}}</th>
+                <th class="col-md-2" {{QAAttr "confirm-hosts-table-heading-cell"}}>{{t common.progress}}</th>
+                <th class="col-md-2" {{QAAttr "confirm-hosts-table-heading-cell"}}>{{t common.status}}</th>
                 <!-- given by the parsing function that parses data from bootstrap call, dynamically assign the color -->
-                <th class="col-md-2">{{t common.action}}</th>
+                <th class="col-md-2" {{QAAttr "confirm-hosts-table-heading-cell"}}>{{t common.action}}</th>
                 <!-- trash icon -->
                 <!-- retry icon -->
-                <th>
+                <th {{QAAttr "confirm-hosts-table-heading-cell"}}>
                   {{view App.CheckboxView checkedBinding="view.pageChecked"}}
                 </th>
               </tr>
               </thead>
-              <tbody>
+              <tbody {{QAAttr "confirm-hosts-table-body"}}>
               {{#if view.pageContent}}
                 {{#each host in view.pageContent}}
-                  {{#view App.WizardHostView categoryBinding="controller.category" hostInfoBinding="host"}}
-                    <td class="host">
-                      <span title="{{unbound host.name}}" class="trim_hostname">{{host.name}}</span>
+                  {{#view App.WizardHostView categoryBinding="controller.category" hostInfoBinding="host" data-qa="confirm-hosts-table-body-row"}}
+                    <td class="host" {{QAAttr "confirm-hosts-table-body-cell"}}>
+                      <span title="{{unbound host.name}}" class="trim_hostname" {{QAAttr "confirm-hosts-table-host-name"}}>{{host.name}}</span>
                     </td>
-                    <td class="step3-table-progress">
+                    <td class="step3-table-progress" {{QAAttr "confirm-hosts-table-body-cell"}}>
                       <div class="progress">
                         <div {{bindAttr class="host.bootBarColor host.isBootDone::progress-bar-striped host.isBootDone::active :progress-bar"}}
+                          {{QAAttr "{host.bootBarColor}"}}
                           style="width:100%">
                         </div>
                       </div>
                     </td>
-                    <td class="step3-table-status">
-                      <a href="javascript:void(null)" data-toggle="modal" {{action hostLogPopup host target="controller"}}>
-                        <span {{bindAttr class="host.bootStatusColor"}}>{{host.bootStatusForDisplay}}</span>
+                    <td class="step3-table-status" {{QAAttr "confirm-hosts-table-body-cell"}}>
+                      <a href="javascript:void(null)" data-toggle="modal" {{action hostLogPopup host target="controller"}} {{QAAttr "host-status-link"}}>
+                        <span {{bindAttr class="host.bootStatusColor"}} {{QAAttr "host-status-{host.bootStatus}"}}>{{host.bootStatusForDisplay}}</span>
                       </a>
                     </td>
-                    <td class="step3-table-action">
-                      <a class="action" href="#" {{action remove target="view"}}{{bindAttr disabled="isBackDisabled"}}>
+                    <td class="step3-table-action" {{QAAttr "confirm-hosts-table-body-cell"}}>
+                      <a class="action" href="#" {{action remove target="view"}} {{bindAttr disabled="isBackDisabled"}} {{QAAttr "remove-host-button"}}>
                         <i class="glyphicon glyphicon-trash" {{translateAttr title="common.remove"}}></i>
                       </a>
                     </td>
-                    <td class="step3-table-checkbox">
-                      {{view App.CheckboxView checkedBinding="host.isChecked"}}
+                    <td class="step3-table-checkbox" {{QAAttr "confirm-hosts-table-body-cell"}}>
+                      {{view App.CheckboxView checkedBinding="host.isChecked" labelIdentifier="select-host-checkbox"}}
                     </td>
                   {{/view}}
                 {{/each}}
               {{else}}
-                <tr>
-                  <td class="step3-table-no-hosts" colspan="5">
+                <tr {{QAAttr "confirm-hosts-table-body-row"}}>
+                  <td class="step3-table-no-hosts" colspan="5" {{QAAttr "confirm-hosts-table-body-cell"}}>
                     {{t hosts.table.noHosts}}
                   </td>
                 </tr>
@@ -124,17 +125,17 @@
       </div>
       <div id="warningsSection">
         {{#if hasMoreRegisteredHosts}}
-          <div {{bindAttr class=":alert :alert-warning"}}>
-            <a href="#" {{action registeredHostsPopup target="controller"}}>{{view.registeredHostsMessage}}</a>
+          <div {{bindAttr class=":alert :alert-warning"}} {{QAAttr "alert-warning"}}>
+            <a href="#" {{action registeredHostsPopup target="controller"}} {{QAAttr "alert-link"}}><span {{QAAttr "other-hosts-link"}}>{{view.registeredHostsMessage}}</span></a>
           </div>
         {{/if}}
         {{#unless disableHostCheck}}
-          <div {{bindAttr class=":alert :alert-warning view.status isWarningsBoxVisible::hidden"}}>
+          <div {{bindAttr class=":alert :alert-warning view.status isWarningsBoxVisible::hidden"}} {{QAAttr "{view.status}"}}>
             {{view.message}}
-            <a href="#" {{action hostWarningsPopup warnings target="controller"}}>{{view.linkText}}</a>
+            <a href="#" {{action hostWarningsPopup warnings target="controller"}} {{QAAttr "alert-link"}}>{{view.linkText}}</a>
             {{#unless isBootstrapFailed}}
               {{#unless isWarningsLoaded}}
-                {{view App.SpinnerView}}
+                {{view App.SpinnerView data-qa="spinner"}}
               {{/unless}}
             {{/unless}}
           </div>
@@ -146,13 +147,13 @@
 </div>
 <div class="wizard-footer col-md-12">
   <div class="btn-area">
-    <button type="button" class="btn btn-default pull-left installer-back-btn" {{bindAttr disabled="isBackButtonDisabled"}} {{action back}}>
+    <button type="button" class="btn btn-default pull-left installer-back-btn" {{bindAttr disabled="isBackButtonDisabled"}} {{action back}} {{QAAttr "wizard-back"}}>
       &larr; {{t common.back}}
       {{#if App.router.backBtnClickInProgress}}
         {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
       {{/if}}
     </button>
-    <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="isNextButtonDisabled"}} {{action submit target="controller"}}>
+    <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="isNextButtonDisabled"}} {{action submit target="controller"}} {{QAAttr "wizard-next"}}>
       {{#if App.router.nextBtnClickInProgress}}
         {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
       {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/wizard/step3/step3_host_warning_popup_footer.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step3/step3_host_warning_popup_footer.hbs b/ambari-web/app/templates/wizard/step3/step3_host_warning_popup_footer.hbs
index 10c7e32..8d2eaa7 100644
--- a/ambari-web/app/templates/wizard/step3/step3_host_warning_popup_footer.hbs
+++ b/ambari-web/app/templates/wizard/step3/step3_host_warning_popup_footer.hbs
@@ -22,13 +22,14 @@
       <div class="progress-bar-info active progress-bar" {{bindAttr style="view.progressWidth"}}></div>
     </div>
   {{else}}
-    <span {{bindAttr class="view.updateStatusClass"}}>{{view.updateStatus}}</span>
+    <span {{bindAttr class="view.updateStatusClass"}} {{QAAttr "host-checks-result-{view.footerController.checksUpdateStatus}"}}>{{view.updateStatus}}</span>
   {{/if}}
 </div>
 {{#if view.parentView.secondary}}
   <button type="button" class="btn btn-info"
     {{bindAttr disabled="view.isUpdateInProgress"}}
-    {{action onSecondary target="view.parentView"}}>
+    {{action onSecondary target="view.parentView"}}
+    {{QAAttr "modal-secondary"}}>
       <i class="glyphicon glyphicon-repeat"></i>&nbsp;{{view.parentView.secondary}}
   </button>{{/if}}{{#if view.parentView.primary}}<button type="button" class="btn btn-default"
     {{action onPrimary target="view.parentView"}}>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs b/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs
index 7b8475f..e8c5201 100644
--- a/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs
+++ b/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs
@@ -19,7 +19,10 @@
 {{#if view.checkHostFinished}}
     <div id="host-warnings">
       <div class="notice">
-        <span>{{t installer.step3.hostWarningsPopup.checks}} <b>{{view.warningsNotice}}</b>.<br>{{t installer.step3.hostWarningsPopup.notice}}</span>
+        <span>{{t installer.step3.hostWarningsPopup.checks}} <b>{{view.warningsNotice}}</b>.<br>
+          {{t installer.step3.hostWarningsPopup.notice.beginning}}
+          <div class="code-snippet" {{QAAttr "host-cleanup-script"}}>{{t installer.step3.hostWarningsPopup.notice.command}}</div>
+          {{t installer.step3.hostWarningsPopup.notice.end}}</span>
       </div>
       <div class="row">
         <form class="form-horizontal">
@@ -30,12 +33,12 @@
               </label>
             </div>
             <div class="col-md-5">
-              {{view view.hostSelectView classNames="form-control input-sm"}}
+              {{view view.hostSelectView classNames="form-control input-sm" data-qa="host-select"}}
             </div>
             {{#if view.totalWarningsCount}}
               <div class="col-md-3 col-md-offset-2">
                 <a href="javascript:void(null)" title="Show Details" {{action openWarningsInDialog target="view"}}
-                   class="task-detail-open-dialog control-label display-inline-block">
+                   class="control-label display-inline-block">
                    <i class="icon-external-link"></i>&nbsp;
                    {{t installer.step3.hostWarningsPopup.report}}
                 </a>
@@ -44,25 +47,25 @@
           </div>
         </form>
       </div>
-      <div class="panel warnings-list" id="accordion2">
+      <div class="panel warnings-list" id="accordion2" {{QAAttr "host-checks-list"}}>
         {{#each category in view.content}}
-          <div class="panel-group block">
+          <div class="panel-group block" {{QAAttr "host-checks-category"}}>
             <div class="panel panel-default">
-              <div class="panel-heading" {{action onToggleBlock category}}>
+              <div class="panel-heading" {{action onToggleBlock category}} {{QAAttr "host-checks-category-heading"}}>
                 <i {{bindAttr class=":pull-left :panel-toggle category.isCollapsed:icon-caret-right:icon-caret-down"}}></i>
                 {{#if category.warnings.length}}
-                  <i class="pull-right panel-toggle icon-warning-sign"></i>
+                  <i class="pull-right panel-toggle icon-warning-sign" {{QAAttr "host-checks-category-warning"}}></i>
                 {{else}}
-                  <i class="pull-right panel-toggle glyphicon glyphicon-ok"></i>
+                  <i class="pull-right panel-toggle glyphicon glyphicon-ok"{{QAAttr "host-checks-category-success"}}></i>
                 {{/if}}
-                <a class="panel-toggle">
+                <a class="panel-toggle" {{QAAttr "{category.category}-issues"}}>
                   {{category.title}} ({{category.warnings.length}})
                 </a>
               </div>
-              <div id="{{unbound category.category}}" class="panel-body collapse in" style="display: none">
+              <div id="{{unbound category.category}}" class="panel-body collapse in" style="display: none" {{QAAttr "host-checks-category-body"}}>
                 {{#if category.warnings.length}}
                   <table class="table">
-                    <thead>
+                    <thead {{QAAttr "host-checks-category-description"}}>
                       <tr>
                         <th colspan="4">{{{category.message}}}</th>
                       </tr>
@@ -73,7 +76,7 @@
                     <tbody>
                       {{#each warning in category.warnings}}
                       <tr>
-                        <td class="warning-name" {{bindAttr data-original-title="warning.command"}} >{{{warning.name}}}</td>
+                        <td class="warning-name" {{bindAttr data-original-title="warning.command"}} {{QAAttr "host-warning-name"}}>{{{warning.name}}}</td>
                         {{#if warning.version}}
                           <td class="package-version">{{warning.version}}</td>
                         {{else}}
@@ -85,7 +88,7 @@
                           <td></td>
                         {{/if}}
                         <td>{{category.action}}
-                          <a href="javascript:void(null);" rel='HostsListTooltip' {{bindAttr data-original-title="warning.hostsList"}} {{action showHostsPopup warning.hostsLong}}>
+                          <a href="javascript:void(null);" rel='HostsListTooltip' {{bindAttr data-original-title="warning.hostsList"}} {{action showHostsPopup warning.hostsLong}} {{QAAttr "host-with-warning-link"}}>
                             {{warning.hosts.length}}
                             {{#if warning.onSingleHost}}
                               {{t installer.step3.hostWarningsPopup.host}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/templates/wizard/step3/step3_registered_hosts_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step3/step3_registered_hosts_popup.hbs b/ambari-web/app/templates/wizard/step3/step3_registered_hosts_popup.hbs
index c5907a7..7ea1b32b 100644
--- a/ambari-web/app/templates/wizard/step3/step3_registered_hosts_popup.hbs
+++ b/ambari-web/app/templates/wizard/step3/step3_registered_hosts_popup.hbs
@@ -19,6 +19,6 @@
 <p>{{view.message}}</p>
 <ul>
   {{#each host in view.registeredHosts}}
-    <li>{{host}}</li>
+    <li {{QAAttr "unused-host"}}>{{host}}</li>
   {{/each}}
 </ul>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/utils/helper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/helper.js b/ambari-web/app/utils/helper.js
index 0d4ea80..30c0762 100644
--- a/ambari-web/app/utils/helper.js
+++ b/ambari-web/app/utils/helper.js
@@ -384,10 +384,13 @@ Em.Handlebars.registerHelper('QAAttr', function(text, data) {
         conditionals = Em.View._parsePropertyPath(expression);
       if (conditionals.classNames) {
         var sourceValue = Em.Handlebars.getPath(self, conditionals.path, data);
-        value = sourceValue ? conditionals.className : (conditionals.falsyClassName || '');
+        value = sourceValue ? conditionals.className : conditionals.falsyClassName;
       } else {
         value = Em.Handlebars.getPath(self, expression, data);
       }
+      if (Em.isNone(value)) {
+        value = '';
+      }
       text = text.replace(t, value);
     });
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/views/common/checkbox_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/checkbox_view.js b/ambari-web/app/views/common/checkbox_view.js
index 2e1d763..89a160b 100644
--- a/ambari-web/app/views/common/checkbox_view.js
+++ b/ambari-web/app/views/common/checkbox_view.js
@@ -136,6 +136,7 @@ App.CheckboxView = Em.View.extend({
     classNameBindings: 'parentView.labelClassNames',
     tagName: 'label',
     attributeBindings: ['for', 'parentView.checked:checked'],
+    'data-qaBinding': 'parentView.labelIdentifier',
     template: Em.Handlebars.compile('{{view.labelText}}'),
     for: Em.computed.alias('parentView.checkboxId')
   })

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/views/login.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/login.js b/ambari-web/app/views/login.js
index 4a1dbfb..be1b1a7 100644
--- a/ambari-web/app/views/login.js
+++ b/ambari-web/app/views/login.js
@@ -26,13 +26,11 @@ App.LoginView = Em.View.extend({
     didInsertElement: function(){
       this._super();
       this.$().focus();
-    },
-    classNames: ['login-user-name']
+    }
   }),
   passTextField : Em.TextField.extend({
     insertNewline: function(){
       this.get("controller").submit();
-    },
-    classNames: ['login-user-password']
+    }
   })
 });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/views/wizard/step1_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/wizard/step1_view.js b/ambari-web/app/views/wizard/step1_view.js
index 161d794..0161985 100644
--- a/ambari-web/app/views/wizard/step1_view.js
+++ b/ambari-web/app/views/wizard/step1_view.js
@@ -189,7 +189,7 @@ App.WizardStep1View = Em.View.extend({
    * Verify if some invalid repo-urls exist
    * @type {bool}
    */
-  invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', App.Repository.validation.INVALID),
+  invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', 'INVALID'),
 
   /**
    * If all repo links are unchecked
@@ -212,7 +212,7 @@ App.WizardStep1View = Em.View.extend({
 
   popoverView: Em.View.extend({
     tagName: 'i',
-    classNameBindings: ['repository.validation'],
+    classNameBindings: ['repository.validationClassName'],
     attributeBindings: ['repository.errorTitle:title', 'repository.errorContent:data-content'],
     didInsertElement: function () {
       App.popover($(this.get('element')), {'trigger': 'hover'});
@@ -256,7 +256,7 @@ App.WizardStep1View = Em.View.extend({
       if (repository.get('lastBaseUrl') !== repository.get('baseUrl')) {
         repository.setProperties({
           lastBaseUrl: repository.get('baseUrl'),
-          validation: App.Repository.validation.PENDING
+          validation: 'PENDING'
         });
       }
     }, this);

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/views/wizard/step2_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/wizard/step2_view.js b/ambari-web/app/views/wizard/step2_view.js
index 0fbdb59..03c474f 100644
--- a/ambari-web/app/views/wizard/step2_view.js
+++ b/ambari-web/app/views/wizard/step2_view.js
@@ -23,7 +23,7 @@ App.SshKeyFileUploader = Em.View.extend({
   //TODO: rewrite it using tagName and attribute binding
   //TODO: rewrite it as independent component and place it somewhere in utils
   // alternative is to move it to App.WizardStep2View
-  template: Em.Handlebars.compile('<input class="inputfileUgly" type="file" name="file" id="file" {{bindAttr disabled="view.disabled"}} />' +
+  template: Em.Handlebars.compile('<input class="inputfileUgly" type="file" name="file" id="file" {{bindAttr disabled="view.disabled"}} {{QAAttr "upload-ssh-input"}} />' +
       '<label class="btn btn-default" for="file" {{bindAttr disabled="view.disabled"}}>Choose file</label>' +
       '<span id="selectedFileName">No file selected</span>'),
 
@@ -85,7 +85,6 @@ App.WizardStep2View = Em.View.extend({
    */
   providingSSHKeyRadioButton: App.RadioButtonView.extend({
     classNames: ['radio'],
-    checkboxClassNames: ['radio-btn-provide-ssh-key'],
     checked: Em.computed.alias('controller.content.installOptions.useSsh'),
 
     click: function () {
@@ -100,7 +99,6 @@ App.WizardStep2View = Em.View.extend({
    */
   manualRegistrationRadioButton: App.RadioButtonView.extend({
     classNames: ['radio'],
-    checkboxClassNames: ['radio-btn-manual-reg'],
     checked: Em.computed.alias('controller.content.installOptions.manualInstall'),
 
     click: function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/app/views/wizard/step3/hostWarningPopupBody_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/wizard/step3/hostWarningPopupBody_view.js b/ambari-web/app/views/wizard/step3/hostWarningPopupBody_view.js
index 75e8743..786c4f7 100644
--- a/ambari-web/app/views/wizard/step3/hostWarningPopupBody_view.js
+++ b/ambari-web/app/views/wizard/step3/hostWarningPopupBody_view.js
@@ -386,10 +386,11 @@ App.WizardStep3HostWarningPopupBody = Em.View.extend({
   showHostsPopup: function (hosts) {
     $('.tooltip').hide();
     return App.ModalPopup.show({
+      'data-qa': 'hosts-with-warnings-modal',
       header: Em.I18n.t('installer.step3.hostWarningsPopup.allHosts'),
       bodyClass: Em.View.extend({
         hosts: hosts.context,
-        template: Em.Handlebars.compile('<ul>{{#each host in view.hosts}}<li>{{host}}</li>{{/each}}</ul>')
+        template: Em.Handlebars.compile('<ul>{{#each host in view.hosts}}<li {{QAAttr "host-with-warning-name"}}>{{host}}</li>{{/each}}</ul>')
       }),
       secondary: null
     });

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/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 441af87..74556e8 100644
--- a/ambari-web/test/controllers/installer_test.js
+++ b/ambari-web/test/controllers/installer_test.js
@@ -131,7 +131,7 @@ describe('App.InstallerController', function () {
                   "isEmpty": false,
                   "errorTitle": "",
                   "errorContent": "",
-                  "validation": "glyphicon glyphicon-repeat"
+                  "validation": "INPROGRESS"
                 }
               ]
             }
@@ -220,7 +220,7 @@ describe('App.InstallerController', function () {
                   "isEmpty": false,
                   "errorTitle": "1",
                   "errorContent": "1",
-                  "validation": "glyphicon glyphicon-ok"
+                  "validation": "OK"
                 }
               ]
             }
@@ -307,7 +307,7 @@ describe('App.InstallerController', function () {
                   "repoId": 11,
                   "errorTitle": "500:error",
                   "errorContent": "",
-                  "validation": "glyphicon glyphicon-exclamation-sign"
+                  "validation": "INVALID"
                 }
               ]
             }

http://git-wip-us.apache.org/repos/asf/ambari/blob/ae647a2a/ambari-web/test/views/wizard/step1_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/wizard/step1_view_test.js b/ambari-web/test/views/wizard/step1_view_test.js
index 1eceab1..8ed1b47 100644
--- a/ambari-web/test/views/wizard/step1_view_test.js
+++ b/ambari-web/test/views/wizard/step1_view_test.js
@@ -35,11 +35,13 @@ describe('App.WizardStep1View', function () {
 
   App.TestAliases.testAsComputedOr(getView(), 'isSubmitDisabled', ['invalidFormatUrlExist', 'isNoOsChecked', 'isNoOsFilled', 'controller.content.isCheckInProgress', 'App.router.btnClickInProgress']);
 
-  App.TestAliases.testAsComputedSomeBy(getView(), 'invalidUrlExist', 'allRepositories', 'validation', App.Repository.validation.INVALID);
+  App.TestAliases.testAsComputedSomeBy(getView(), 'invalidUrlExist', 'allRepositories', 'validation', 'INVALID');
 
   describe('#editLocalRepository', function () {
 
-    it('should update repository', function () {
+    var repository;
+
+    beforeEach(function () {
       view.reopen({
         allRepositories: [
           Em.Object.create({
@@ -50,9 +52,15 @@ describe('App.WizardStep1View', function () {
         ]
       });
       view.editLocalRepository();
-      var repository = view.get('allRepositories.firstObject');
+      repository = view.get('allRepositories.firstObject');
+    });
+
+    it('should update repository base URL', function () {
       expect(repository.get('lastBaseUrl')).to.equal(repository.get('baseUrl'));
-      expect(repository.get('validation')).to.be.empty;
+    });
+
+    it('should update repository validation status', function () {
+      expect(repository.get('validation')).to.equal('PENDING');
     });
   });
 });
\ No newline at end of file