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}} <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/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"}}>
← {{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"}}>
← {{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> {{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>
{{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