@@ -6,6 +6,7 @@ var Modal = require('../lib/components/Modal');
6
6
var Simulate = TestUtils . Simulate ;
7
7
var ariaAppHider = require ( '../lib/helpers/ariaAppHider' ) ;
8
8
var button = ReactDOM . button ;
9
+ var sinon = require ( 'sinon' ) ;
9
10
10
11
describe ( 'Modal' , function ( ) {
11
12
@@ -74,6 +75,7 @@ describe('Modal', function () {
74
75
equal ( props . isOpen , false ) ;
75
76
equal ( props . ariaHideApp , true ) ;
76
77
equal ( props . closeTimeoutMS , 0 ) ;
78
+ equal ( props . shouldCloseOnOverlayClick , true ) ;
77
79
ReactDOM . unmountComponentAtNode ( node ) ;
78
80
ariaAppHider . resetForTesting ( ) ;
79
81
} ) ;
@@ -94,13 +96,13 @@ describe('Modal', function () {
94
96
95
97
it ( 'supports custom className' , function ( ) {
96
98
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 ) ;
98
100
unmountModal ( ) ;
99
101
} ) ;
100
102
101
103
it ( 'supports overlayClassName' , function ( ) {
102
104
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 ) ;
104
106
unmountModal ( ) ;
105
107
} ) ;
106
108
@@ -145,6 +147,55 @@ describe('Modal', function () {
145
147
unmountModal ( ) ;
146
148
} ) ;
147
149
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
+
148
199
//it('adds --before-close for animations', function() {
149
200
//var node = document.createElement('div');
150
201
0 commit comments