| /** |
| * 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); |
| }); |
| } |
| |
| }); |
| }); |
| |
| }); |
| |
| }); |