@@ -436,6 +436,104 @@ describe('POST object', () => {
436
436
} ) ;
437
437
} ) ;
438
438
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
+
439
537
it ( 'should upload an object with key slash' , done => {
440
538
const { bucketName, url } = testContext ;
441
539
const slashKey = '/' ;
0 commit comments