1
- import { createLocalVue , mount , enableAutoDestroy } from '@vue/test-utils'
1
+ import { createLocalVue , enableAutoDestroy } from '@vue/test-utils'
2
+ import { afterTransition , createOpenedModal , createClosedModal , initDynamicModal } from './utils'
2
3
import VueFinalModal from '../../lib'
3
4
4
5
enableAutoDestroy ( afterEach )
5
6
6
- function createOpenedModal ( propsData = { } , listeners = { } , mountingOptions = { } ) {
7
- const localVue = createLocalVue ( )
8
- localVue . use ( VueFinalModal ( ) )
9
- return new Promise ( resolve => {
10
- const elem = document . createElement ( 'div' )
11
- if ( document . body ) {
12
- document . body . appendChild ( elem )
13
- }
14
- const wrapper = mount ( localVue . options . components . VueFinalModal , {
15
- stubs : false ,
16
- localVue,
17
- propsData : {
18
- value : true ,
19
- ...propsData
20
- } ,
21
- listeners : {
22
- opened : ( ) => resolve ( { wrapper, localVue } ) ,
23
- input : val => {
24
- wrapper . setProps ( { value : val } )
25
- } ,
26
- ...listeners
27
- } ,
28
- attachTo : elem ,
29
- ...mountingOptions
30
- } )
31
- } )
32
- }
33
- function createClosedModal ( propsData = { } , mountingOptions = { } ) {
34
- const localVue = createLocalVue ( )
35
- localVue . use ( VueFinalModal ( ) )
36
- return new Promise ( resolve => {
37
- const wrapper = mount ( localVue . options . components . VueFinalModal , {
38
- stubs : false ,
39
- localVue,
40
- propsData : {
41
- value : false ,
42
- ...propsData
43
- } ,
44
- ...mountingOptions
45
- } )
46
- resolve ( { wrapper, localVue } )
47
- } )
48
- }
49
-
50
7
describe ( 'VueFinalModal.vue' , ( ) => {
51
8
describe ( 'default props' , ( ) => {
52
9
it ( 'value' , async ( ) => {
@@ -68,18 +25,18 @@ describe('VueFinalModal.vue', () => {
68
25
it ( 'clickToClose: true' , async done => {
69
26
const { wrapper } = await createOpenedModal ( )
70
27
wrapper . find ( '.vfm__container' ) . trigger ( 'click' )
71
- setTimeout ( ( ) => {
28
+ afterTransition ( ( ) => {
72
29
expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( false )
73
30
done ( )
74
- } , 200 )
31
+ } )
75
32
} )
76
33
it ( 'escToClose: false' , async done => {
77
34
const { wrapper } = await createOpenedModal ( )
78
35
wrapper . find ( '.vfm__container' ) . trigger ( 'keydown.esc' )
79
- setTimeout ( ( ) => {
36
+ afterTransition ( ( ) => {
80
37
expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( true )
81
38
done ( )
82
- } , 200 )
39
+ } )
83
40
} )
84
41
it ( 'preventClick: false' , async ( ) => {
85
42
const { wrapper } = await createOpenedModal ( )
@@ -157,20 +114,20 @@ describe('VueFinalModal.vue', () => {
157
114
clickToClose : false
158
115
} )
159
116
wrapper . find ( '.vfm__container' ) . trigger ( 'click' )
160
- setTimeout ( ( ) => {
117
+ afterTransition ( ( ) => {
161
118
expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( true )
162
119
done ( )
163
- } , 200 )
120
+ } )
164
121
} )
165
122
it ( 'escToClose: false' , async done => {
166
123
const { wrapper } = await createOpenedModal ( {
167
124
escToClose : true
168
125
} )
169
126
wrapper . find ( '.vfm__container' ) . trigger ( 'keydown.esc' )
170
- setTimeout ( ( ) => {
127
+ afterTransition ( ( ) => {
171
128
expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( false )
172
129
done ( )
173
- } , 200 )
130
+ } )
174
131
} )
175
132
it ( 'preventClick: true' , async ( ) => {
176
133
const { wrapper } = await createOpenedModal ( {
@@ -187,17 +144,31 @@ describe('VueFinalModal.vue', () => {
187
144
} )
188
145
expect ( wrapper . vm . $el . parentNode === elem ) . toBe ( true )
189
146
} )
147
+ it ( 'attach: querySelector' , async ( ) => {
148
+ const elem = document . createElement ( 'div' )
149
+ elem . className = 'attach-to-here'
150
+ document . body . appendChild ( elem )
151
+ const { wrapper } = await createOpenedModal ( {
152
+ attach : '.attach-to-here'
153
+ } )
154
+ expect ( wrapper . vm . $el . parentNode === elem ) . toBe ( true )
155
+ } )
190
156
it ( 'focusRetain: false' , async ( ) => {
191
157
const { wrapper } = await createOpenedModal ( {
192
158
focusRetain : false
193
159
} )
194
160
expect ( document . activeElement === wrapper . find ( '.vfm__container' ) . vm . $el ) . toBe ( false )
195
161
} )
196
- it ( 'focusTrap: true' , async ( ) => {
162
+ it ( 'focusTrap: true' , async done => {
197
163
const { wrapper } = await createOpenedModal ( {
198
164
focusTrap : true
199
165
} )
200
166
expect ( document . activeElement === wrapper . find ( '.vfm__container' ) . vm . $el ) . toBe ( true )
167
+ wrapper . setProps ( { value : false } )
168
+ afterTransition ( ( ) => {
169
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( false )
170
+ done ( )
171
+ } )
201
172
} )
202
173
it ( 'zIndexAuto' , async ( ) => {
203
174
const { wrapper } = await createOpenedModal ( {
@@ -222,4 +193,209 @@ describe('VueFinalModal.vue', () => {
222
193
expect ( wrapper . attributes ( 'style' ) ) . toContain ( zIndexStyle )
223
194
} )
224
195
} )
196
+
197
+ describe ( 'API' , ( ) => {
198
+ it ( 'show static modal' , async done => {
199
+ const { wrapper, $vfm } = await createClosedModal ( {
200
+ name : 'testModal'
201
+ } )
202
+ $vfm . show ( 'testModal' )
203
+ afterTransition ( ( ) => {
204
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( true )
205
+ done ( )
206
+ } )
207
+ } )
208
+ it ( 'show dynamic modal' , async done => {
209
+ const { wrapper, $vfm } = await initDynamicModal ( )
210
+ const dynamicOptions = { }
211
+ $vfm . show ( dynamicOptions )
212
+ afterTransition ( ( ) => {
213
+ expect ( wrapper . find ( '.vfm' ) . exists ( ) ) . toBe ( true )
214
+ done ( )
215
+ } )
216
+ } )
217
+ it ( 'hide modal' , async done => {
218
+ const { wrapper, $vfm } = await createOpenedModal ( {
219
+ name : 'testModal'
220
+ } )
221
+ $vfm . hide ( 'testModal' )
222
+ afterTransition ( ( ) => {
223
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( false )
224
+ done ( )
225
+ } )
226
+ } )
227
+ it ( 'hide modals' , async done => {
228
+ const { wrapper, $vfm } = await initDynamicModal ( )
229
+ $vfm . show ( { bind : { name : 'modal1' } } )
230
+ $vfm . show ( { bind : { name : 'modal2' } } )
231
+ afterTransition ( ( ) => {
232
+ $vfm . hide ( 'modal1' , 'modal2' )
233
+ afterTransition ( ( ) => {
234
+ expect ( wrapper . find ( '.vfm' ) . exists ( ) ) . toBe ( false )
235
+ done ( )
236
+ } )
237
+ } )
238
+ } )
239
+ it ( 'hide all modals' , async done => {
240
+ const { wrapper, $vfm } = await initDynamicModal ( )
241
+ $vfm . show ( { bind : { name : 'modal1' } } )
242
+ $vfm . show ( { bind : { name : 'modal2' } } )
243
+ afterTransition ( ( ) => {
244
+ $vfm . hideAll ( )
245
+ afterTransition ( ( ) => {
246
+ expect ( wrapper . find ( '.vfm' ) . exists ( ) ) . toBe ( false )
247
+ done ( )
248
+ } )
249
+ } )
250
+ } )
251
+ it ( 'toggle opened modal' , async done => {
252
+ const { wrapper, $vfm } = await createOpenedModal ( {
253
+ name : 'testModal'
254
+ } )
255
+ $vfm . toggle ( 'testModal' , false )
256
+ afterTransition ( ( ) => {
257
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( false )
258
+ done ( )
259
+ } )
260
+ } )
261
+ it ( 'toggle closed modal' , async done => {
262
+ const { wrapper, $vfm } = await createClosedModal ( {
263
+ name : 'testModal'
264
+ } )
265
+ $vfm . toggle ( 'testModal' , true )
266
+ afterTransition ( ( ) => {
267
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( true )
268
+ done ( )
269
+ } )
270
+ } )
271
+ it ( 'toggle dynamic modal' , async done => {
272
+ const { wrapper, $vfm } = await initDynamicModal ( )
273
+ $vfm . show ( { bind : { name : 'testModal' } } )
274
+ afterTransition ( ( ) => {
275
+ $vfm . toggle ( 'testModal' )
276
+ afterTransition ( ( ) => {
277
+ expect ( wrapper . find ( '.vfm' ) . exists ( ) ) . toBe ( false )
278
+ done ( )
279
+ } )
280
+ } )
281
+ } )
282
+ it ( 'get modals' , async done => {
283
+ const { $vfm } = await initDynamicModal ( )
284
+ $vfm . show ( { bind : { name : 'testModal1' } } )
285
+ $vfm . show ( { bind : { name : 'testModal2' } } )
286
+ afterTransition ( ( ) => {
287
+ expect ( $vfm . get ( 'testModal1' ) . length ) . toBe ( 1 )
288
+ done ( )
289
+ } )
290
+ } )
291
+ } )
292
+
293
+ describe ( 'events' , ( ) => {
294
+ it ( 'all events' , async done => {
295
+ const clickOutside = jest . fn ( )
296
+ const beforeOpen = jest . fn ( )
297
+ const opened = jest . fn ( )
298
+ const beforeClose = jest . fn ( )
299
+ const closed = jest . fn ( )
300
+
301
+ const { wrapper } = await createOpenedModal (
302
+ { } ,
303
+ {
304
+ 'click-outside' ( ) {
305
+ clickOutside ( )
306
+ } ,
307
+ 'before-open' ( ) {
308
+ beforeOpen ( )
309
+ } ,
310
+ opened ( ) {
311
+ opened ( )
312
+ } ,
313
+ 'before-close' ( ) {
314
+ beforeClose ( )
315
+ } ,
316
+ closed ( ) {
317
+ closed ( )
318
+ }
319
+ }
320
+ )
321
+ wrapper . find ( '.vfm__container' ) . trigger ( 'click' )
322
+ afterTransition ( ( ) => {
323
+ expect ( clickOutside ) . toHaveBeenCalled ( )
324
+ expect ( beforeOpen ) . toHaveBeenCalled ( )
325
+ expect ( opened ) . toHaveBeenCalled ( )
326
+ expect ( beforeClose ) . toHaveBeenCalled ( )
327
+ expect ( closed ) . toHaveBeenCalled ( )
328
+ done ( )
329
+ } )
330
+ } )
331
+
332
+ it ( 'stop beforeOpen' , async done => {
333
+ const { wrapper } = await createClosedModal (
334
+ { } ,
335
+ {
336
+ 'before-open' ( event ) {
337
+ event . stop ( )
338
+ }
339
+ }
340
+ )
341
+ wrapper . setProps ( { value : true } )
342
+ afterTransition ( ( ) => {
343
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( false )
344
+ done ( )
345
+ } )
346
+ } )
347
+
348
+ it ( 'stop beforeClose' , async done => {
349
+ const { wrapper } = await createOpenedModal (
350
+ { } ,
351
+ {
352
+ 'before-close' ( event ) {
353
+ event . stop ( )
354
+ }
355
+ }
356
+ )
357
+ wrapper . setProps ( { value : false } )
358
+ afterTransition ( ( ) => {
359
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( true )
360
+ done ( )
361
+ } )
362
+ } )
363
+
364
+ it ( 'avoid modal reset params after modal was closed' , async done => {
365
+ const { wrapper, $vfm } = await createClosedModal (
366
+ {
367
+ name : 'testModal'
368
+ } ,
369
+ {
370
+ closed ( event ) {
371
+ event . stop ( )
372
+ }
373
+ }
374
+ )
375
+ const params = {
376
+ test : 123
377
+ }
378
+ $vfm . show ( 'testModal' , params )
379
+ afterTransition ( ( ) => {
380
+ $vfm . hide ( 'testModal' )
381
+ afterTransition ( ( ) => {
382
+ expect ( wrapper . vm . params === params ) . toBe ( true )
383
+ done ( )
384
+ } )
385
+ } )
386
+ } )
387
+ } )
388
+
389
+ describe ( 'Plugin' , ( ) => {
390
+ it ( 'Register multiple plugins' , async done => {
391
+ const localVue = createLocalVue ( )
392
+ localVue . use ( VueFinalModal ( ) )
393
+ localVue . use ( VueFinalModal ( ) , {
394
+ componentName : 'VueFinalTest' ,
395
+ dynamicContainerName : 'TestContainer' ,
396
+ key : '$vtm'
397
+ } )
398
+ done ( )
399
+ } )
400
+ } )
225
401
} )
0 commit comments