You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2015/03/05 14:05:06 UTC
ambari git commit: AMBARI-9931 RU: upgrade dialog does not refresh
with current tasks w/o browser reload. (atkach)
Repository: ambari
Updated Branches:
refs/heads/trunk d385af880 -> f149fd15c
AMBARI-9931 RU: upgrade dialog does not refresh with current tasks w/o browser reload. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f149fd15
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f149fd15
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f149fd15
Branch: refs/heads/trunk
Commit: f149fd15cf83c64a28e7ce1e20d3b7b08f159cb5
Parents: d385af8
Author: Andrii Tkach <at...@hortonworks.com>
Authored: Thu Mar 5 13:39:32 2015 +0200
Committer: Andrii Tkach <at...@hortonworks.com>
Committed: Thu Mar 5 13:39:32 2015 +0200
----------------------------------------------------------------------
.../main/admin/stack_and_upgrade_controller.js | 62 +++++++++++++++--
.../stack_upgrade/stack_upgrade_wizard.hbs | 26 ++++---
.../main/admin/stack_upgrade/upgrade_group.hbs | 23 ++++---
.../main/admin/stack_upgrade/upgrade_task.hbs | 72 +++++++++++---------
.../admin/stack_upgrade/upgrade_group_view.js | 55 +--------------
.../admin/stack_upgrade/upgrade_wizard_view.js | 37 ++++++++++
.../admin/stack_and_upgrade_controller_test.js | 27 ++++++++
.../stack_upgrade/upgrade_wizard_view_test.js | 61 +++++++++++++++--
8 files changed, 245 insertions(+), 118 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f149fd15/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index 98c0ed7..73975eb 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -74,6 +74,12 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
wizardStorageProperties: ['upgradeId', 'upgradeVersion', 'currentVersion', 'isDowngrade'],
/**
+ * mutable properties of Upgrade Task
+ * @type {Array}
+ */
+ taskDetailsProperties: ['status', 'stdout', 'stderr', 'error_log', 'host_name', 'output_log'],
+
+ /**
* path to the mock json
* @type {String}
*/
@@ -199,10 +205,9 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
updateUpgradeData: function (newData) {
var oldData = this.get('upgradeData'),
groupsMap = {},
- itemsMap = {},
- tasksMap = {};
+ itemsMap = {};
- if (Em.isNone(oldData)) {
+ if (Em.isNone(oldData) || (newData.upgrade_groups.length !== oldData.upgradeGroups.length)) {
this.initUpgradeData(newData);
} else {
//create entities maps
@@ -241,8 +246,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
var upgradeItems = [];
newGroup.upgrade_items.forEach(function (item) {
var oldItem = App.upgradeEntity.create({type: 'ITEM'}, item.UpgradeItem);
- var tasks = [];
- oldItem.set('tasks', tasks);
+ oldItem.set('tasks', []);
upgradeItems.pushObject(oldItem);
});
upgradeItems.reverse();
@@ -257,6 +261,54 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
},
/**
+ * request Upgrade Item and its tasks from server
+ * @return {$.ajax}
+ */
+ getUpgradeItem: function (item) {
+ return App.ajax.send({
+ name: 'admin.upgrade.upgrade_item',
+ sender: this,
+ data: {
+ upgradeId: item.get('request_id'),
+ groupId: item.get('group_id'),
+ stageId: item.get('stage_id')
+ },
+ success: 'getUpgradeItemSuccessCallback'
+ });
+ },
+
+ /**
+ * success callback of <code>getTasks</code>
+ * @param {object} data
+ */
+ getUpgradeItemSuccessCallback: function (data) {
+ this.get('upgradeData.upgradeGroups').forEach(function (group) {
+ if (group.get('group_id') === data.UpgradeItem.group_id) {
+ group.get('upgradeItems').forEach(function (item) {
+ if (item.get('stage_id') === data.UpgradeItem.stage_id) {
+ if (item.get('tasks.length')) {
+ item.set('isTasksLoaded', true);
+ data.tasks.forEach(function (task) {
+ var currentTask = item.get('tasks').findProperty('id', task.Tasks.id);
+ this.get('taskDetailsProperties').forEach(function (property) {
+ currentTask.set(property, task.Tasks[property]);
+ }, this);
+ }, this);
+ } else {
+ var tasks = [];
+ data.tasks.forEach(function (task) {
+ tasks.pushObject(App.upgradeEntity.create({type: 'TASK'}, task.Tasks));
+ });
+ item.set('tasks', tasks);
+ }
+ item.set('isTasksLoaded', true);
+ }
+ }, this);
+ }
+ }, this);
+ },
+
+ /**
* downgrade confirmation popup
* @param {object} event
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/f149fd15/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
index f8d6de8..6dec0e3 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
@@ -39,10 +39,14 @@
<div class="row-fluid">
<div class="pull-left">{{t admin.stackUpgrade.dialog.inProgress}} {{view.runningItem.text}}</div>
{{#if view.isDetailsOpened}}
- <a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.hide}}</a>
- <div class="clear">
- {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
- </div>
+ <a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.hide}}</a>
+ {{#if view.runningItem.isTasksLoaded}}
+ <div class="clear">
+ {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
+ </div>
+ {{else}}
+ <div class="clear spinner"></div>
+ {{/if}}
{{else}}
<a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.open}}</a>
{{/if}}
@@ -54,11 +58,15 @@
<div class="row-fluid">
<div class="pull-left">{{t admin.stackUpgrade.dialog.failed}} {{view.failedItem.text}}</div>
{{#if view.isDetailsOpened}}
- <a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.hide}}</a>
- <div class="clear">
- {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
- </div>
- {{else}}
+ <a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.hide}}</a>
+ {{#if view.failedItem.isTasksLoaded}}
+ <div class="clear">
+ {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
+ </div>
+ {{else}}
+ <div class="clear spinner"></div>
+ {{/if}}
+ {{else}}
<a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.open}}</a>
{{/if}}
</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f149fd15/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
index e4e8149..41807a4 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
@@ -57,19 +57,20 @@
</div>
{{/if}}
</div>
- {{/if}}
- {{#if item.isExpanded}}
- {{#if item.isTasksLoaded}}
- {{! List of Tasks}}
- <div class="task-list margin-bottom-5">
- {{#each task in item.tasks}}
- {{view App.upgradeTaskView contentBinding="task" tasksBinding="item.tasks"}}
- {{/each}}
- </div>
- {{else}}
- <div class="spinner"></div>
+ {{#if item.isExpanded}}
+ {{#if item.isTasksLoaded}}
+ {{! List of Tasks}}
+ <div class="task-list margin-bottom-5">
+ {{#each task in item.tasks}}
+ {{view App.upgradeTaskView contentBinding="task" tasksBinding="item.tasks"}}
+ {{/each}}
+ </div>
+ {{else}}
+ <div class="spinner"></div>
+ {{/if}}
{{/if}}
+
{{/if}}
{{/each}}
</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/f149fd15/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
index 9192d3e..92455d9 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
@@ -22,44 +22,48 @@
</div>
{{/unless}}
{{#if view.showContent}}
- <div class="task-details task-detail-info">
- <ul class="nav nav-tabs">
- <li class="active"><a data-toggle="tab" {{bindAttr href="view.logTabIdLink"}}>{{t common.stdout}}</a></li>
- <li><a {{bindAttr href="view.errorTabIdLInk"}} data-toggle="tab">{{t common.stderr}}</a></li>
- </ul>
- <div class="tab-content">
- <div class="tab-pane active" {{bindAttr id="view.logTabId"}}>
- <p>{{view.content.host_name}}</p>
- <div class="row-fluid">
- <p class="pull-left">{{view.content.output_log}}</p>
- <div class="manage-controls pull-right">
- <a title="Click to Copy" {{action copyOutLog view.content target="view"}} class="task-detail-copy">
- <i class="icon-copy"></i> {{t common.copy}}
- </a>
- <a title="Open in New Window" {{action openOutLog target="view"}} class="task-detail-open-dialog">
- <i class="icon-external-link"></i> {{t common.open}}
- </a>
+ {{#if view.content}}
+ <div class="task-details task-detail-info">
+ <ul class="nav nav-tabs">
+ <li class="active"><a data-toggle="tab" {{bindAttr href="view.logTabIdLink"}}>{{t common.stdout}}</a></li>
+ <li><a {{bindAttr href="view.errorTabIdLInk"}} data-toggle="tab">{{t common.stderr}}</a></li>
+ </ul>
+ <div class="tab-content">
+ <div class="tab-pane active" {{bindAttr id="view.logTabId"}}>
+ <p>{{view.content.host_name}}</p>
+ <div class="row-fluid">
+ <p class="pull-left">{{view.content.output_log}}</p>
+ <div class="manage-controls pull-right">
+ <a title="Click to Copy" {{action copyOutLog view.content target="view"}} class="task-detail-copy">
+ <i class="icon-copy"></i> {{t common.copy}}
+ </a>
+ <a title="Open in New Window" {{action openOutLog target="view"}} class="task-detail-open-dialog">
+ <i class="icon-external-link"></i> {{t common.open}}
+ </a>
+ </div>
</div>
+ <pre {{bindAttr class="view.outputLogOpened:hidden :stdout"}}>{{view.content.stdout}}</pre>
+ {{view Ember.TextArea valueBinding="view.content.stdout" classBinding="view.outputLogOpened::hidden" readonly="readonly"}}
</div>
- <pre {{bindAttr class="view.outputLogOpened:hidden :stdout"}}>{{view.content.stdout}}</pre>
- {{view Ember.TextArea valueBinding="view.content.stdout" classBinding="view.outputLogOpened::hidden" readonly="readonly"}}
- </div>
- <div class="tab-pane" {{bindAttr id="view.errorTabId"}}>
- <p>{{view.content.host_name}}</p>
- <div class="row-fluid">
- <p class="pull-left">{{view.content.error_log}}</p>
- <div class="manage-controls pull-right">
- <a title="Click to Copy" {{action copyErrLog view.content target="view"}} class="task-detail-copy">
- <i class="icon-copy"></i> {{t common.copy}}
- </a>
- <a title="Open in New Window" {{action openErrorLog target="view"}} class="task-detail-open-dialog">
- <i class="icon-external-link"></i> {{t common.open}}
- </a>
+ <div class="tab-pane" {{bindAttr id="view.errorTabId"}}>
+ <p>{{view.content.host_name}}</p>
+ <div class="row-fluid">
+ <p class="pull-left">{{view.content.error_log}}</p>
+ <div class="manage-controls pull-right">
+ <a title="Click to Copy" {{action copyErrLog view.content target="view"}} class="task-detail-copy">
+ <i class="icon-copy"></i> {{t common.copy}}
+ </a>
+ <a title="Open in New Window" {{action openErrorLog target="view"}} class="task-detail-open-dialog">
+ <i class="icon-external-link"></i> {{t common.open}}
+ </a>
+ </div>
</div>
+ <pre {{bindAttr class="view.errorLogOpened:hidden :stderr"}}>{{view.content.stderr}}</pre>
+ {{view Ember.TextArea valueBinding="view.content.stderr" classBinding="view.errorLogOpened::hidden" readonly="readonly"}}
</div>
- <pre {{bindAttr class="view.errorLogOpened:hidden :stderr"}}>{{view.content.stderr}}</pre>
- {{view Ember.TextArea valueBinding="view.content.stderr" classBinding="view.errorLogOpened::hidden" readonly="readonly"}}
</div>
</div>
- </div>
+ {{else}}
+ <div class="spinner"></div>
+ {{/if}}
{{/if}}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f149fd15/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js
index 3813875..2b08cca 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_group_view.js
@@ -23,11 +23,6 @@ App.upgradeGroupView = Em.View.extend({
templateName: require('templates/main/admin/stack_upgrade/upgrade_group'),
/**
- * @type {Array}
- */
- taskDetailsProperties: ['status', 'stdout', 'stderr', 'error_log', 'host_name', 'output_log'],
-
- /**
* Only one UpgradeGroup or UpgradeItem could be expanded at a time
* @param {object} event
*/
@@ -69,7 +64,7 @@ App.upgradeGroupView = Em.View.extend({
var self = this;
if (item && item.get('isExpanded')) {
- this.getTasks(item).complete(function () {
+ this.get('controller').getUpgradeItem(item).complete(function () {
self.set('timer', setTimeout(function () {
self.doPolling(item);
}, App.bgOperationsUpdateInterval));
@@ -79,54 +74,6 @@ App.upgradeGroupView = Em.View.extend({
}
},
- /**
- * request tasks from server
- * @return {$.ajax}
- */
- getTasks: function (item) {
- return App.ajax.send({
- name: 'admin.upgrade.upgrade_item',
- sender: this,
- data: {
- upgradeId: item.get('request_id'),
- groupId: item.get('group_id'),
- stageId: item.get('stage_id')
- },
- success: 'getTasksSuccessCallback'
- });
- },
-
- /**
- * success callback of <code>getTasks</code>
- * @param {object} data
- */
- getTasksSuccessCallback: function (data) {
- this.get('controller.upgradeData.upgradeGroups').forEach(function (group) {
- if (group.get('group_id') === data.UpgradeItem.group_id) {
- group.get('upgradeItems').forEach(function (item) {
- if (item.get('stage_id') === data.UpgradeItem.stage_id) {
- if (item.get('tasks.length')) {
- item.set('isTasksLoaded', true);
- data.tasks.forEach(function (task) {
- var currentTask = item.get('tasks').findProperty('id', task.Tasks.id);
- this.get('taskDetailsProperties').forEach(function (property) {
- currentTask.set(property, task.Tasks[property]);
- }, this);
- }, this);
- } else {
- var tasks = [];
- data.tasks.forEach(function (task) {
- tasks.pushObject(App.upgradeEntity.create({type: 'TASK'}, task.Tasks));
- });
- item.set('tasks', tasks);
- }
- item.set('isTasksLoaded', true);
- }
- }, this);
- }
- }, this);
- },
-
willDestroyElement: function () {
clearTimeout(this.get('timer'));
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f149fd15/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
index aff43b6..b989ac7 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
@@ -42,6 +42,13 @@ App.upgradeWizardView = Em.View.extend({
updateTimer: null,
/**
+ * update timer of Upgrade Item
+ * @type {number|null}
+ * @default null
+ */
+ upgradeItemTimer: null,
+
+ /**
* @type {boolean}
*/
isLoaded: false,
@@ -210,6 +217,15 @@ App.upgradeWizardView = Em.View.extend({
},
/**
+ * close details block if no active task present
+ */
+ closeDetails: function () {
+ if (this.get('noActiveItem')) {
+ this.set('isDetailsOpened', false);
+ }
+ }.observes('noActiveItem'),
+
+ /**
* start polling upgrade data
*/
startPolling: function () {
@@ -234,6 +250,7 @@ App.upgradeWizardView = Em.View.extend({
*/
willDestroyElement: function () {
clearTimeout(this.get('updateTimer'));
+ clearTimeout(this.get('upgradeItemTimer'));
this.set('isLoaded', false);
},
@@ -250,12 +267,31 @@ App.upgradeWizardView = Em.View.extend({
},
/**
+ * poll for tasks when item is expanded
+ */
+ doUpgradeItemPolling: function () {
+ var self = this;
+ var item = this.get('runningItem') || this.get('failedItem');
+
+ if (item && this.get('isDetailsOpened')) {
+ this.get('controller').getUpgradeItem(item).complete(function () {
+ self.set('upgradeItemTimer', setTimeout(function () {
+ self.doUpgradeItemPolling();
+ }, App.bgOperationsUpdateInterval));
+ });
+ } else {
+ clearTimeout(this.get('upgradeItemTimer'));
+ }
+ }.observes('isDetailsOpened'),
+
+ /**
* set current upgrade item state to FAILED (for HOLDING_FAILED) or TIMED_OUT (for HOLDING_TIMED_OUT)
* in order to ignore fail and continue Upgrade
* @param {object} event
*/
continue: function (event) {
this.get('controller').setUpgradeItemStatus(event.context, event.context.get('status').slice(8));
+ this.set('isDetailsOpened', false);
},
/**
@@ -264,6 +300,7 @@ App.upgradeWizardView = Em.View.extend({
*/
retry: function (event) {
this.get('controller').setUpgradeItemStatus(event.context, 'PENDING');
+ this.set('isDetailsOpened', false);
},
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/f149fd15/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index acd56b1..2af6753 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -185,6 +185,33 @@ describe('App.MainAdminStackAndUpgradeController', function() {
});
});
+ describe("#getUpgradeItem()", function() {
+ beforeEach(function () {
+ sinon.stub(App.ajax, 'send', Em.K);
+ });
+ afterEach(function () {
+ App.ajax.send.restore();
+ });
+ it("", function() {
+ var item = Em.Object.create({
+ request_id: 1,
+ group_id: 2,
+ stage_id: 3
+ });
+ controller.getUpgradeItem(item);
+ expect(App.ajax.send.getCall(0).args[0]).to.eql({
+ name: 'admin.upgrade.upgrade_item',
+ sender: controller,
+ data: {
+ upgradeId: 1,
+ groupId: 2,
+ stageId: 3
+ },
+ success: 'getUpgradeItemSuccessCallback'
+ });
+ });
+ });
+
describe("#openUpgradeDialog()", function () {
before(function () {
sinon.stub(App.router, 'transitionTo', Em.K);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f149fd15/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
index b28b18f..d37649d 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
@@ -28,7 +28,8 @@ describe('App.upgradeWizardView', function () {
controller: Em.Object.create({
upgradeData: Em.Object.create(),
loadUpgradeData: Em.K,
- setUpgradeItemStatus: Em.K
+ setUpgradeItemStatus: Em.K,
+ getUpgradeItem: Em.K
})
});
view.removeObserver('App.clusterName', view, 'startPolling');
@@ -40,9 +41,9 @@ describe('App.upgradeWizardView', function () {
expect(view.get('upgradeGroups')).to.be.empty;
});
it("upgradeGroups is valid", function () {
- view.set('controller.upgradeData.upgradeGroups', [1]);
+ view.set('controller.upgradeData.upgradeGroups', [Em.Object.create()]);
view.propertyDidChange('upgradeGroups');
- expect(view.get('upgradeGroups')).to.eql([1]);
+ expect(view.get('upgradeGroups')).to.not.be.empty;
});
});
@@ -172,6 +173,7 @@ describe('App.upgradeWizardView', function () {
it("", function () {
view.continue({context: Em.Object.create({'status': 'HOLDING_FAILED'})});
expect(view.get('controller').setUpgradeItemStatus.calledWith(Em.Object.create({'status': 'HOLDING_FAILED'}), 'FAILED')).to.be.true;
+ expect(view.get('isDetailsOpened')).to.be.false;
});
});
@@ -199,6 +201,7 @@ describe('App.upgradeWizardView', function () {
it("", function () {
view.retry({context: Em.Object.create({'status': 'FAILED'})});
expect(view.get('controller').setUpgradeItemStatus.calledWith(Em.Object.create({'status': 'FAILED'}), 'PENDING')).to.be.true;
+ expect(view.get('isDetailsOpened')).to.be.false;
});
});
@@ -251,10 +254,10 @@ describe('App.upgradeWizardView', function () {
});
it("running item present", function () {
view.set('activeGroup.upgradeItems', [
- {status: 'IN_PROGRESS'}
+ Em.Object.create({status: 'IN_PROGRESS'})
]);
view.propertyDidChange('runningItem');
- expect(view.get('runningItem')).to.be.eql({status: 'IN_PROGRESS'});
+ expect(view.get('runningItem')).to.be.eql(Em.Object.create({status: 'IN_PROGRESS'}));
});
});
@@ -593,4 +596,52 @@ describe('App.upgradeWizardView', function () {
});
});
+ describe("#doUpgradeItemPolling()", function () {
+ beforeEach(function () {
+ sinon.stub(view.get('controller'), 'getUpgradeItem', function () {
+ return {
+ complete: function (callback) {
+ callback();
+ }
+ }
+ });
+ sinon.spy(view, 'doUpgradeItemPolling');
+ this.clock = sinon.useFakeTimers();
+ });
+ afterEach(function () {
+ view.get('controller').getUpgradeItem.restore();
+ view.doUpgradeItemPolling.restore();
+ this.clock.restore();
+ });
+ it("running item details", function () {
+ view.reopen({
+ runningItem: {},
+ failedItem: null
+ });
+ view.set('isDetailsOpened', true);
+ //doUpgradeItemPolling triggered by observer
+ expect(view.get('controller').getUpgradeItem.calledOnce).to.be.true;
+ this.clock.tick(App.bgOperationsUpdateInterval);
+ expect(view.doUpgradeItemPolling.calledTwice).to.be.true;
+ });
+ it("failed item details", function () {
+ view.reopen({
+ failedItem: {},
+ runningItem: null
+ });
+ view.set('isDetailsOpened', true);
+ view.doUpgradeItemPolling();
+ expect(view.get('controller').getUpgradeItem.calledOnce).to.be.true;
+ this.clock.tick(App.bgOperationsUpdateInterval);
+ expect(view.doUpgradeItemPolling.calledTwice).to.be.true;
+ });
+ it("details not opened", function () {
+ view.set('isDetailsOpened', false);
+ //doUpgradeItemPolling triggered by observer
+ expect(view.get('controller').getUpgradeItem.calledOnce).to.be.false;
+ this.clock.tick(App.bgOperationsUpdateInterval);
+ expect(view.doUpgradeItemPolling.calledOnce).to.be.true;
+ });
+ });
+
});