Repository: ambari Updated Branches: refs/heads/trunk 388c6c102 -> f37a342a0
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/f37a342a Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f37a342a Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f37a342a Branch: refs/heads/trunk Commit: f37a342a040a1a9b4ae951c2dfabbf43b3bb1173 Parents: 388c6c1 Author: ababiichuk <ababiic...@hortonworks.com> Authored: Fri Mar 31 15:08:53 2017 +0300 Committer: ababiichuk <ababiic...@hortonworks.com> Committed: Fri Mar 31 15:08:53 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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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}} <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"}}> ← {{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/f37a342a/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"}}> ← {{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/f37a342a/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"}}> ← {{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/f37a342a/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> {{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/f37a342a/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> {{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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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/f37a342a/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