@@ -23,7 +23,7 @@ describe('Accordion', () => {
23
23
24
24
function mountAccordion ( ) : ReactWrapper {
25
25
return mount (
26
- < Accordion allowMultipleExpanded = { false } >
26
+ < Accordion >
27
27
< AccordionItem >
28
28
< FooTitle />
29
29
</ AccordionItem >
@@ -62,21 +62,60 @@ describe('Accordion', () => {
62
62
) . toEqual ( 1 ) ;
63
63
} ) ;
64
64
65
- it ( 'collapses an expanded item when its title is clicked ' , ( ) => {
66
- const wrapper = mountAccordion ( ) ;
67
-
68
- const fooTitle = wrapper . find ( FooTitle ) ;
69
-
70
- fooTitle . simulate ( 'click' ) ; // open
71
- fooTitle . simulate ( 'click' ) ; // close
65
+ it ( 'pre expanded accordion ' , ( ) => {
66
+ const wrapper = mount (
67
+ < Accordion >
68
+ < AccordionItem expanded = { true } > Fake Child </ AccordionItem >
69
+ < AccordionItem > Fake Child </ AccordionItem >
70
+ </ Accordion > ,
71
+ ) ;
72
72
73
73
const instance = wrapper . find ( Provider ) . instance ( ) as Provider ;
74
74
75
75
expect (
76
76
instance . state . items . filter (
77
77
( item : Item ) => item . expanded === true ,
78
78
) . length ,
79
- ) . toEqual ( 0 ) ;
79
+ ) . toEqual ( 1 ) ;
80
+ } ) ;
81
+
82
+ it ( 'works with multiple pre expanded accordion. Extra expands are just ignored.' , ( ) => {
83
+ const hideBodyClassName = 'HIDE' ;
84
+ const wrapper = mount (
85
+ < Accordion allowMultipleExpanded = { false } >
86
+ < AccordionItem
87
+ expanded = { true }
88
+ hideBodyClassName = { hideBodyClassName }
89
+ >
90
+ Fake Child
91
+ </ AccordionItem >
92
+ < AccordionItem
93
+ expanded = { true }
94
+ hideBodyClassName = { hideBodyClassName }
95
+ >
96
+ Fake Child
97
+ </ AccordionItem >
98
+ </ Accordion > ,
99
+ ) ;
100
+
101
+ const instance = wrapper . find ( Provider ) . instance ( ) as Provider ;
102
+
103
+ expect (
104
+ instance . state . items . filter ( ( item : Item ) => item . expanded )
105
+ . length ,
106
+ ) . toEqual ( 1 ) ;
107
+ expect (
108
+ wrapper . findWhere ( ( item : ReactWrapper ) =>
109
+ item . hasClass ( hideBodyClassName ) ,
110
+ ) . length ,
111
+ ) . toEqual ( 1 ) ;
112
+ } ) ;
113
+
114
+ it ( 'respects arbitrary user-defined props' , ( ) => {
115
+ const wrapper = mount ( < Accordion lang = "en" /> ) ;
116
+ const div = wrapper . find ( 'div' ) . getDOMNode ( ) ;
117
+
118
+ expect ( div . getAttribute ( 'lang' ) ) . toEqual ( 'en' ) ;
80
119
} ) ;
81
120
} ) ;
82
121
@@ -128,10 +167,11 @@ describe('Accordion', () => {
128
167
) . toEqual ( 2 ) ;
129
168
} ) ;
130
169
131
- it ( 'collapses an expanded item when its title is clicked' , ( ) => {
170
+ it ( 'collapses an expanded item when its title is clicked and there is more than one item expanded ' , ( ) => {
132
171
const wrapper = mountMultipleExpanded ( ) ;
133
172
134
173
wrapper . find ( FooTitle ) . simulate ( 'click' ) ; // open
174
+ wrapper . find ( BarTitle ) . simulate ( 'click' ) ; // open
135
175
wrapper . find ( FooTitle ) . simulate ( 'click' ) ; // close
136
176
137
177
const instance = wrapper . find ( Provider ) . instance ( ) as Provider ;
@@ -140,7 +180,7 @@ describe('Accordion', () => {
140
180
instance . state . items . filter (
141
181
( item : Item ) => item . expanded === true ,
142
182
) . length ,
143
- ) . toEqual ( 0 ) ;
183
+ ) . toEqual ( 1 ) ;
144
184
} ) ;
145
185
} ) ;
146
186
@@ -167,11 +207,11 @@ describe('Accordion', () => {
167
207
) . toEqual ( 0 ) ;
168
208
} ) ;
169
209
170
- it ( 'pre expanded accordion' , ( ) => {
210
+ it ( 'pre expanded accordion when allowMultipleExpanded is true ' , ( ) => {
171
211
const wrapper = mount (
172
- < Accordion >
212
+ < Accordion allowMultipleExpanded = { true } >
213
+ < AccordionItem expanded = { true } > Fake Child</ AccordionItem >
173
214
< AccordionItem expanded = { true } > Fake Child</ AccordionItem >
174
- < AccordionItem > Fake Child</ AccordionItem >
175
215
</ Accordion > ,
176
216
) ;
177
217
@@ -180,60 +220,66 @@ describe('Accordion', () => {
180
220
expect (
181
221
instance . state . items . filter ( ( item : Item ) => item . expanded === true )
182
222
. length ,
183
- ) . toEqual ( 1 ) ;
223
+ ) . toEqual ( 2 ) ;
184
224
} ) ;
225
+ } ) ;
185
226
186
- it ( 'works with multiple pre expanded accordion. Extra expands are just ignored.' , ( ) => {
187
- const hideBodyClassName = 'HIDE' ;
188
- const wrapper = mount (
189
- < Accordion allowMultipleExpanded = { false } >
190
- < AccordionItem
191
- expanded = { true }
192
- hideBodyClassName = { hideBodyClassName }
193
- >
194
- Fake Child
195
- </ AccordionItem >
196
- < AccordionItem
197
- expanded = { true }
198
- hideBodyClassName = { hideBodyClassName }
199
- >
200
- Fake Child
227
+ describe ( '<Accordion allowZeroExpanded="false" />' , ( ) => {
228
+ const [ FooTitle ] = [
229
+ ( ) : JSX . Element => < AccordionItemHeading > Foo</ AccordionItemHeading > ,
230
+ ] ;
231
+
232
+ function mountAccordion ( ) : ReactWrapper {
233
+ return mount (
234
+ < Accordion >
235
+ < AccordionItem >
236
+ < FooTitle />
201
237
</ AccordionItem >
202
238
</ Accordion > ,
203
239
) ;
240
+ }
241
+
242
+ it ( "doesn't collapse an expanded item when it's the only item expanded" , ( ) => {
243
+ const wrapper = mountAccordion ( ) ;
244
+
245
+ wrapper . find ( FooTitle ) . simulate ( 'click' ) ; // open
246
+ wrapper . find ( FooTitle ) . simulate ( 'click' ) ; // close
204
247
205
248
const instance = wrapper . find ( Provider ) . instance ( ) as Provider ;
206
249
207
250
expect (
208
- instance . state . items . filter ( ( item : Item ) => item . expanded ) . length ,
209
- ) . toEqual ( 1 ) ;
210
- expect (
211
- wrapper . findWhere ( ( item : ReactWrapper ) =>
212
- item . hasClass ( hideBodyClassName ) ,
213
- ) . length ,
251
+ instance . state . items . filter ( ( item : Item ) => item . expanded === true )
252
+ . length ,
214
253
) . toEqual ( 1 ) ;
215
254
} ) ;
255
+ } ) ;
216
256
217
- it ( 'pre expanded accordion when allowMultipleExpanded is true' , ( ) => {
218
- const wrapper = mount (
219
- < Accordion allowMultipleExpanded = { true } >
220
- < AccordionItem expanded = { true } > Fake Child</ AccordionItem >
221
- < AccordionItem expanded = { true } > Fake Child</ AccordionItem >
257
+ describe ( '<Accordion allowZeroExpanded="true" />' , ( ) => {
258
+ const [ FooTitle ] = [
259
+ ( ) : JSX . Element => < AccordionItemHeading > Foo</ AccordionItemHeading > ,
260
+ ] ;
261
+
262
+ function mountZeroExpanded ( ) : ReactWrapper {
263
+ return mount (
264
+ < Accordion allowZeroExpanded = { true } >
265
+ < AccordionItem >
266
+ < FooTitle />
267
+ </ AccordionItem >
222
268
</ Accordion > ,
223
269
) ;
270
+ }
224
271
225
- const instance = wrapper . find ( Provider ) . instance ( ) as Provider ;
272
+ it ( "collapses an expanded item when its title is clicked and it's the only item open" , ( ) => {
273
+ const wrapper = mountZeroExpanded ( ) ;
226
274
227
- expect (
228
- instance . state . items . filter ( ( item : Item ) => item . expanded === true )
229
- . length ,
230
- ) . toEqual ( 2 ) ;
231
- } ) ;
275
+ wrapper . find ( FooTitle ) . simulate ( 'click' ) ; // open
276
+ wrapper . find ( FooTitle ) . simulate ( 'click' ) ; // close
232
277
233
- it ( 'respects arbitrary user-defined props' , ( ) => {
234
- const wrapper = mount ( < Accordion lang = "en" /> ) ;
235
- const div = wrapper . find ( 'div' ) . getDOMNode ( ) ;
278
+ const provider = wrapper . find ( Provider ) . instance ( ) as Provider ;
236
279
237
- expect ( div . getAttribute ( 'lang' ) ) . toEqual ( 'en' ) ;
280
+ expect (
281
+ provider . state . items . filter ( ( item : Item ) => item . expanded === true )
282
+ . length ,
283
+ ) . toEqual ( 0 ) ;
238
284
} ) ;
239
285
} ) ;
0 commit comments