@@ -164,54 +164,38 @@ test('should call onChange/input bubbling up the event when a file is selected',
164
164
expect ( onInputForm ) . toHaveBeenCalledTimes ( 1 )
165
165
} )
166
166
167
- test ( 'should upload file with accepted format' , ( ) => {
168
- const file = new File ( [ 'hello' ] , 'hello.png' , { type : 'image/png' } )
169
- const { element} = setup ( '<input type="file" accept="image/png" />' )
170
-
171
- userEvent . upload ( element , file )
172
-
173
- expect ( element . files ) . toHaveLength ( 1 )
174
- } )
175
-
176
- test ( 'should upload multiple files with accepted format' , ( ) => {
177
- const files = [
178
- new File ( [ 'hello' ] , 'hello.png' , { type : 'image/png' } ) ,
179
- new File ( [ 'there' ] , 'there.jpg' , { type : 'audio/mp3' } ) ,
180
- new File ( [ 'there' ] , 'there.csv' , { type : 'text/csv' } ) ,
181
- new File ( [ 'there' ] , 'there.jpg' , { type : 'video/mp4' } ) ,
182
- ]
183
- const { element} = setup ( `
167
+ test . each ( [
168
+ [ true , 'video/*,audio/*' , 2 ] ,
169
+ [ true , '.png' , 1 ] ,
170
+ [ true , 'text/csv' , 1 ] ,
171
+ [ true , '' , 4 ] ,
172
+ [ false , 'video/*' , 4 ] ,
173
+ ] ) (
174
+ 'should filter according to accept attribute applyAccept=%s, acceptAttribute=%s' ,
175
+ ( applyAccept , acceptAttribute , expectedLength ) => {
176
+ const files = [
177
+ new File ( [ 'hello' ] , 'hello.png' , { type : 'image/png' } ) ,
178
+ new File ( [ 'there' ] , 'there.jpg' , { type : 'audio/mp3' } ) ,
179
+ new File ( [ 'there' ] , 'there.csv' , { type : 'text/csv' } ) ,
180
+ new File ( [ 'there' ] , 'there.jpg' , { type : 'video/mp4' } ) ,
181
+ ]
182
+ const { element} = setup ( `
184
183
<input
185
184
type="file"
186
- accept="video/*,audio/*,.png " multiple
185
+ accept="${ acceptAttribute } " multiple
187
186
/>
188
187
` )
189
188
190
- userEvent . upload ( element , files )
189
+ userEvent . upload ( element , files , undefined , { applyAccept } )
191
190
192
- expect ( element . files ) . toHaveLength ( 3 )
193
- } )
191
+ expect ( element . files ) . toHaveLength ( expectedLength )
192
+ } ,
193
+ )
194
194
195
- test ( 'should not upload file with unaccepted format' , ( ) => {
196
- const file = new File ( [ 'hello' ] , 'hello.png' , { type : 'image/png' } )
197
- const { element} = setup ( '<input type="file" accept="image/jpg" />' )
198
-
199
- userEvent . upload ( element , file )
200
-
201
- expect ( element . files ) . toHaveLength ( 0 )
202
- } )
203
-
204
- test ( 'should not upload multiple files with unaccepted formats' , ( ) => {
205
- const files = [
206
- new File ( [ 'hello' ] , 'hello.txt' , { type : 'text/plain' } ) ,
207
- new File ( [ 'there' ] , 'there.pdf' , { type : 'application/pdf' } ) ,
208
- new File ( [ 'there' ] , 'there.png' , { type : 'image/png' } ) ,
209
- ]
210
- const { element} = setup ( `
211
- <input id="files" type="file" accept="video/*" multiple />
212
- ` )
213
-
214
- userEvent . upload ( element , files )
195
+ test ( 'should not trigger input event for empty list' , ( ) => {
196
+ const { element, eventWasFired} = setup ( '<input type="file"/>' )
197
+ userEvent . upload ( element , [ ] )
215
198
216
199
expect ( element . files ) . toHaveLength ( 0 )
200
+ expect ( eventWasFired ( 'input' ) ) . toBe ( false )
217
201
} )
0 commit comments