@@ -6,6 +6,7 @@ var Modal = require('../lib/components/Modal');
66var Simulate = TestUtils . Simulate ;
77var ariaAppHider = require ( '../lib/helpers/ariaAppHider' ) ;
88var button = ReactDOM . button ;
9+ var sinon = require ( 'sinon' ) ;
910
1011describe ( '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
0 commit comments