@@ -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 } ) ;
@@ -102,13 +104,13 @@ describe('Modal', function () {
102104
103105 it ( 'supports custom className' , function ( ) {
104106 var modal = renderModal ( { isOpen : true , className : 'myClass' } ) ;
105- equal ( modal . portal . refs . content . className . contains ( 'myClass' ) , true ) ;
107+ notEqual ( modal . portal . refs . content . className . indexOf ( 'myClass' ) , - 1 ) ;
106108 unmountModal ( ) ;
107109 } ) ;
108110
109111 it ( 'supports overlayClassName' , function ( ) {
110112 var modal = renderModal ( { isOpen : true , overlayClassName : 'myOverlayClass' } ) ;
111- equal ( modal . portal . refs . overlay . className . contains ( 'myOverlayClass' ) , true ) ;
113+ notEqual ( modal . portal . refs . overlay . className . indexOf ( 'myOverlayClass' ) , - 1 ) ;
112114 unmountModal ( ) ;
113115 } ) ;
114116
@@ -164,6 +166,55 @@ describe('Modal', function () {
164166 unmountModal ( ) ;
165167 } ) ;
166168
169+ describe ( 'should close on overlay click' , function ( ) {
170+ afterEach ( 'Unmount modal' , function ( ) {
171+ unmountModal ( ) ;
172+ } ) ;
173+
174+ describe ( 'verify props' , function ( ) {
175+ it ( 'verify default prop of shouldCloseOnOverlayClick' , function ( ) {
176+ var modal = renderModal ( { isOpen : true } ) ;
177+ equal ( modal . props . shouldCloseOnOverlayClick , true ) ;
178+ } ) ;
179+
180+ it ( 'verify prop of shouldCloseOnOverlayClick' , function ( ) {
181+ var modal = renderModal ( { isOpen : true , shouldCloseOnOverlayClick : false } ) ;
182+ equal ( modal . props . shouldCloseOnOverlayClick , false ) ;
183+ } ) ;
184+ } ) ;
185+
186+ describe ( 'verify clicks' , function ( ) {
187+ it ( 'verify overlay click when shouldCloseOnOverlayClick sets to false' , function ( ) {
188+ var requestCloseCallback = sinon . spy ( ) ;
189+ var modal = renderModal ( {
190+ isOpen : true ,
191+ shouldCloseOnOverlayClick : false
192+ } ) ;
193+ equal ( modal . props . isOpen , true ) ;
194+ var overlay = TestUtils . scryRenderedDOMComponentsWithClass ( modal . portal , 'ReactModal__Overlay' ) ;
195+ equal ( overlay . length , 1 ) ;
196+ Simulate . click ( overlay [ 0 ] ) ; // click the overlay
197+ ok ( ! requestCloseCallback . called )
198+ } ) ;
199+
200+ it ( 'verify overlay click when shouldCloseOnOverlayClick sets to true' , function ( ) {
201+ var requestCloseCallback = sinon . spy ( ) ;
202+ var modal = renderModal ( {
203+ isOpen : true ,
204+ shouldCloseOnOverlayClick : true ,
205+ onRequestClose : function ( ) {
206+ requestCloseCallback ( ) ;
207+ }
208+ } ) ;
209+ equal ( modal . props . isOpen , true ) ;
210+ var overlay = TestUtils . scryRenderedDOMComponentsWithClass ( modal . portal , 'ReactModal__Overlay' ) ;
211+ equal ( overlay . length , 1 ) ;
212+ Simulate . click ( overlay [ 0 ] ) ; // click the overlay
213+ ok ( requestCloseCallback . called )
214+ } ) ;
215+ } ) ;
216+ } ) ;
217+
167218 //it('adds --before-close for animations', function() {
168219 //var node = document.createElement('div');
169220
0 commit comments