blob: 23ccf374b298a5dd5f72e2811a17df62f084d23b [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var Ember = require('ember');
var App = require('app');
require('controllers/global/background_operations_controller');
require('views/common/modal_popup');
require('utils/helper');
require('utils/host_progress_popup');
describe('App.HostPopup', function () {
var testTasks = [
{
t: [
{
Tasks: {
status: 'COMPLETED',
id: 2
}
},
{
Tasks: {
status: 'COMPLETED',
id: 3
}
},
{
Tasks: {
status: 'COMPLETED',
id: 1
}
}
],
m: 'All COMPLETED',
r: 'SUCCESS',
p: 100,
ids: [1,2,3]
},
{
t: [
{
Tasks: {
status: 'FAILED',
id: 2
}
},
{
Tasks: {
status: 'COMPLETED',
id: 1
}
}
,
{
Tasks: {
status: 'COMPLETED',
id: 3
}
}
],
m: 'One FAILED',
r: 'FAILED',
p: 100,
ids: [1,2,3]
},
{
t: [
{
Tasks: {
status: 'ABORTED',
id: 1
}
},
{
Tasks: {
status: 'COMPLETED',
id: 2
}
}
],
m: 'One ABORTED',
r: 'ABORTED',
p: 100,
ids: [1,2]
},
{
t: [
{
Tasks: {
status: 'TIMEDOUT',
id: 3
}
},
{
Tasks: {
status: 'COMPLETED',
id: 1
}
}
],
m: 'One TIMEDOUT',
r: 'TIMEDOUT',
p: 100,
ids: [1,3]
},
{
t: [
{
Tasks: {
status: 'IN_PROGRESS',
id: 1
}
},
{
Tasks: {
status: 'COMPLETED',
id: 2
}
}
],
m: 'One IN_PROGRESS',
r: 'IN_PROGRESS',
p: 68,
ids: [1,2]
},
{
t: [
{
Tasks: {
status: 'QUEUED',
id: 2
}
},
{
Tasks: {
status: 'COMPLETED',
id: 3
}
}
],
m: 'Something else',
r: 'PENDING',
p: 55,
ids: [2,3]
}
];
var statusCases = [
{
status: 'FAILED',
result: false
},
{
status: 'ABORTED',
result: false
},
{
status: 'TIMEDOUT',
result: false
},
{
status: 'IN_PROGRESS',
result: true
},
{
status: 'COMPLETED',
result: false
},
{
status: 'PENDING',
result: true
}
];
describe('#setSelectCount', function () {
var itemsForStatusTest = [
{
title: 'Empty',
data: [],
result: [0, 0, 0, 0, 0, 0, 0]
},
{
title: 'All Pending',
data: [
{status: 'pending'},
{status: 'queued'}
],
result: [2, 2, 0, 0, 0, 0, 0]
},
{
title: 'All Completed',
data: [
{status: 'success'},
{status: 'completed'}
],
result: [2, 0, 0, 0, 2, 0, 0]
},
{
title: 'All Failed',
data: [
{status: 'failed'},
{status: 'failed'}
],
result: [2, 0, 0, 2, 0, 0, 0]
},
{
title: 'All InProgress',
data: [
{status: 'in_progress'},
{status: 'in_progress'}
],
result: [2, 0, 2, 0, 0, 0, 0]
},
{
title: 'All Aborted',
data: [
{status: 'aborted'},
{status: 'aborted'}
],
result: [2, 0, 0, 0, 0, 2, 0]
},
{
title: 'All Timedout',
data: [
{status: 'timedout'},
{status: 'timedout'}
],
result: [2, 0, 0, 0, 0, 0, 2]
},
{
title: 'Every Category',
data: [
{status: 'pending'},
{status: 'queued'},
{status: 'success'},
{status: 'completed'},
{status: 'failed'},
{status: 'in_progress'},
{status: 'aborted'},
{status: 'timedout'}
],
result: [8, 2, 1, 1, 2, 1, 1]
}
];
var categories = [
Ember.Object.create({value: 'all'}),
Ember.Object.create({value: 'pending'}),
Ember.Object.create({value: 'in_progress'}),
Ember.Object.create({value: 'failed'}),
Ember.Object.create({value: 'completed'}),
Ember.Object.create({value: 'aborted'}),
Ember.Object.create({value: 'timedout'})
];
itemsForStatusTest.forEach(function(statusTest) {
it(statusTest.title, function() {
App.HostPopup.setSelectCount(statusTest.data, categories);
expect(categories.mapProperty('count')).to.deep.equal(statusTest.result);
});
});
});
describe('#getStatus', function() {
testTasks.forEach(function(testTask) {
it(testTask.m, function() {
expect(App.HostPopup.getStatus(testTask.t)[0]).to.equal(testTask.r);
});
});
});
describe('#getProgress', function() {
testTasks.forEach(function(testTask) {
it(testTask.m, function() {
expect(App.HostPopup.getProgress(testTask.t)).to.equal(testTask.p);
});
});
});
describe('#isAbortableByStatus', function () {
statusCases.forEach(function (item) {
it('should return ' + item.result + ' for ' + item.status, function () {
expect(App.HostPopup.isAbortableByStatus(item.status)).to.equal(item.result);
});
});
});
describe('#abortRequest', function () {
beforeEach(function () {
sinon.spy(App, 'showConfirmationPopup');
});
afterEach(function () {
App.showConfirmationPopup.restore();
});
it('should show confirmation popup', function () {
App.HostPopup.abortRequest(Em.Object.create({
name: 'name'
}));
expect(App.showConfirmationPopup.calledOnce).to.be.true;
});
});
describe('#abortRequestSuccessCallback', function () {
beforeEach(function () {
sinon.spy(App.ModalPopup, 'show');
});
afterEach(function () {
App.ModalPopup.show.restore();
});
it('should open popup', function () {
App.HostPopup.abortRequestSuccessCallback(null, null, {
requestName: 'name',
serviceInfo: Em.Object.create()
});
expect(App.ModalPopup.show.calledOnce).to.be.true;
});
});
describe('#abortRequestErrorCallback', function () {
var popup = App.HostPopup;
beforeEach(function () {
sinon.stub(App.ajax, 'get', function(k) {
if (k === 'modalPopup') return null;
return Em.get(App, k);
});
sinon.spy(App.ModalPopup, 'show');
});
afterEach(function () {
App.ModalPopup.show.restore();
App.ajax.get.restore();
});
it('should open popup', function () {
popup.abortRequestErrorCallback({
responseText: {
message: 'message'
},
status: 404
}, 'status', 'error', {
url: 'url'
}, {
requestId: 0,
serviceInfo: Em.Object.create()
});
expect(App.ModalPopup.show.calledOnce).to.be.true;
});
statusCases.forEach(function (item) {
it('should set serviceInfo.isAbortable to' + item.result + ' if status is ' + item.status, function () {
popup.abortRequestErrorCallback({
responseText: {
message: 'message'
},
status: 404
}, 'status', 'error', {
url: 'url'
}, {
requestId: 0,
serviceInfo: Em.Object.create({
status: item.status
})
});
expect(App.HostPopup.isAbortableByStatus(item.status)).to.equal(item.result);
});
});
});
describe('#setBackgroundOperationHeader', function(){
beforeEach(function (){
sinon.stub(App.HostPopup, "get").returns(true);
sinon.spy(App.HostPopup, "set");
this.stub = sinon.stub(App.router, "get");
});
afterEach(function (){
App.HostPopup.get.restore();
App.HostPopup.set.restore();
App.router.get.restore();
});
it("should display '2 Background Operations Running' when there are 2 background operations running", function(){
this.stub.returns(2);
App.HostPopup.setBackgroundOperationHeader(false);
expect(App.HostPopup.set.calledWith("popupHeaderName", "2 Background Operations Running")).to.be.true;
});
it("should display '1 Background Operation Running' when there is 1 background operation running", function(){
this.stub.returns(1);
App.HostPopup.setBackgroundOperationHeader(false);
expect(App.HostPopup.set.calledWith("popupHeaderName", "1 Background Operation Running")).to.be.true;
});
});
describe('#_getHostsMap', function () {
Em.A([
{
inputData: [
{name: 's1', hostsMap: {h1: {}, h2: {}}},
{name: 's2'}
],
isBackgroundOperations: true,
currentServiceId: null,
serviceName: 's1',
m: '`currentServiceId` is null, `serviceName` exists, `isBackgroundOperations` true, `hostsMap` exists',
e: {h1: {}, h2: {}}
},
{
inputData: [
{name: 's1', hosts: [
{name: 'h1'},
{name: 'h2'}
]},
{name: 's2'}
],
isBackgroundOperations: true,
currentServiceId: null,
serviceName: 's1',
m: '`currentServiceId` is null, `serviceName` exists, `isBackgroundOperations` true, `hosts` exists',
e: {h1: {name: 'h1'}, h2: {name: 'h2'}}
},
{
inputData: [
{id: 1, hostsMap: {h1: {}, h2: {}}},
{id: 2}
],
isBackgroundOperations: true,
currentServiceId: 1,
serviceName: 's1',
m: '`currentServiceId` is 1, `serviceName` exists, `isBackgroundOperations` true, `hostsMap` exists',
e: {h1: {}, h2: {}}
},
{
inputData: [
{id: 1, hosts: [
{name: 'h1'},
{name: 'h2'}
]},
{id: 2}
],
isBackgroundOperations: true,
currentServiceId: 1,
serviceName: 's1',
m: '`currentServiceId` is 1, `serviceName` exists, `isBackgroundOperations` true, `hosts` exists',
e: {h1: {name: 'h1'}, h2: {name: 'h2'}}
},
{
inputData: [
{name: 's1', hostsMap: {h1: {}, h2: {}}},
{name: 's2'}
],
isBackgroundOperations: false,
currentServiceId: null,
serviceName: 's1',
m: '`currentServiceId` is null, `serviceName` exists, `isBackgroundOperations` false, `hostsMap` exists',
e: {h1: {}, h2: {}}
},
{
inputData: [
{name: 's1', hosts: [
{name: 'h1'},
{name: 'h2'}
]},
{name: 's2'}
],
isBackgroundOperations: false,
currentServiceId: null,
serviceName: 's1',
m: '`currentServiceId` is null, `serviceName` exists, `isBackgroundOperations` false, `hosts` exists',
e: {h1: {name: 'h1'}, h2: {name: 'h2'}}
},
{
inputData: [
{name: 's1', hostsMap: {h1: {}, h2: {}}}
],
isBackgroundOperations: false,
currentServiceId: 1,
serviceName: 's1',
m: '`currentServiceId` is 1, `serviceName` exists, `isBackgroundOperations` false, `hostsMap` exists',
e: {h1: {}, h2: {}}
},
{
inputData: [
{name: 's1', hostsMap: {h1: {}, h2: {}}}
],
isBackgroundOperations: false,
currentServiceId: 1,
serviceName: 's1',
m: '`currentServiceId` is 1, `serviceName` exists, `isBackgroundOperations` false, `hosts` exists',
e: {h1: {}, h2: {}}
}
]).forEach(function (test) {
it(test.m, function () {
App.HostPopup.setProperties(test);
expect(App.HostPopup._getHostsMap()).to.eql(test.e);
});
});
});
describe("#initPopup", function() {
it("should reset the breadcrumbs", function() {
App.HostPopup.initPopup("rootBreadcrumb", Em.Object.create({ services: [] }));
expect(App.HostPopup.get("breadcrumbs")).to.deep.equal([{ label: "rootBreadcrumb" }]);
});
});
});