blob: c4b01043eba9b89978619e31787224dc8a38e14a [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('views/common/modal_popup');
describe('App.ModalPopup', function() {
var popup;
beforeEach(function () {
popup = App.ModalPopup.create(
{
primary: 'test',
secondary: 'test',
header: 'test',
body: '<p>text</p><input type="text"><input type="checkbox"><input type="button">',
$: 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);
});
});
});
});
});