@@ -436,6 +436,104 @@ describe('POST object', () => {
436436 } ) ;
437437 } ) ;
438438
439+ it ( 'should handle error when content-type is incorrect' , done => {
440+ const { bucketName, url } = testContext ;
441+ // Prep fields then remove the key field
442+ let fields = calculateFields ( ak , sk , bucketName ) ;
443+ fields = fields . filter ( e => e . name !== 'key' ) ;
444+
445+ const formData = new FormData ( ) ;
446+
447+ fields . forEach ( field => {
448+ formData . append ( field . name , field . value ) ;
449+ } ) ;
450+
451+ formData . append ( 'file' , fs . createReadStream ( path . join ( __dirname , filename ) ) ) ;
452+
453+ formData . getLength ( ( err , length ) => {
454+ if ( err ) {
455+ return done ( err ) ;
456+ }
457+
458+ const headers = {
459+ ...formData . getHeaders ( ) ,
460+ 'Content-Length' : length ,
461+ } ;
462+ headers [ 'content-type' ] = 'application/json' ;
463+ return axios . post ( url , formData , {
464+ headers,
465+ } )
466+ . then ( ( ) => {
467+ done ( new Error ( 'Request should not succeed wrong content-type' ) ) ;
468+ } )
469+ . catch ( err => {
470+ assert . ok ( err . response , 'Error should be returned by axios' ) ;
471+
472+ // Parse the XML error response
473+ xml2js . parseString ( err . response . data , ( err , result ) => {
474+ if ( err ) {
475+ return done ( err ) ;
476+ }
477+
478+ const error = result . Error ;
479+ assert . equal ( error . Code [ 0 ] , 'PreconditionFailed' ) ;
480+ assert . equal ( error . Message [ 0 ] ,
481+ 'Bucket POST must be of the enclosure-type multipart/form-data' ) ;
482+ return done ( ) ;
483+ } ) ;
484+ } ) ;
485+ } ) ;
486+ } ) ;
487+
488+ it ( 'should handle error when content-type is missing' , done => {
489+ const { bucketName, url } = testContext ;
490+ // Prep fields then remove the key field
491+ let fields = calculateFields ( ak , sk , bucketName ) ;
492+ fields = fields . filter ( e => e . name !== 'key' ) ;
493+
494+ const formData = new FormData ( ) ;
495+
496+ fields . forEach ( field => {
497+ formData . append ( field . name , field . value ) ;
498+ } ) ;
499+
500+ formData . append ( 'file' , fs . createReadStream ( path . join ( __dirname , filename ) ) ) ;
501+
502+ formData . getLength ( ( err , length ) => {
503+ if ( err ) {
504+ return done ( err ) ;
505+ }
506+
507+ const headers = {
508+ ...formData . getHeaders ( ) ,
509+ 'Content-Length' : length ,
510+ } ;
511+ delete headers [ 'content-type' ] ;
512+ return axios . post ( url , formData , {
513+ headers,
514+ } )
515+ . then ( ( ) => {
516+ done ( new Error ( 'Request should not succeed without correct content-type' ) ) ;
517+ } )
518+ . catch ( err => {
519+ assert . ok ( err . response , 'Error should be returned by axios' ) ;
520+
521+ // Parse the XML error response
522+ xml2js . parseString ( err . response . data , ( err , result ) => {
523+ if ( err ) {
524+ return done ( err ) ;
525+ }
526+
527+ const error = result . Error ;
528+ assert . equal ( error . Code [ 0 ] , 'PreconditionFailed' ) ;
529+ assert . equal ( error . Message [ 0 ] ,
530+ 'Bucket POST must be of the enclosure-type multipart/form-data' ) ;
531+ return done ( ) ;
532+ } ) ;
533+ } ) ;
534+ } ) ;
535+ } ) ;
536+
439537 it ( 'should upload an object with key slash' , done => {
440538 const { bucketName, url } = testContext ;
441539 const slashKey = '/' ;
0 commit comments