55 "encoding/json"
66 "fmt"
77 "io"
8+ "mime/multipart"
89 "net/http"
910 "os"
1011 "reflect"
@@ -50,6 +51,20 @@ func RunTestCase(testcase *testing.TestCase, ctx interface{}) (output interface{
5051 return
5152 }
5253
54+ if len (testcase .Request .Form ) > 0 {
55+ if testcase .Request .Header ["Content-Type" ] == "multipart/form-data" {
56+ multiBody := & bytes.Buffer {}
57+ writer := multipart .NewWriter (multiBody )
58+ for key , val := range testcase .Request .Form {
59+ writer .WriteField (key , val )
60+ }
61+
62+ _ = writer .Close ()
63+ requestBody = multiBody
64+ testcase .Request .Header ["Content-Type" ] = writer .FormDataContentType ()
65+ }
66+ }
67+
5368 var request * http.Request
5469 if request , err = http .NewRequest (testcase .Request .Method , testcase .Request .API , requestBody ); err != nil {
5570 return
@@ -68,8 +83,14 @@ func RunTestCase(testcase *testing.TestCase, ctx interface{}) (output interface{
6883 return
6984 }
7085
86+ var responseBodyData []byte
87+ if responseBodyData , err = io .ReadAll (resp .Body ); err != nil {
88+ return
89+ }
90+
7191 if testcase .Expect .StatusCode != 0 {
7292 if err = expectInt (testcase .Name , testcase .Expect .StatusCode , resp .StatusCode ); err != nil {
93+ err = fmt .Errorf ("error is: %v\n %s" , err , string (responseBodyData ))
7394 return
7495 }
7596 }
@@ -81,10 +102,6 @@ func RunTestCase(testcase *testing.TestCase, ctx interface{}) (output interface{
81102 }
82103 }
83104
84- var responseBodyData []byte
85- if responseBodyData , err = io .ReadAll (resp .Body ); err != nil {
86- return
87- }
88105 if testcase .Expect .Body != "" {
89106 if string (responseBodyData ) != strings .TrimSpace (testcase .Expect .Body ) {
90107 err = fmt .Errorf ("case: %s, got different response body, diff: \n %s" , testcase .Name ,
0 commit comments