Implement getRequestFileName
Co-authored-by: Hector Hurtado <hector.hurtado@bbva.com>
This commit is contained in:
@@ -102,5 +102,13 @@ func getRequestForm(w http.ResponseWriter, r *http.Request, h *model.Handler) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRequestFiles(w http.ResponseWriter, r *http.Request, h *model.Handler) {
|
func getRequestFileName(w http.ResponseWriter, r *http.Request, h *model.Handler) {
|
||||||
|
w.Header().Add("Content-Type", "application/octet-stream")
|
||||||
|
name := mux.Vars(r)["name"]
|
||||||
|
_, header, err := h.Request.FormFile(name)
|
||||||
|
if err == nil {
|
||||||
|
_, _ = w.Write([]byte(header.Filename))
|
||||||
|
} else {
|
||||||
|
w.WriteHeader(http.StatusNotFound)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package data
|
package data
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
// "fmt"
|
// "fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"net/url"
|
"net/url"
|
||||||
@@ -799,15 +801,26 @@ func TestGetRequestForm404sWhenFormDoesntExist(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetRequestFiles200sOnHappyPath(t *testing.T) {
|
func createMultipartFileRequest(fieldName, filename, fileContent string) *http.Request {
|
||||||
|
multPartBody := bytes.Buffer{}
|
||||||
|
multPartWriter := multipart.NewWriter(&multPartBody)
|
||||||
|
part, _ := multPartWriter.CreateFormFile(fieldName, filename)
|
||||||
|
_, _ = part.Write([]byte(fileContent))
|
||||||
|
_ = multPartWriter.Close()
|
||||||
|
r := httptest.NewRequest("POST", "/", &multPartBody)
|
||||||
|
r.Header.Add("Content-Type", multPartWriter.FormDataContentType())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetRequestFileName200sOnHappyPath(t *testing.T) {
|
||||||
h := model.Handler{
|
h := model.Handler{
|
||||||
Request: httptest.NewRequest("POST", "/", nil),
|
Request: createMultipartFileRequest("bar", "foo", ""),
|
||||||
Writer: httptest.NewRecorder(),
|
Writer: httptest.NewRecorder(),
|
||||||
}
|
}
|
||||||
r := createMuxRequest("/handlers/HANDLERID/request/files/{name}", "/handlers/HANDLERID/request/files/bar", "GET")
|
r := createMuxRequest("/handlers/HANDLERID/request/files/{name}/filename", "/handlers/HANDLERID/request/files/bar/filename", "GET")
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
getRequestFiles(w, r, &h)
|
getRequestFileName(w, r, &h)
|
||||||
|
|
||||||
res := w.Result()
|
res := w.Result()
|
||||||
if res.StatusCode != http.StatusOK {
|
if res.StatusCode != http.StatusOK {
|
||||||
@@ -815,18 +828,67 @@ func TestGetRequestFiles200sOnHappyPath(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetRequestFilesSetsOctectStreamContentType(t *testing.T) {
|
func TestGetRequestFileNameSetsOctectStreamContentType(t *testing.T) {
|
||||||
h := model.Handler{
|
h := model.Handler{
|
||||||
Request: httptest.NewRequest("POST", "/", nil),
|
Request: createMultipartFileRequest("bar", "foo", ""),
|
||||||
Writer: httptest.NewRecorder(),
|
Writer: httptest.NewRecorder(),
|
||||||
}
|
}
|
||||||
r := createMuxRequest("/handlers/HANDLERID/request/files/{name}", "/handlers/HANDLERID/request/files/bar", "GET")
|
r := createMuxRequest("/handlers/HANDLERID/request/files/{name}/filename", "/handlers/HANDLERID/request/files/bar/filename", "GET")
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
getRequestFiles(w, r, &h)
|
getRequestFileName(w, r, &h)
|
||||||
|
|
||||||
res := w.Result()
|
res := w.Result()
|
||||||
if res.Header.Get("Content-Type") != "application/octet-stream" {
|
if res.Header.Get("Content-Type") != "application/octet-stream" {
|
||||||
t.Error("Content Type mismatch")
|
t.Error("Content Type mismatch")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetRequestFileNameReturnsTheCorrectFilename(t *testing.T) {
|
||||||
|
h := model.Handler{
|
||||||
|
Request: createMultipartFileRequest("bar", "BAZ", ""),
|
||||||
|
Writer: httptest.NewRecorder(),
|
||||||
|
}
|
||||||
|
r := createMuxRequest("/handlers/HANDLERID/request/files/{name}/filename", "/handlers/HANDLERID/request/files/bar/filename", "GET")
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
|
getRequestFileName(w, r, &h)
|
||||||
|
|
||||||
|
res := w.Result()
|
||||||
|
if body, _ := ioutil.ReadAll(res.Body); string(body) != "BAZ" {
|
||||||
|
t.Errorf(`Body mismatch. Expected: "BAZ". Got: %q`, string(body))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetRequestFileName404sWhenFileDoesntExist(t *testing.T) {
|
||||||
|
h := model.Handler{
|
||||||
|
Request: createMultipartFileRequest("foo", "qux", ""),
|
||||||
|
Writer: httptest.NewRecorder(),
|
||||||
|
}
|
||||||
|
r := createMuxRequest("/handlers/HANDLERID/request/files/{name}/filename", "/handlers/HANDLERID/request/files/bar/filename", "GET")
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
|
getRequestFileName(w, r, &h)
|
||||||
|
|
||||||
|
res := w.Result()
|
||||||
|
if res.StatusCode != http.StatusNotFound {
|
||||||
|
t.Errorf("Status code mismatch. Expected: 404, Got: %d", res.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Discuss which error is appropiate when the form doesn't exists
|
||||||
|
func TestGetRequestFileName404sWhenFormDoesntExist(t *testing.T) {
|
||||||
|
h := model.Handler{
|
||||||
|
Request: httptest.NewRequest("POST", "/", nil),
|
||||||
|
Writer: httptest.NewRecorder(),
|
||||||
|
}
|
||||||
|
r := createMuxRequest("/handlers/HANDLERID/request/files/{name}/filename", "/handlers/HANDLERID/request/files/bar/filename", "GET")
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
|
getRequestFileName(w, r, &h)
|
||||||
|
|
||||||
|
res := w.Result()
|
||||||
|
if res.StatusCode != http.StatusNotFound {
|
||||||
|
t.Errorf("Status code mismatch. Expected: 404, Got: %d", res.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user