@@ -3,6 +3,7 @@ import {Agent as HttpAgent} from 'http';
33import test , { Constructor } from 'ava' ;
44import nock = require( 'nock' ) ;
55import getStream = require( 'get-stream' ) ;
6+ import FormData = require( 'form-data' ) ;
67import sinon = require( 'sinon' ) ;
78import delay = require( 'delay' ) ;
89import { Handler } from 'express' ;
@@ -451,6 +452,43 @@ test('beforeRetry allows modifications', withServer, async (t, server, got) => {
451452 t . is ( body . foo , 'bar' ) ;
452453} ) ;
453454
455+ test ( 'beforeRetry allows stream body if different from original' , withServer , async ( t , server , got ) => {
456+ server . post ( '/retry' , async ( request , response ) => {
457+ if ( request . headers . foo ) {
458+ response . send ( 'test' ) ;
459+ } else {
460+ response . statusCode = 500 ;
461+ }
462+
463+ response . end ( ) ;
464+ } ) ;
465+
466+ const generateBody = ( ) => {
467+ const form = new FormData ( ) ;
468+ form . append ( 'A' , 'B' ) ;
469+ return form ;
470+ } ;
471+
472+ const { body} = await got . post ( 'retry' , {
473+ body : generateBody ( ) ,
474+ retry : {
475+ methods : [ 'POST' ]
476+ } ,
477+ hooks : {
478+ beforeRetry : [
479+ options => {
480+ const form = generateBody ( ) ;
481+ options . body = form ;
482+ options . headers [ 'content-type' ] = `multipart/form-data; boundary=${ form . getBoundary ( ) } ` ;
483+ options . headers . foo = 'bar' ;
484+ }
485+ ]
486+ }
487+ } ) ;
488+
489+ t . is ( body , 'test' ) ;
490+ } ) ;
491+
454492test ( 'afterResponse is called with response' , withServer , async ( t , server , got ) => {
455493 server . get ( '/' , echoHeaders ) ;
456494
0 commit comments