Skip to content

Commit 3b5a238

Browse files
committed
Added tests for shouldCloseOnOverlayClick prop
1 parent 4d90822 commit 3b5a238

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,12 @@
3434
"karma-mocha": "0.2.0",
3535
"karma-safari-launcher": "^0.1.1",
3636
"mocha": "2.3.3",
37+
"react": "^0.14.0",
3738
"react-addons-test-utils": "^0.14.0",
3839
"react-dom": "^0.14.0",
39-
"react": "^0.14.0",
4040
"reactify": "^1.1.1",
4141
"rf-release": "0.4.0",
42+
"sinon": "^1.17.3",
4243
"uglify-js": "2.4.24",
4344
"webpack-dev-server": "1.11.0"
4445
},
@@ -65,4 +66,4 @@
6566
"react": "global:React",
6667
"react-dom": "global:ReactDOM"
6768
}
68-
}
69+
}

specs/Modal.spec.js

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var Modal = require('../lib/components/Modal');
66
var Simulate = TestUtils.Simulate;
77
var ariaAppHider = require('../lib/helpers/ariaAppHider');
88
var button = ReactDOM.button;
9+
var sinon = require('sinon');
910

1011
describe('Modal', function () {
1112

@@ -74,6 +75,7 @@ describe('Modal', function () {
7475
equal(props.isOpen, false);
7576
equal(props.ariaHideApp, true);
7677
equal(props.closeTimeoutMS, 0);
78+
equal(props.shouldCloseOnOverlayClick, true);
7779
ReactDOM.unmountComponentAtNode(node);
7880
ariaAppHider.resetForTesting();
7981
});
@@ -94,13 +96,13 @@ describe('Modal', function () {
9496

9597
it('supports custom className', function() {
9698
var modal = renderModal({isOpen: true, className: 'myClass'});
97-
equal(modal.portal.refs.content.className.contains('myClass'), true);
99+
notEqual(modal.portal.refs.content.className.indexOf('myClass'), -1);
98100
unmountModal();
99101
});
100102

101103
it('supports overlayClassName', function () {
102104
var modal = renderModal({isOpen: true, overlayClassName: 'myOverlayClass'});
103-
equal(modal.portal.refs.overlay.className.contains('myOverlayClass'), true);
105+
notEqual(modal.portal.refs.overlay.className.indexOf('myOverlayClass'), -1);
104106
unmountModal();
105107
});
106108

@@ -145,6 +147,55 @@ describe('Modal', function () {
145147
unmountModal();
146148
});
147149

150+
describe('should close on overlay click', function() {
151+
afterEach('Unmount modal', function() {
152+
unmountModal();
153+
});
154+
155+
describe('verify props', function() {
156+
it('verify default prop of shouldCloseOnOverlayClick', function () {
157+
var modal = renderModal({isOpen: true});
158+
equal(modal.props.shouldCloseOnOverlayClick, true);
159+
});
160+
161+
it('verify prop of shouldCloseOnOverlayClick', function () {
162+
var modal = renderModal({isOpen: true, shouldCloseOnOverlayClick: false});
163+
equal(modal.props.shouldCloseOnOverlayClick, false);
164+
});
165+
});
166+
167+
describe('verify clicks', function() {
168+
it('verify overlay click when shouldCloseOnOverlayClick sets to false', function () {
169+
var requestCloseCallback = sinon.spy();
170+
var modal = renderModal({
171+
isOpen: true,
172+
shouldCloseOnOverlayClick: false
173+
});
174+
equal(modal.props.isOpen, true);
175+
var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
176+
equal(overlay.length, 1);
177+
Simulate.click(overlay[0]); // click the overlay
178+
ok(!requestCloseCallback.called)
179+
});
180+
181+
it('verify overlay click when shouldCloseOnOverlayClick sets to true', function() {
182+
var requestCloseCallback = sinon.spy();
183+
var modal = renderModal({
184+
isOpen: true,
185+
shouldCloseOnOverlayClick: true,
186+
onRequestClose: function() {
187+
requestCloseCallback();
188+
}
189+
});
190+
equal(modal.props.isOpen, true);
191+
var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
192+
equal(overlay.length, 1);
193+
Simulate.click(overlay[0]); // click the overlay
194+
ok(requestCloseCallback.called)
195+
});
196+
});
197+
});
198+
148199
//it('adds --before-close for animations', function() {
149200
//var node = document.createElement('div');
150201

specs/helper.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ var Modal = React.createFactory(require('../lib/components/Modal'));
55

66
ok = assert.ok;
77
equal = assert.equal;
8+
notEqual = assert.notEqual;
89
strictEqual = assert.strictEqual;
910
throws = assert.throws;
1011

0 commit comments

Comments
 (0)