diff --git a/ctx_test.go b/ctx_test.go index 078569e1..4488944a 100644 --- a/ctx_test.go +++ b/ctx_test.go @@ -7,11 +7,13 @@ package fiber import ( "bytes" "fmt" + "io" "io/ioutil" "mime/multipart" "net/http" "net/http/httptest" "net/url" + "os" "strconv" "strings" "testing" @@ -210,7 +212,57 @@ func Test_Cookies(t *testing.T) { } } func Test_FormFile(t *testing.T) { - // TODO + app := New() + app.Post("/test", func(c *Ctx) { + expectFileName := "test" + expectFileContent := "hello world" + fh, err := c.FormFile("file") + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + if fh.Filename != expectFileName { + t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expectFileName, fh.Filename) + } + f, err := fh.Open() + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + b := new(bytes.Buffer) + _, err = io.Copy(b, f) + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + f.Close() + if b.String() != expectFileContent { + t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expectFileContent, b.String()) + } + }) + + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + + ioWriter, err := writer.CreateFormFile("file", "test") + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + + _, err = ioWriter.Write([]byte("hello world")) + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + writer.Close() + + req, _ := http.NewRequest("POST", "/test", body) + req.Header.Set("Content-Type", writer.FormDataContentType()) + req.Header.Set("Content-Length", strconv.Itoa(len(body.Bytes()))) + + resp, err := app.Test(req) + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + if resp.StatusCode != 200 { + t.Fatalf(`%s: StatusCode %v`, t.Name(), resp.StatusCode) + } } func Test_FormValue(t *testing.T) { app := New() @@ -596,7 +648,56 @@ func Test_Route(t *testing.T) { } } func Test_SaveFile(t *testing.T) { - // TODO + app := New() + app.Post("/test", func(c *Ctx) { + fh, err := c.FormFile("file") + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + tempFile, err := ioutil.TempFile(os.TempDir(), "test-") + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + defer os.Remove(tempFile.Name()) + err = c.SaveFile(fh, tempFile.Name()) + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + bs, err := ioutil.ReadFile(tempFile.Name()) + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + expect := "hello world" + if string(bs) != expect { + t.Fatalf(`Expecting %s, got %s`, expect, string(bs)) + } + }) + + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + + ioWriter, err := writer.CreateFormFile("file", "test") + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + + _, err = ioWriter.Write([]byte("hello world")) + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + writer.Close() + + req, _ := http.NewRequest("POST", "/test", body) + req.Header.Set("Content-Type", writer.FormDataContentType()) + req.Header.Set("Content-Length", strconv.Itoa(len(body.Bytes()))) + + resp, err := app.Test(req) + if err != nil { + t.Fatalf(`%s: %s`, t.Name(), err) + } + if resp.StatusCode != 200 { + t.Fatalf(`%s: StatusCode %v`, t.Name(), resp.StatusCode) + } } func Test_Secure(t *testing.T) { app := New()