/** * 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('views/common/modal_popup'); describe('App.ModalPopup', function() { var popup; beforeEach(function () { popup = App.ModalPopup.create( { primary: 'test', secondary: 'test', header: 'test', body: '
text
', $: function () { return $(this); } } ); }); describe('#didInsertElement', function () { beforeEach(function () { this.spy = sinon.spy(popup, "focusElement"); }); afterEach(function () { this.spy.restore(); }); it('should focus on the first input element', function () { popup.didInsertElement(); expect(this.spy.called).to.be.true; }); }); describe('#escapeKeyPressed', function () { var returnedValue, event = { preventDefault: Em.K, stopPropagation: Em.K }, cases = [ { buttons: [], preventDefaultCallCount: 0, stopPropagationCallCount: 0, clickCallCount: 0, returnedValue: undefined, title: 'no close button' }, { buttons: [{}], preventDefaultCallCount: 1, stopPropagationCallCount: 1, clickCallCount: 1, returnedValue: false, title: 'close button available' } ]; cases.forEach(function (item) { describe(item.title, function () { beforeEach(function () { item.buttons.click = Em.K; sinon.stub(popup, '$').returns({ find: function () { return { last: function () { return item.buttons; } } } }); sinon.spy(item.buttons, 'click'); sinon.spy(event, 'preventDefault'); sinon.spy(event, 'stopPropagation'); returnedValue = popup.escapeKeyPressed(event); }); afterEach(function () { popup.$.restore(); item.buttons.click.restore(); event.preventDefault.restore(); event.stopPropagation.restore(); }); it('prevent default behaviour', function () { expect(event.preventDefault.callCount).to.equal(item.preventDefaultCallCount); }); it('stop event propagation', function () { expect(event.stopPropagation.callCount).to.equal(item.stopPropagationCallCount); }); it('close button click', function () { expect(item.buttons.click.callCount).to.equal(item.clickCallCount); }); it('returned value', function () { expect(returnedValue).to.equal(item.returnedValue); }); }); }); }); describe('#enterKeyPressed', function () { var returnedValue, event = { preventDefault: Em.K, stopPropagation: Em.K }, cases = [ { buttons: [], isTextArea: true, preventDefaultCallCount: 0, stopPropagationCallCount: 0, clickCallCount: 0, returnedValue: undefined, title: 'focus on textarea, no primary button' }, { buttons: [], isTextArea: false, preventDefaultCallCount: 0, stopPropagationCallCount: 0, clickCallCount: 0, returnedValue: undefined, title: 'no focus on textarea, no primary button' }, { buttons: [{}], isTextArea: true, disabled: 'disabled', preventDefaultCallCount: 0, stopPropagationCallCount: 0, clickCallCount: 0, returnedValue: undefined, title: 'focus on textarea, primary button disabled' }, { buttons: [{}], isTextArea: false, disabled: 'disabled', preventDefaultCallCount: 0, stopPropagationCallCount: 0, clickCallCount: 0, returnedValue: undefined, title: 'no focus on textarea, primary button disabled' }, { buttons: [{}], isTextArea: true, disabled: '', preventDefaultCallCount: 0, stopPropagationCallCount: 0, clickCallCount: 0, returnedValue: undefined, title: 'focus on textarea, primary button enabled' }, { buttons: [{}], isTextArea: false, disabled: '', preventDefaultCallCount: 1, stopPropagationCallCount: 1, clickCallCount: 1, returnedValue: false, title: 'no focus on textarea, primary button enabled' } ]; cases.forEach(function (item) { describe(item.title, function () { beforeEach(function () { item.buttons.click = Em.K; item.buttons.attr = function () { return item.disabled; }; sinon.stub(popup, '$').returns({ find: function () { return { last: function () { return item.buttons; } } } }); sinon.stub(window, '$').withArgs('*:focus').returns({ is: function () { return item.isTextArea } }); sinon.spy(item.buttons, 'click'); sinon.spy(event, 'preventDefault'); sinon.spy(event, 'stopPropagation'); returnedValue = popup.enterKeyPressed(event); }); afterEach(function () { popup.$.restore(); window.$.restore(); item.buttons.click.restore(); event.preventDefault.restore(); event.stopPropagation.restore(); }); it('prevent default behaviour', function () { expect(event.preventDefault.callCount).to.equal(item.preventDefaultCallCount); }); it('stop event propagation', function () { expect(event.stopPropagation.callCount).to.equal(item.stopPropagationCallCount); }); it('primary button click', function () { expect(item.buttons.click.callCount).to.equal(item.clickCallCount); }); it('returned value', function () { expect(returnedValue).to.equal(item.returnedValue); }); }); }); }); });