1
1
import * as React from 'react' ;
2
- import { assert } from 'chai' ;
2
+ import { expect } from 'chai' ;
3
+ import { createClientRender , fireEvent } from 'test/utils/createClientRender' ;
4
+ import { createMount , getClasses } from '@material-ui/core/test-utils' ;
5
+ import { spy } from 'sinon' ;
3
6
import CancelIcon from '../internal/svg-icons/Cancel' ;
4
- import { createMount , createShallow , getClasses } from '@material-ui/core/test-utils' ;
5
7
import describeConformance from '../test-utils/describeConformance' ;
6
8
import Avatar from './Avatar' ;
7
9
8
10
describe ( '<Avatar />' , ( ) => {
9
11
let mount ;
10
- let shallow ;
11
12
let classes ;
13
+ const render = createClientRender ( ) ;
12
14
13
15
before ( ( ) => {
14
16
mount = createMount ( { strict : true } ) ;
15
- shallow = createShallow ( { dive : true } ) ;
16
17
classes = getClasses ( < Avatar /> ) ;
17
18
} ) ;
18
19
@@ -30,156 +31,172 @@ describe('<Avatar />', () => {
30
31
31
32
describe ( 'image avatar' , ( ) => {
32
33
it ( 'should render a div containing an img' , ( ) => {
33
- const wrapper = shallow (
34
+ const { container } = render (
34
35
< Avatar
35
36
className = "my-avatar"
36
37
src = "something.jpg"
37
38
alt = "Hello World!"
38
39
data-my-prop = "woofAvatar"
39
40
/> ,
40
41
) ;
41
-
42
- assert . strictEqual ( wrapper . name ( ) , 'div' ) ;
43
- assert . strictEqual ( wrapper . childAt ( 0 ) . name ( ) , 'img ') ;
44
- assert . strictEqual ( wrapper . hasClass ( classes . root ) , true ) ;
45
- assert . strictEqual ( wrapper . hasClass ( 'my- avatar' ) , true ) ;
46
- assert . strictEqual ( wrapper . props ( ) [ 'data- my-prop' ] , 'woofAvatar ') ;
47
- assert . strictEqual ( wrapper . hasClass ( classes . colorDefault ) , false ) ;
48
- const img = wrapper . childAt ( 0 ) ;
49
- assert . strictEqual ( img . hasClass ( classes . img ) , true ) ;
50
- assert . strictEqual ( img . props ( ) . alt , 'Hello World!' ) ;
51
- assert . strictEqual ( img . props ( ) . src , 'something.jpg' ) ;
42
+ const avatar = container . firstChild ;
43
+ const img = avatar . firstChild ;
44
+ expect ( avatar . tagName ) . to . equal ( 'DIV ') ;
45
+ expect ( img . tagName ) . to . equal ( 'IMG' ) ;
46
+ expect ( avatar ) . to . have . class ( classes . root ) ;
47
+ expect ( avatar ) . to . have . class ( ' my-avatar ') ;
48
+ expect ( avatar ) . to . have . attribute ( 'data-my-prop' , 'woofAvatar' ) ;
49
+ expect ( avatar ) . to . not . have . class ( classes . colorDefault ) ;
50
+ expect ( img ) . to . have . class ( classes . img ) ;
51
+ expect ( img ) . to . have . attribute ( ' alt' , 'Hello World!' ) ;
52
+ expect ( img ) . to . have . attribute ( ' src' , 'something.jpg' ) ;
52
53
} ) ;
53
54
54
55
it ( 'should be able to add more props to the image' , ( ) => {
55
- const onError = ( ) => { } ;
56
- const wrapper = shallow ( < Avatar src = "something.jpg" imgProps = { { onError } } /> ) ;
57
- assert . strictEqual ( wrapper . childAt ( 0 ) . props ( ) . onError , onError ) ;
56
+ const onError = spy ( ) ;
57
+ const { container } = render ( < Avatar src = "something.jpg" imgProps = { { onError } } /> ) ;
58
+ const img = container . querySelector ( 'img' ) ;
59
+ fireEvent . error ( img ) ;
60
+ expect ( onError . callCount ) . to . equal ( 1 ) ;
58
61
} ) ;
59
62
} ) ;
60
63
61
64
describe ( 'image avatar with unrendered children' , ( ) => {
62
65
it ( 'should render a div containing an img, not children' , ( ) => {
63
- const wrapper = mount ( < Avatar src = "something.jpg" > MB</ Avatar > ) ;
64
- assert . strictEqual ( wrapper . find ( 'img' ) . length , 1 ) ;
65
- assert . strictEqual ( wrapper . text ( ) , '' ) ;
66
+ const { container } = render ( < Avatar src = "something.jpg" > MB</ Avatar > ) ;
67
+ const avatar = container . firstChild ;
68
+ const imgs = container . querySelectorAll ( 'img' ) ;
69
+ expect ( imgs . length ) . to . equal ( 1 ) ;
70
+ expect ( avatar ) . to . have . text ( '' ) ;
66
71
} ) ;
67
72
68
73
it ( 'should be able to add more props to the image' , ( ) => {
69
- const onError = ( ) => { } ;
70
- const wrapper = mount ( < Avatar src = "something.jpg" imgProps = { { onError } } /> ) ;
71
- assert . strictEqual ( wrapper . find ( 'img' ) . props ( ) . onError , onError ) ;
74
+ const onError = spy ( ) ;
75
+ const { container } = render ( < Avatar src = "something.jpg" imgProps = { { onError } } /> ) ;
76
+ const img = container . querySelector ( 'img' ) ;
77
+ fireEvent . error ( img ) ;
78
+ expect ( onError . callCount ) . to . equal ( 1 ) ;
72
79
} ) ;
73
80
} ) ;
74
81
75
82
describe ( 'font icon avatar' , ( ) => {
76
- let wrapper ;
83
+ let container ;
84
+ let avatar ;
85
+ let icon ;
77
86
78
87
before ( ( ) => {
79
- wrapper = shallow (
88
+ container = render (
80
89
< Avatar className = "my-avatar" data-my-prop = "woofAvatar" >
81
90
< span className = "my-icon-font" > icon</ span >
82
91
</ Avatar > ,
83
- ) ;
92
+ ) . container ;
93
+ avatar = container . firstChild ;
94
+ icon = avatar . firstChild ;
84
95
} ) ;
85
96
86
97
it ( 'should render a div containing an font icon' , ( ) => {
87
- const icon = wrapper . childAt ( 0 ) ;
88
- assert . strictEqual ( wrapper . name ( ) , 'div' ) ;
89
- assert . strictEqual ( icon . name ( ) , 'span' ) ;
90
- assert . strictEqual ( icon . hasClass ( 'my-icon-font' ) , true ) ;
91
- assert . strictEqual ( icon . text ( ) , 'icon' ) ;
98
+ expect ( avatar . tagName ) . to . equal ( 'DIV' ) ;
99
+ expect ( icon . tagName ) . to . equal ( 'SPAN' ) ;
100
+ expect ( icon ) . to . have . class ( 'my-icon-font' ) ;
101
+ expect ( icon ) . to . have . text ( 'icon' ) ;
92
102
} ) ;
93
103
94
104
it ( 'should merge user classes & spread custom props to the root node' , ( ) => {
95
- assert . strictEqual ( wrapper . hasClass ( classes . root ) , true ) ;
96
- assert . strictEqual ( wrapper . hasClass ( 'my-avatar' ) , true ) ;
97
- assert . strictEqual ( wrapper . props ( ) [ 'data-my-prop' ] , 'woofAvatar' ) ;
105
+ expect ( avatar ) . to . have . class ( classes . root ) ;
106
+ expect ( avatar ) . to . have . class ( 'my-avatar' ) ;
107
+ expect ( avatar ) . to . have . attribute ( 'data-my-prop' , 'woofAvatar' ) ;
98
108
} ) ;
99
109
100
110
it ( 'should apply the colorDefault class' , ( ) => {
101
- assert . strictEqual ( wrapper . hasClass ( classes . colorDefault ) , true ) ;
111
+ expect ( avatar ) . to . have . class ( classes . colorDefault ) ;
102
112
} ) ;
103
113
} ) ;
104
114
105
115
describe ( 'svg icon avatar' , ( ) => {
106
- let wrapper ;
116
+ let container ;
117
+ let avatar ;
107
118
108
119
before ( ( ) => {
109
- wrapper = shallow (
120
+ container = render (
110
121
< Avatar className = "my-avatar" data-my-prop = "woofAvatar" >
111
122
< CancelIcon />
112
123
</ Avatar > ,
113
- ) ;
124
+ ) . container ;
125
+ avatar = container . firstChild ;
114
126
} ) ;
115
127
116
128
it ( 'should render a div containing an svg icon' , ( ) => {
117
- assert . strictEqual ( wrapper . name ( ) , 'div' ) ;
118
- assert . strictEqual ( wrapper . childAt ( 0 ) . type ( ) , CancelIcon ) ;
129
+ expect ( avatar . tagName ) . to . equal ( 'DIV' ) ;
130
+ const cancelIcon = avatar . firstChild ;
131
+ expect ( cancelIcon ) . to . have . attribute ( 'data-mui-test' , 'CancelIcon' ) ;
119
132
} ) ;
120
133
121
134
it ( 'should merge user classes & spread custom props to the root node' , ( ) => {
122
- assert . strictEqual ( wrapper . hasClass ( classes . root ) , true ) ;
123
- assert . strictEqual ( wrapper . hasClass ( 'my-avatar' ) , true ) ;
124
- assert . strictEqual ( wrapper . props ( ) [ 'data-my-prop' ] , 'woofAvatar' ) ;
135
+ expect ( avatar ) . to . have . class ( classes . root ) ;
136
+ expect ( avatar ) . to . have . class ( 'my-avatar' ) ;
137
+ expect ( avatar ) . to . have . attribute ( 'data-my-prop' , 'woofAvatar' ) ;
125
138
} ) ;
126
139
127
140
it ( 'should apply the colorDefault class' , ( ) => {
128
- assert . strictEqual ( wrapper . hasClass ( classes . colorDefault ) , true ) ;
141
+ expect ( avatar ) . to . have . class ( classes . colorDefault ) ;
129
142
} ) ;
130
143
} ) ;
131
144
132
145
describe ( 'text avatar' , ( ) => {
133
- let wrapper ;
146
+ let container ;
147
+ let avatar ;
134
148
135
149
before ( ( ) => {
136
- wrapper = shallow (
150
+ container = render (
137
151
< Avatar className = "my-avatar" data-my-prop = "woofAvatar" >
138
152
OT
139
153
</ Avatar > ,
140
- ) ;
154
+ ) . container ;
155
+ avatar = container . firstChild ;
141
156
} ) ;
142
157
143
158
it ( 'should render a div containing a string' , ( ) => {
144
- assert . strictEqual ( wrapper . name ( ) , 'div ') ;
145
- assert . strictEqual ( wrapper . childAt ( 0 ) . text ( ) , 'OT' ) ;
159
+ expect ( avatar . tagName ) . to . equal ( 'DIV ') ;
160
+ expect ( avatar . firstChild ) . to . text ( 'OT' ) ;
146
161
} ) ;
147
162
148
163
it ( 'should merge user classes & spread custom props to the root node' , ( ) => {
149
- assert . strictEqual ( wrapper . hasClass ( classes . root ) , true ) ;
150
- assert . strictEqual ( wrapper . hasClass ( 'my-avatar' ) , true ) ;
151
- assert . strictEqual ( wrapper . props ( ) [ 'data-my-prop' ] , 'woofAvatar' ) ;
164
+ expect ( avatar ) . to . have . class ( classes . root ) ;
165
+ expect ( avatar ) . to . have . class ( 'my-avatar' ) ;
166
+ expect ( avatar ) . to . have . attribute ( 'data-my-prop' , 'woofAvatar' ) ;
152
167
} ) ;
153
168
154
169
it ( 'should apply the colorDefault class' , ( ) => {
155
- assert . strictEqual ( wrapper . hasClass ( classes . colorDefault ) , true ) ;
170
+ expect ( avatar ) . to . have . class ( classes . colorDefault ) ;
156
171
} ) ;
157
172
} ) ;
158
173
159
174
describe ( 'falsey avatar' , ( ) => {
160
- let wrapper ;
175
+ let container ;
176
+ let avatar ;
161
177
162
178
before ( ( ) => {
163
- wrapper = shallow (
179
+ container = render (
164
180
< Avatar className = "my-avatar" data-my-prop = "woofAvatar" >
165
181
{ 0 }
166
182
</ Avatar > ,
167
- ) ;
183
+ ) . container ;
184
+ avatar = container . firstChild ;
168
185
} ) ;
169
186
170
187
it ( 'should render with defaultColor class when supplied with a child with falsey value' , ( ) => {
171
- assert . strictEqual ( wrapper . name ( ) , 'div ') ;
172
- assert . strictEqual ( wrapper . text ( ) , '0' ) ;
188
+ expect ( avatar . tagName ) . to . equal ( 'DIV ') ;
189
+ expect ( avatar . firstChild ) . to . text ( '0' ) ;
173
190
} ) ;
174
191
175
192
it ( 'should merge user classes & spread custom props to the root node' , ( ) => {
176
- assert . strictEqual ( wrapper . hasClass ( classes . root ) , true ) ;
177
- assert . strictEqual ( wrapper . hasClass ( 'my-avatar' ) , true ) ;
178
- assert . strictEqual ( wrapper . props ( ) [ 'data-my-prop' ] , 'woofAvatar' ) ;
193
+ expect ( avatar ) . to . have . class ( classes . root ) ;
194
+ expect ( avatar ) . to . have . class ( 'my-avatar' ) ;
195
+ expect ( avatar ) . to . have . attribute ( 'data-my-prop' , 'woofAvatar' ) ;
179
196
} ) ;
180
197
181
198
it ( 'should apply the colorDefault class' , ( ) => {
182
- assert . strictEqual ( wrapper . hasClass ( classes . colorDefault ) , true ) ;
199
+ expect ( avatar ) . to . have . class ( classes . colorDefault ) ;
183
200
} ) ;
184
201
} ) ;
185
202
} ) ;
0 commit comments