Skip to content

Commit 2bb7099

Browse files
authored
feat: update test cases (#9)
1 parent f73d01f commit 2bb7099

File tree

5 files changed

+141
-27
lines changed

5 files changed

+141
-27
lines changed

examples/stories/example.story.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ export class Example extends React.Component {
3232
viewBox="0 0 24 24"
3333
width="30"
3434
xmlns="http://www.w3.org/2000/svg"
35-
onClick={this.handleClose}
3635
>
3736
<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" />
3837
<path d="M0 0h24v24H0z" fill="none" />

src/Modal.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@ export class Modal extends PureComponent<Props, {}> {
4949

5050
const modalNames = clx(
5151
{
52-
[`or-modal-position-${position}`]: position
52+
[`or-modal-position-${
53+
['left', 'right', 'center', 'bottom'].indexOf(position) > -1
54+
? position
55+
: 'center'
56+
}`]: position
5357
},
5458
classname,
5559
'or-modal-wrapper'

tests/Modal.test.tsx

Lines changed: 131 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,65 @@
11
import { mount } from 'enzyme'
22
import Button from 'or-button'
33
import React from 'react'
4+
import { CSSTransition } from 'react-transition-group'
45

56
import { Modal } from '../src'
7+
import { sleep } from './util'
68

79
const mockCallBack = jest.fn()
810
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', () => {
1060
let wrapper
1161
beforeEach(() => {
12-
wrapper = mount(<RenderModal />)
62+
wrapper = mount(<RenderModal isOpen={false} />)
1363
})
1464

1565
afterEach(() => {
@@ -22,18 +72,85 @@ describe('src/index', () => {
2272
wrapper.find('.open-btn').simulate('click')
2373
expect(wrapper.find('.or-modal-wrapper').length).toBe(1)
2474
})
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+
})
25107

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+
})
31137
})
32138
})
33139

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+
}> {
35152
state = {
36-
isOpen: false
153+
isOpen: this.props.isOpen
37154
}
38155

39156
render() {
@@ -43,23 +160,14 @@ class RenderModal extends React.Component {
43160
open
44161
</div>
45162
<Modal
46-
classname="modal-center"
163+
classname="modal-right"
164+
position="right"
47165
isOpen={this.state.isOpen}
48166
onClose={this.handleClose}
167+
isClosedOnOverlayClick={this.props.isClosedOnOverlayClick}
49168
>
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
63171
</div>
64172
</Modal>
65173
</div>

tests/setup.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// http://fb.me/react-polyfills
21
import { configure } from 'enzyme'
32
import Adapter from 'enzyme-adapter-react-16'
4-
import 'raf/polyfill'
3+
import 'raf/polyfill' // http://fb.me/react-polyfills
4+
import 'regenerator-runtime/runtime'
55

66
configure({ adapter: new Adapter() })

tests/util.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function sleep(ms) {
2+
return new Promise(resolve => setTimeout(resolve, ms))
3+
}

0 commit comments

Comments
 (0)