1
1
import { mount } from 'enzyme'
2
2
import Button from 'or-button'
3
3
import React from 'react'
4
+ import { CSSTransition } from 'react-transition-group'
4
5
5
6
import { Modal } from '../src'
7
+ import { sleep } from './util'
6
8
7
9
const mockCallBack = jest . fn ( )
8
10
describe ( 'src/index' , ( ) => {
9
- describe ( 'simulate click events' , ( ) => {
11
+ describe ( 'should render properly' , ( ) => {
12
+ it ( 'render' , ( ) => {
13
+ const wrapper = mount ( renderModal ( { isOpen : true } ) )
14
+ expect ( wrapper . find ( '.or-modal-wrapper' ) . length ) . toBe ( 1 )
15
+ expect ( wrapper . find ( '.or-modal-mask' ) . length ) . toBe ( 1 )
16
+ expect ( wrapper . find ( '.or-modal' ) . length ) . toBe ( 1 )
17
+ expect ( wrapper . find ( '.or-modal-content' ) . length ) . toBe ( 1 )
18
+ expect ( wrapper . find ( '.or-modal-content' ) . text ( ) ) . toBe (
19
+ 'I am modal content'
20
+ )
21
+ } )
22
+
23
+ it ( 'position #default center' , ( ) => {
24
+ const wrapper = mount ( renderModal ( { isOpen : true } ) )
25
+ expect (
26
+ wrapper . find ( '.or-modal-wrapper' ) . hasClass ( 'or-modal-position-center' )
27
+ ) . toBe ( true )
28
+ } )
29
+
30
+ it ( 'position #right' , ( ) => {
31
+ const wrapper = mount ( renderModal ( { isOpen : true , position : 'right' } ) )
32
+ expect (
33
+ wrapper . find ( '.or-modal-wrapper' ) . hasClass ( 'or-modal-position-right' )
34
+ ) . toBe ( true )
35
+ } )
36
+
37
+ it ( 'position #left' , ( ) => {
38
+ const wrapper = mount ( renderModal ( { isOpen : true , position : 'left' } ) )
39
+ expect (
40
+ wrapper . find ( '.or-modal-wrapper' ) . hasClass ( 'or-modal-position-left' )
41
+ ) . toBe ( true )
42
+ } )
43
+
44
+ it ( 'position #bottom' , ( ) => {
45
+ const wrapper = mount ( renderModal ( { isOpen : true , position : 'bottom' } ) )
46
+ expect (
47
+ wrapper . find ( '.or-modal-wrapper' ) . hasClass ( 'or-modal-position-bottom' )
48
+ ) . toBe ( true )
49
+ } )
50
+
51
+ it ( 'position #wrong value' , ( ) => {
52
+ const wrapper = mount ( renderModal ( { isOpen : true , position : 'll' } ) )
53
+ expect (
54
+ wrapper . find ( '.or-modal-wrapper' ) . hasClass ( 'or-modal-position-center' )
55
+ ) . toBe ( true )
56
+ } )
57
+ } )
58
+
59
+ describe ( 'simulate click events # default closed' , ( ) => {
10
60
let wrapper
11
61
beforeEach ( ( ) => {
12
- wrapper = mount ( < RenderModal /> )
62
+ wrapper = mount ( < RenderModal isOpen = { false } /> )
13
63
} )
14
64
15
65
afterEach ( ( ) => {
@@ -22,18 +72,85 @@ describe('src/index', () => {
22
72
wrapper . find ( '.open-btn' ) . simulate ( 'click' )
23
73
expect ( wrapper . find ( '.or-modal-wrapper' ) . length ) . toBe ( 1 )
24
74
} )
75
+ } )
76
+
77
+ describe ( 'simulate click events #default open' , ( ) => {
78
+ let wrapper
79
+ beforeEach ( ( ) => {
80
+ wrapper = mount ( < RenderModal isOpen = { true } /> )
81
+ } )
82
+
83
+ afterEach ( ( ) => {
84
+ wrapper . unmount ( )
85
+ mockCallBack . mockReset ( )
86
+ } )
87
+
88
+ it ( 'close icon #click' , ( ) => {
89
+ expect ( wrapper . find ( '.or-modal-wrapper' ) . length ) . toBe ( 1 )
90
+ expect ( wrapper . find ( CSSTransition ) . props ( ) . in ) . toBeTruthy ( )
91
+ wrapper . find ( '.close-icon' ) . simulate ( 'click' )
92
+ // cannot make transitionEnd works
93
+ expect ( wrapper . find ( CSSTransition ) . props ( ) . in ) . toBeFalsy ( )
94
+ } )
95
+ } )
96
+
97
+ describe ( 'simulate click events #modal closed by clicking overlay' , ( ) => {
98
+ let wrapper
99
+ beforeEach ( ( ) => {
100
+ wrapper = mount ( < RenderModal isOpen = { true } /> )
101
+ } )
102
+
103
+ afterEach ( ( ) => {
104
+ wrapper . unmount ( )
105
+ mockCallBack . mockReset ( )
106
+ } )
25
107
26
- // it('close icon #click', () => {
27
- // expect(wrapper.find('.or-modal-wrapper').length).toBe(1)
28
- // wrapper.find('.or-modal-close-icon').simulate('click')
29
- // expect(wrapper.find('.or-modal-wrapper').length).toBe(0)
30
- // })
108
+ it ( 'click' , ( ) => {
109
+ expect ( wrapper . find ( '.or-modal-wrapper' ) . length ) . toBe ( 1 )
110
+ expect ( wrapper . find ( CSSTransition ) . props ( ) . in ) . toBeTruthy ( )
111
+ wrapper . find ( '.or-modal-mask' ) . simulate ( 'click' )
112
+ // cannot make transitionEnd works
113
+ expect ( wrapper . find ( CSSTransition ) . props ( ) . in ) . toBeFalsy ( )
114
+ } )
115
+ } )
116
+
117
+ describe ( 'simulate click events #modal not closed by clicking overlay' , ( ) => {
118
+ let wrapper
119
+ beforeEach ( ( ) => {
120
+ wrapper = mount (
121
+ < RenderModal isOpen = { true } isClosedOnOverlayClick = { false } />
122
+ )
123
+ } )
124
+
125
+ afterEach ( ( ) => {
126
+ wrapper . unmount ( )
127
+ mockCallBack . mockReset ( )
128
+ } )
129
+
130
+ it ( 'click' , ( ) => {
131
+ expect ( wrapper . find ( '.or-modal-wrapper' ) . length ) . toBe ( 1 )
132
+ expect ( wrapper . find ( CSSTransition ) . props ( ) . in ) . toBeTruthy ( )
133
+ wrapper . find ( '.or-modal-mask' ) . simulate ( 'click' )
134
+ // cannot make transitionEnd works
135
+ expect ( wrapper . find ( CSSTransition ) . props ( ) . in ) . toBeTruthy ( )
136
+ } )
31
137
} )
32
138
} )
33
139
34
- class RenderModal extends React . Component {
140
+ function renderModal ( props ) {
141
+ return (
142
+ < Modal classname = "modal-center" { ...props } >
143
+ < div > I am modal content</ div >
144
+ </ Modal >
145
+ )
146
+ }
147
+
148
+ class RenderModal extends React . Component < {
149
+ isOpen : boolean
150
+ isClosedOnOverlayClick ?: boolean
151
+ } > {
35
152
state = {
36
- isOpen : false
153
+ isOpen : this . props . isOpen
37
154
}
38
155
39
156
render ( ) {
@@ -43,23 +160,14 @@ class RenderModal extends React.Component {
43
160
open
44
161
</ div >
45
162
< Modal
46
- classname = "modal-center"
163
+ classname = "modal-right"
164
+ position = "right"
47
165
isOpen = { this . state . isOpen }
48
166
onClose = { this . handleClose }
167
+ isClosedOnOverlayClick = { this . props . isClosedOnOverlayClick }
49
168
>
50
- < div className = "right-side" >
51
- < svg
52
- className = "or-modal-close-icon"
53
- fill = "#000"
54
- height = "30"
55
- viewBox = "0 0 24 24"
56
- width = "30"
57
- xmlns = "http://www.w3.org/2000/svg"
58
- onClick = { this . handleClose }
59
- >
60
- < path d = "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" />
61
- < path d = "M0 0h24v24H0z" fill = "none" />
62
- </ svg >
169
+ < div className = "close-icon" onClick = { this . handleClose } >
170
+ close
63
171
</ div >
64
172
</ Modal >
65
173
</ div >
0 commit comments