Skip to content

Commit c677fec

Browse files
committed
adds additional test cases for #246
Signed-off-by: Makarand <mnsd@divisionsinc.com>
1 parent 930a130 commit c677fec

2 files changed

Lines changed: 108 additions & 1 deletion

File tree

middleware/request_test.go

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ type fileRequest struct {
406406
func paramsForFileUpload() *UntypedRequestBinder {
407407
nameParam := spec.FormDataParam("name").Typed("string", "")
408408

409-
fileParam := spec.FileParam("file")
409+
fileParam := spec.FileParam("file").AsRequired()
410410

411411
params := map[string]spec.Parameter{"Name": *nameParam, "File": *fileParam}
412412
return NewUntypedRequestBinder(params, new(spec.Swagger), strfmt.Default)
@@ -469,4 +469,63 @@ func TestBindingFileUpload(t *testing.T) {
469469

470470
data = fileRequest{}
471471
assert.Error(t, binder.Bind(req, nil, runtime.JSONConsumer(), &data))
472+
473+
writer = multipart.NewWriter(body)
474+
_ = writer.WriteField("name", "the-name")
475+
assert.NoError(t, writer.Close())
476+
477+
req, _ = http.NewRequest("POST", urlStr, body)
478+
req.Header.Set("Content-Type", writer.FormDataContentType())
479+
480+
data = fileRequest{}
481+
assert.Error(t, binder.Bind(req, nil, runtime.JSONConsumer(), &data))
482+
}
483+
484+
func paramsForOptionalFileUpload() *UntypedRequestBinder {
485+
nameParam := spec.FormDataParam("name").Typed("string", "")
486+
fileParam := spec.FileParam("file").AsOptional()
487+
488+
params := map[string]spec.Parameter{"Name": *nameParam, "File": *fileParam}
489+
return NewUntypedRequestBinder(params, new(spec.Swagger), strfmt.Default)
490+
}
491+
492+
func TestBindingOptionalFileUpload(t *testing.T) {
493+
binder := paramsForOptionalFileUpload()
494+
495+
body := bytes.NewBuffer(nil)
496+
writer := multipart.NewWriter(body)
497+
_ = writer.WriteField("name", "the-name")
498+
assert.NoError(t, writer.Close())
499+
500+
urlStr := "http://localhost:8002/hello"
501+
req, _ := http.NewRequest("POST", urlStr, body)
502+
req.Header.Set("Content-Type", writer.FormDataContentType())
503+
504+
data := fileRequest{}
505+
assert.NoError(t, binder.Bind(req, nil, runtime.JSONConsumer(), &data))
506+
assert.Equal(t, "the-name", data.Name)
507+
assert.Nil(t, data.File.Data)
508+
assert.Nil(t, data.File.Header)
509+
510+
writer = multipart.NewWriter(body)
511+
part, err := writer.CreateFormFile("file", "plain-jane.txt")
512+
assert.NoError(t, err)
513+
_, _ = part.Write([]byte("the file contents"))
514+
_ = writer.WriteField("name", "the-name")
515+
assert.NoError(t, writer.Close())
516+
517+
req, _ = http.NewRequest("POST", urlStr, body)
518+
req.Header.Set("Content-Type", writer.FormDataContentType())
519+
assert.NoError(t, writer.Close())
520+
521+
data = fileRequest{}
522+
assert.NoError(t, binder.Bind(req, nil, runtime.JSONConsumer(), &data))
523+
assert.Equal(t, "the-name", data.Name)
524+
assert.NotNil(t, data.File)
525+
assert.NotNil(t, data.File.Header)
526+
assert.Equal(t, "plain-jane.txt", data.File.Header.Filename)
527+
528+
bb, err := ioutil.ReadAll(data.File.Data)
529+
assert.NoError(t, err)
530+
assert.Equal(t, []byte("the file contents"), bb)
472531
}

middleware/untyped_request_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,54 @@ func TestUntypedFileUpload(t *testing.T) {
111111

112112
data = make(map[string]interface{})
113113
assert.Error(t, binder.Bind(req, nil, runtime.JSONConsumer(), &data))
114+
115+
writer = multipart.NewWriter(body)
116+
_ = writer.WriteField("name", "the-name")
117+
assert.NoError(t, writer.Close())
118+
119+
req, _ = http.NewRequest("POST", urlStr, body)
120+
req.Header.Set("Content-Type", writer.FormDataContentType())
121+
122+
data = make(map[string]interface{})
123+
assert.Error(t, binder.Bind(req, nil, runtime.JSONConsumer(), &data))
124+
}
125+
126+
func TestUntypedOptionalFileUpload(t *testing.T) {
127+
binder := paramsForOptionalFileUpload()
128+
129+
body := bytes.NewBuffer(nil)
130+
writer := multipart.NewWriter(body)
131+
_ = writer.WriteField("name", "the-name")
132+
assert.NoError(t, writer.Close())
133+
134+
urlStr := "http://localhost:8002/hello"
135+
req, _ := http.NewRequest("POST", urlStr, body)
136+
req.Header.Set("Content-Type", writer.FormDataContentType())
137+
138+
data := make(map[string]interface{})
139+
assert.NoError(t, binder.Bind(req, nil, runtime.JSONConsumer(), &data))
140+
assert.Equal(t, "the-name", data["name"])
141+
142+
writer = multipart.NewWriter(body)
143+
part, err := writer.CreateFormFile("file", "plain-jane.txt")
144+
assert.NoError(t, err)
145+
_, _ = part.Write([]byte("the file contents"))
146+
_ = writer.WriteField("name", "the-name")
147+
assert.NoError(t, writer.Close())
148+
149+
req, _ = http.NewRequest("POST", urlStr, body)
150+
req.Header.Set("Content-Type", writer.FormDataContentType())
151+
assert.NoError(t, writer.Close())
152+
153+
data = make(map[string]interface{})
154+
assert.NoError(t, binder.Bind(req, nil, runtime.JSONConsumer(), &data))
155+
assert.Equal(t, "the-name", data["name"])
156+
assert.NotNil(t, data["file"])
157+
assert.IsType(t, runtime.File{}, data["file"])
158+
file := data["file"].(runtime.File)
159+
assert.NotNil(t, file.Header)
160+
assert.Equal(t, "plain-jane.txt", file.Header.Filename)
161+
114162
}
115163

116164
func TestUntypedBindingTypesForValid(t *testing.T) {

0 commit comments

Comments
 (0)