1
- import { createLocalVue , mount } from '@vue/test-utils'
1
+ import { createLocalVue , mount , enableAutoDestroy } from '@vue/test-utils'
2
2
import VueFinalModal from '../../lib'
3
3
4
- function createOpenedModal ( propsData = { } , mountingOptions = { } ) {
4
+ enableAutoDestroy ( afterEach )
5
+
6
+ function createOpenedModal ( propsData = { } , listeners = { } , mountingOptions = { } ) {
5
7
const localVue = createLocalVue ( )
6
8
localVue . use ( VueFinalModal ( ) )
7
9
return new Promise ( resolve => {
10
+ const elem = document . createElement ( 'div' )
11
+ if ( document . body ) {
12
+ document . body . appendChild ( elem )
13
+ }
8
14
const wrapper = mount ( localVue . options . components . VueFinalModal , {
9
15
stubs : false ,
10
16
localVue,
@@ -13,33 +19,185 @@ function createOpenedModal(propsData = {}, mountingOptions = {}) {
13
19
...propsData
14
20
} ,
15
21
listeners : {
16
- opened : ( ) => resolve ( { wrapper, localVue } )
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
17
43
} ,
18
44
...mountingOptions
19
45
} )
46
+ resolve ( { wrapper, localVue } )
20
47
} )
21
48
}
22
49
23
50
describe ( 'VueFinalModal.vue' , ( ) => {
24
- describe ( 'props' , ( ) => {
51
+ describe ( 'default props' , ( ) => {
25
52
it ( 'value' , async ( ) => {
26
53
const { wrapper } = await createOpenedModal ( )
27
54
expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( true )
28
- wrapper . destroy ( )
55
+ } )
56
+ it ( 'ssr: true' , async ( ) => {
57
+ const { wrapper } = await createClosedModal ( )
58
+ expect ( wrapper . find ( '.vfm' ) . exists ( ) ) . toBe ( true )
29
59
} )
30
60
it ( 'lockScroll: true' , async ( ) => {
31
- const { wrapper } = await createOpenedModal ( {
32
- lockScroll : true
33
- } )
61
+ await createOpenedModal ( )
34
62
expect ( document . body . style . overflow ) . toBe ( 'hidden' )
35
- wrapper . destroy ( )
36
63
} )
64
+ it ( 'hideOverlay: false' , async ( ) => {
65
+ const { wrapper } = await createOpenedModal ( )
66
+ expect ( wrapper . find ( '.vfm__overlay' ) . isVisible ( ) ) . toBe ( true )
67
+ } )
68
+ it ( 'clickToClose: true' , async done => {
69
+ const { wrapper } = await createOpenedModal ( )
70
+ wrapper . find ( '.vfm__container' ) . trigger ( 'click' )
71
+ setTimeout ( ( ) => {
72
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( false )
73
+ done ( )
74
+ } , 200 )
75
+ } )
76
+ it ( 'escToClose: false' , async done => {
77
+ const { wrapper } = await createOpenedModal ( )
78
+ wrapper . find ( '.vfm__container' ) . trigger ( 'keydown.esc' )
79
+ setTimeout ( ( ) => {
80
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( true )
81
+ done ( )
82
+ } , 200 )
83
+ } )
84
+ it ( 'preventClick: false' , async ( ) => {
85
+ const { wrapper } = await createOpenedModal ( )
86
+ expect ( wrapper . find ( '.vfm' ) . classes ( 'vfm--prevent-none' ) ) . toBe ( false )
87
+ expect ( wrapper . find ( '.vfm__content' ) . classes ( 'vfm--prevent-auto' ) ) . toBe ( false )
88
+ } )
89
+ it ( 'focusRetain: true' , async ( ) => {
90
+ const { wrapper } = await createOpenedModal ( )
91
+ expect ( document . activeElement === wrapper . find ( '.vfm__container' ) . vm . $el ) . toBe ( true )
92
+ } )
93
+ } )
94
+ describe ( 'specific props' , ( ) => {
37
95
it ( 'lockScroll: false' , async ( ) => {
38
- const { wrapper } = await createOpenedModal ( {
96
+ await createOpenedModal ( {
39
97
lockScroll : false
40
98
} )
41
99
expect ( document . body . style . overflow ) . not . toBe ( 'hidden' )
42
- wrapper . destroy ( )
100
+ } )
101
+ it ( 'ssr: false' , async ( ) => {
102
+ const { wrapper } = await createClosedModal ( {
103
+ ssr : false
104
+ } )
105
+ expect ( wrapper . find ( '.vfm' ) . exists ( ) ) . toBe ( false )
106
+ } )
107
+ it ( 'classes' , async ( ) => {
108
+ const testClass = 'test-class'
109
+ const { wrapper } = await createClosedModal ( {
110
+ classes : testClass
111
+ } )
112
+ expect ( wrapper . find ( '.vfm__container' ) . classes ( ) ) . toContain ( testClass )
113
+ } )
114
+ it ( 'styles' , async ( ) => {
115
+ const testStyle = 'background: rgb(255, 255, 255);'
116
+ const { wrapper } = await createClosedModal ( {
117
+ styles : testStyle
118
+ } )
119
+ expect ( wrapper . find ( '.vfm__container' ) . attributes ( 'style' ) ) . toContain ( testStyle )
120
+ } )
121
+ it ( 'overlayClass' , async ( ) => {
122
+ const testClass = 'test-class'
123
+ const { wrapper } = await createClosedModal ( {
124
+ overlayClass : testClass
125
+ } )
126
+ expect ( wrapper . find ( '.vfm__overlay' ) . classes ( ) ) . toContain ( testClass )
127
+ } )
128
+ it ( 'overlayStyle' , async ( ) => {
129
+ const testStyle = 'background: rgb(255, 255, 255);'
130
+ const { wrapper } = await createClosedModal ( {
131
+ overlayStyle : testStyle
132
+ } )
133
+ expect ( wrapper . find ( '.vfm__overlay' ) . attributes ( 'style' ) ) . toContain ( testStyle )
134
+ } )
135
+ it ( 'contentClass' , async ( ) => {
136
+ const testClass = 'test-class'
137
+ const { wrapper } = await createClosedModal ( {
138
+ contentClass : testClass
139
+ } )
140
+ expect ( wrapper . find ( '.vfm__content' ) . classes ( ) ) . toContain ( testClass )
141
+ } )
142
+ it ( 'contentStyle' , async ( ) => {
143
+ const testStyle = 'background: rgb(255, 255, 255);'
144
+ const { wrapper } = await createClosedModal ( {
145
+ contentStyle : testStyle
146
+ } )
147
+ expect ( wrapper . find ( '.vfm__content' ) . attributes ( 'style' ) ) . toContain ( testStyle )
148
+ } )
149
+ it ( 'hideOverlay: true' , async ( ) => {
150
+ const { wrapper } = await createOpenedModal ( {
151
+ hideOverlay : true
152
+ } )
153
+ expect ( wrapper . find ( '.vfm__overlay' ) . isVisible ( ) ) . toBe ( false )
154
+ } )
155
+ it ( 'clickToClose: false' , async done => {
156
+ const { wrapper } = await createOpenedModal ( {
157
+ clickToClose : false
158
+ } )
159
+ wrapper . find ( '.vfm__container' ) . trigger ( 'click' )
160
+ setTimeout ( ( ) => {
161
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( true )
162
+ done ( )
163
+ } , 200 )
164
+ } )
165
+ it ( 'escToClose: false' , async done => {
166
+ const { wrapper } = await createOpenedModal ( {
167
+ escToClose : true
168
+ } )
169
+ wrapper . find ( '.vfm__container' ) . trigger ( 'keydown.esc' )
170
+ setTimeout ( ( ) => {
171
+ expect ( wrapper . find ( '.vfm' ) . isVisible ( ) ) . toBe ( false )
172
+ done ( )
173
+ } , 200 )
174
+ } )
175
+ it ( 'preventClick: true' , async ( ) => {
176
+ const { wrapper } = await createOpenedModal ( {
177
+ preventClick : true
178
+ } )
179
+ expect ( wrapper . find ( '.vfm' ) . classes ( 'vfm--prevent-none' ) ) . toBe ( true )
180
+ expect ( wrapper . find ( '.vfm__content' ) . classes ( 'vfm--prevent-auto' ) ) . toBe ( true )
181
+ } )
182
+ it ( 'attach: body' , async ( ) => {
183
+ const elem = document . createElement ( 'div' )
184
+ document . body . appendChild ( elem )
185
+ const { wrapper } = await createOpenedModal ( {
186
+ attach : elem
187
+ } )
188
+ expect ( wrapper . vm . $el . parentNode === elem ) . toBe ( true )
189
+ } )
190
+ it ( 'focusRetain: false' , async ( ) => {
191
+ const { wrapper } = await createOpenedModal ( {
192
+ focusRetain : false
193
+ } )
194
+ expect ( document . activeElement === wrapper . find ( '.vfm__container' ) . vm . $el ) . toBe ( false )
195
+ } )
196
+ it ( 'focusTrap: true' , async ( ) => {
197
+ const { wrapper } = await createOpenedModal ( {
198
+ focusTrap : true
199
+ } )
200
+ expect ( document . activeElement === wrapper . find ( '.vfm__container' ) . vm . $el ) . toBe ( true )
43
201
} )
44
202
} )
45
203
} )
0 commit comments