blob: 619255ad0eeadf640bd179569cfbd60d556b1d45 [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 App = require('app');
require('mixins/common/reload_popup');
describe('App.ReloadPopupMixin', function () {
var obj;
beforeEach(function () {
obj = Em.Object.create(App.ReloadPopupMixin);
});
describe('#popupText', function () {
var cases = [
{
result: Em.I18n.t('app.reloadPopup.text'),
title: 'should show modal popup with default message'
},
{
text: 'text',
result: 'text',
title: 'should show modal popup with custom message'
}
];
cases.forEach(function (item) {
it(item.title, function () {
expect(obj.popupText(item.text)).to.equal(item.result);
});
});
});
describe('#closeReloadPopup', function () {
it('should hide modal popup', function () {
obj.showReloadPopup();
obj.closeReloadPopup();
expect(obj.get('reloadPopup')).to.be.null;
});
});
describe('#reloadSuccessCallback', function () {
it('should hide modal popup', function () {
obj.showReloadPopup();
obj.reloadSuccessCallback();
expect(obj.get('reloadPopup')).to.be.null;
});
});
describe('#reloadErrorCallback', function () {
var clock,
cases = [
{
args: [{status: 404}, null, null, {}, {shouldUseDefaultHandler: true}],
closeReloadPopupCallCount: 1,
defaultErrorHandlerCallCount: 1,
showReloadPopupCallCount: 0,
isCallbackCalled: false,
title: 'status received, default error handler'
},
{
args: [{status: 404}, null, null, {}, {}],
closeReloadPopupCallCount: 1,
defaultErrorHandlerCallCount: 0,
showReloadPopupCallCount: 0,
isCallbackCalled: false,
title: 'status received, no default error handler'
},
{
args: [{status: 0}, null, null, {}, {}],
closeReloadPopupCallCount: 0,
defaultErrorHandlerCallCount: 0,
showReloadPopupCallCount: 1,
isCallbackCalled: false,
title: 'no status received, no callback'
},
{
args: [{status: 0}, null, null, {}, {callback: Em.K, timeout: 2000}],
timeout: 1999,
closeReloadPopupCallCount: 0,
defaultErrorHandlerCallCount: 0,
showReloadPopupCallCount: 1,
isCallbackCalled: false,
title: 'no status received, callback specified, custom timeout, not enough time passed'
},
{
args: [{status: 0}, null, null, {}, {callback: Em.K}],
timeout: 999,
closeReloadPopupCallCount: 0,
defaultErrorHandlerCallCount: 0,
showReloadPopupCallCount: 1,
isCallbackCalled: false,
title: 'no status received, callback specified, default timeout, not enough time passed'
},
{
args: [{status: 0}, null, null, {}, {callback: Em.K, args: [{}], timeout: 2000}],
timeout: 2000,
closeReloadPopupCallCount: 0,
defaultErrorHandlerCallCount: 0,
showReloadPopupCallCount: 1,
isCallbackCalled: true,
callbackArgs: [{}],
title: 'no status received, callback with arguments specified, custom timeout, enough time passed'
},
{
args: [{status: 0}, null, null, {}, {callback: Em.K}],
timeout: 1000,
closeReloadPopupCallCount: 0,
defaultErrorHandlerCallCount: 0,
showReloadPopupCallCount: 1,
isCallbackCalled: true,
callbackArgs: [],
title: 'no status received, callback with no arguments specified, default timeout, enough time passed'
}
];
cases.forEach(function (item) {
describe(item.title, function () {
beforeEach(function () {
sinon.stub(obj, 'closeReloadPopup', Em.K);
sinon.stub(App.ajax, 'defaultErrorHandler', Em.K);
sinon.stub(obj, 'showReloadPopup', Em.K);
sinon.stub(App, 'get').withArgs('timeout').returns(1000);
if (item.args[4].callback) {
sinon.spy(item.args[4], 'callback');
}
clock = sinon.useFakeTimers();
obj.reloadErrorCallback.apply(obj, item.args);
clock.tick(item.timeout);
});
afterEach(function () {
obj.closeReloadPopup.restore();
App.ajax.defaultErrorHandler.restore();
obj.showReloadPopup.restore();
App.get.restore();
if (item.args[4].callback) {
item.args[4].callback.restore();
}
clock.restore();
});
it('closeReloadPopup call', function () {
expect(obj.closeReloadPopup.callCount).to.equal(item.closeReloadPopupCallCount);
});
it('defaultErrorHandler call', function () {
expect(App.ajax.defaultErrorHandler.callCount).to.equal(item.defaultErrorHandlerCallCount);
});
it('showReloadPopup call', function () {
expect(obj.showReloadPopup.callCount).to.equal(item.showReloadPopupCallCount);
});
if (item.isCallbackCalled) {
it('callback call', function () {
expect(item.args[4].callback.calledOnce).to.be.true;
});
it('callback context', function () {
expect(item.args[4].callback.calledOn(obj)).to.be.true;
});
it('callback arguments', function () {
expect(item.args[4].callback.firstCall.args).to.eql(item.callbackArgs);
});
}
});
});
});
});