1
1
package middleware
2
2
3
3
import (
4
+ "bytes"
4
5
"fmt"
5
6
"github.com/labstack/echo/v4"
6
7
"github.com/stretchr/testify/assert"
8
+ "mime/multipart"
7
9
"net/http"
8
10
"net/http/httptest"
9
11
"net/url"
@@ -499,6 +501,25 @@ func TestValuesFromForm(t *testing.T) {
499
501
return req
500
502
}
501
503
504
+ exampleMultiPartFormRequest := func (mod func (w * multipart.Writer )) * http.Request {
505
+ var b bytes.Buffer
506
+ w := multipart .NewWriter (& b )
507
+ w .WriteField ("name" , "Jon Snow" )
508
+ w .WriteField ("emails[]" , "jon@labstack.com" )
509
+ if mod != nil {
510
+ mod (w )
511
+ }
512
+
513
+ fw , _ := w .CreateFormFile ("upload" , "my.file" )
514
+ fw .Write ([]byte (`<div>hi</div>` ))
515
+ w .Close ()
516
+
517
+ req := httptest .NewRequest (http .MethodPost , "/" , strings .NewReader (b .String ()))
518
+ req .Header .Add (echo .HeaderContentType , w .FormDataContentType ())
519
+
520
+ return req
521
+ }
522
+
502
523
var testCases = []struct {
503
524
name string
504
525
givenRequest * http.Request
@@ -520,6 +541,14 @@ func TestValuesFromForm(t *testing.T) {
520
541
whenName : "emails[]" ,
521
542
expectValues : []string {"jon@labstack.com" , "snow@labstack.com" },
522
543
},
544
+ {
545
+ name : "ok, POST multipart/form, multiple value" ,
546
+ givenRequest : exampleMultiPartFormRequest (func (w * multipart.Writer ) {
547
+ w .WriteField ("emails[]" , "snow@labstack.com" )
548
+ }),
549
+ whenName : "emails[]" ,
550
+ expectValues : []string {"jon@labstack.com" , "snow@labstack.com" },
551
+ },
523
552
{
524
553
name : "ok, GET form, single value" ,
525
554
givenRequest : exampleGetFormRequest (nil ),
@@ -540,16 +569,6 @@ func TestValuesFromForm(t *testing.T) {
540
569
whenName : "nope" ,
541
570
expectError : errFormExtractorValueMissing .Error (),
542
571
},
543
- {
544
- name : "nok, POST form, form parsing error" ,
545
- givenRequest : func () * http.Request {
546
- req := httptest .NewRequest (http .MethodPost , "/" , nil )
547
- req .Body = nil
548
- return req
549
- }(),
550
- whenName : "name" ,
551
- expectError : "valuesFromForm parse form failed: missing form body" ,
552
- },
553
572
{
554
573
name : "ok, cut values over extractorLimit" ,
555
574
givenRequest : examplePostFormRequest (func (v * url.Values ) {
0 commit comments