@@ -17,6 +17,12 @@ describe('ouiFile', () => {
1717 type : 'image/png' ,
1818 } ;
1919
20+ const invalidMockFile = {
21+ name : 'test_invalid.png' ,
22+ size : 500000 ,
23+ type : 'image/jpeg' ,
24+ } ;
25+
2026 const mockFiles = [ mockFile ] ;
2127
2228 beforeEach ( angular . mock . module ( 'oui.file' ) ) ;
@@ -263,14 +269,6 @@ describe('ouiFile', () => {
263269 expect ( controller . model . length ) . toBe ( 0 ) ;
264270 expect ( onRemoveSpy ) . toHaveBeenCalledWith ( controller . model ) ;
265271 } ) ;
266-
267- it ( 'should clear errors after file removal' , ( ) => {
268- controller . maxsize = 100000 ;
269- controller . addFiles ( mockFiles ) ;
270- expect ( controller . form [ controller . name ] . $invalid ) . toBe ( true ) ;
271- controller . removeFile ( mockFile ) ;
272- expect ( controller . form [ controller . name ] . $invalid ) . toBe ( false ) ;
273- } ) ;
274272 } ) ;
275273
276274 describe ( 'Form controls' , ( ) => {
@@ -302,6 +300,22 @@ describe('ouiFile', () => {
302300 expect ( element . find ( 'oui-file' ) . attr ( 'name' ) ) . toBeUndefined ( ) ;
303301 } ) ;
304302
303+ // Due to an unexplained issue, file component's controller is correctly updated but the
304+ // variable controller used here is not, to bypass this we're triggering the $onInit by hand
305+ it ( 'should ignore invalid accept attribute' , ( ) => {
306+ controller . accept = 'test' ;
307+ controller . $onInit ( ) ;
308+ expect ( controller . accept ) . toBe ( '' ) ;
309+
310+ controller . accept = '.png' ;
311+ controller . $onInit ( ) ;
312+ expect ( controller . accept ) . toBe ( '.png' ) ;
313+
314+ controller . accept = '*/png' ;
315+ controller . $onInit ( ) ;
316+ expect ( controller . accept ) . toBe ( '*/png' ) ;
317+ } ) ;
318+
305319 it ( 'should set input form $touched' , ( ) => {
306320 const label = angular . element ( element [ 0 ] . querySelector ( '.oui-file-selector__label' ) ) ;
307321
@@ -315,16 +329,56 @@ describe('ouiFile', () => {
315329
316330 controller . maxsize = 200000 ;
317331 controller . checkFileValidity ( mockFile ) ;
318- expect ( controller . form [ name ] . $error . maxsize ) . toBeUndefined ( ) ;
332+ expect ( controller . form [ name ] . $error . maxsize ) . toBeFalsy ( ) ;
319333
320334 expect ( controller . form [ name ] . $dirty ) . toBeTruthy ( ) ;
321335
322336 controller . maxsize = 100000 ;
323337 controller . checkFileValidity ( mockFile ) ;
324338 expect ( controller . form [ name ] . $error . maxsize ) . toBeTruthy ( ) ;
325339
340+ // Valid extension tests
341+ controller . accept = 'image/png' ;
342+ controller . checkFileValidity ( mockFile ) ;
343+ expect ( controller . form [ name ] . $error . type ) . toBeFalsy ( ) ;
344+
345+ controller . accept = 'image/*' ;
346+ controller . checkFileValidity ( mockFile ) ;
347+ expect ( controller . form [ name ] . $error . type ) . toBeFalsy ( ) ;
348+
349+ controller . accept = '*/png' ;
350+ controller . checkFileValidity ( mockFile ) ;
351+ expect ( controller . form [ name ] . $error . type ) . toBeFalsy ( ) ;
352+
353+ controller . accept = '.png' ;
354+ controller . checkFileValidity ( mockFile ) ;
355+ expect ( controller . form [ name ] . $error . type ) . toBeFalsy ( ) ;
356+
357+ // Invalid extension tests
358+ controller . accept = 'image/jpeg' ;
359+ controller . checkFileValidity ( mockFile ) ;
360+ expect ( controller . form [ name ] . $error . type ) . toBeTruthy ( ) ;
361+
326362 controller . resetFile ( ) ;
327- expect ( controller . form [ name ] . $error . maxsize ) . toBeUndefined ( ) ;
363+ expect ( controller . form [ name ] . $error . maxsize ) . toBeFalsy ( ) ;
364+ expect ( controller . form [ name ] . $error . type ) . toBeFalsy ( ) ;
365+ } ) ;
366+
367+ it ( 'should not set form as valid after uploading an invalid and then a valid file' , ( ) => {
368+ controller . maxsize = 200000 ;
369+ controller . addFile ( invalidMockFile ) ;
370+ expect ( controller . form [ controller . name ] . $invalid ) . toBe ( true ) ;
371+ controller . addFile ( mockFile ) ;
372+ expect ( controller . form [ controller . name ] . $invalid ) . toBe ( true ) ;
373+ } ) ;
374+
375+ it ( 'should clear errors after file removal' , ( ) => {
376+ controller . maxsize = 200000 ;
377+ controller . accept = 'image/png' ;
378+ controller . addFiles ( [ mockFile , invalidMockFile ] ) ;
379+ expect ( controller . form [ controller . name ] . $invalid ) . toBe ( true ) ;
380+ controller . removeFile ( invalidMockFile ) ;
381+ expect ( controller . form [ controller . name ] . $invalid ) . toBe ( false ) ;
328382 } ) ;
329383 } ) ;
330384 } ) ;
0 commit comments