// 🚀 Fiber is an Express inspired web framework written in Go with 💖 // 📌 API Documentation: https://fiber.wiki // 📝 Github Repository: https://github.com/gofiber/fiber package fiber import ( "bytes" "fmt" "io/ioutil" "mime/multipart" "net/http" "net/http/httptest" "net/url" "strconv" "strings" "testing" "time" ) func Test_Accepts(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "" result := c.Accepts(expect) if c.Accepts() != "" { t.Fatalf(`Expecting %s, got %s`, expect, result) } expect = ".xml" result = c.Accepts(expect) t.Log(result) if result != expect { t.Fatalf(`Expecting %s, got %s`, expect, result) } expect = ".whaaaaat" result = c.Accepts(expect) if result != "" { t.Fatalf(`Expecting %s, got %s`, "", result) } }) req := httptest.NewRequest("GET", "/test", nil) req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9") 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_AcceptsCharsets(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.AcceptsCharsets() expect := "utf-8" result := c.AcceptsCharsets(expect) if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) req.Header.Set("Accept-Charset", "utf-8, iso-8859-1;q=0.5") 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_AcceptsEncodings(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.AcceptsEncodings() expect := "gzip" result := c.AcceptsEncodings(expect) if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) req.Header.Set("Accept-Encoding", "deflate, gzip;q=1.0, *;q=0.5") 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_AcceptsLanguages(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.AcceptsLanguages() expect := "fr" result := c.AcceptsLanguages(expect) if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) req.Header.Set("Accept-Language", "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5") 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_BaseURL(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "http://google.com" result := c.BaseURL() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "http://google.com/test", nil) 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_Body(t *testing.T) { app := New() app.Post("/test", func(c *Ctx) { expect := "john=doe" result := c.Body() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } expect = "doe" result = c.Body("john") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) data := url.Values{} data.Set("john", "doe") req, _ := http.NewRequest("POST", "/test", strings.NewReader(data.Encode())) req.Header.Add("Content-Type", "application/x-www-form-urlencoded") req.Header.Add("Content-Length", strconv.Itoa(len(data.Encode()))) 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_BodyParser(t *testing.T) { app := New() type Demo struct { Name string `json:"name"` } app.Post("/test", func(c *Ctx) { d := new(Demo) err := c.BodyParser(&d) if err != nil { t.Fatalf(`%s: BodyParser %v`, t.Name(), err) } if d.Name != "john" { t.Fatalf(`%s: Expect %s got %s`, t.Name(), "john", d) } }) req := httptest.NewRequest("POST", "/test", bytes.NewBuffer([]byte(`{"name":"john"}`))) req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Length", strconv.Itoa(len([]byte(`{"name":"john"}`)))) _, err := app.Test(req) if err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } } func Test_Cookies(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "john=doe" result := c.Cookies() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } expect = "doe" result = c.Cookies("john") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) req.AddCookie(&http.Cookie{Name: "john", Value: "doe"}) _, err := app.Test(req) if err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } } func Test_FormFile(t *testing.T) { // TODO } func Test_FormValue(t *testing.T) { app := New() app.Post("/test", func(c *Ctx) { expect := "john" result := c.FormValue("name") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) body := &bytes.Buffer{} writer := multipart.NewWriter(body) if err := writer.WriteField("name", "john"); err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } writer.Close() req, _ := http.NewRequest("POST", "/test", body) contentType := fmt.Sprintf("multipart/form-data; boundary=%s", writer.Boundary()) req.Header.Set("Content-Type", contentType) 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_Fresh(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.Fresh() }) req, _ := http.NewRequest("GET", "/test", nil) _, err := app.Test(req) if err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } } func Test_Get(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "utf-8, iso-8859-1;q=0.5" result := c.Get("Accept-Charset") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } expect = "Monster" result = c.Get("referrer") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) req.Header.Set("Accept-Charset", "utf-8, iso-8859-1;q=0.5") req.Header.Set("Referer", "Monster") 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_Hostname(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "google.com" result := c.Hostname() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "http://google.com/test", nil) 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_IP(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "0.0.0.0" result := c.IP() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "http://google.com/test", nil) 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_IPs(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := []string{"0.0.0.0", "1.1.1.1"} result := c.IPs() if result[0] != expect[0] && result[1] != expect[1] { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) req.Header.Set("X-Forwarded-For", "0.0.0.0, 1.1.1.1") 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_Is(t *testing.T) { // app := New() // app.Get("/test", func(c *Ctx) { // c.Is(".json") // expect := true // result := c.Is("html") // if result != expect { // t.Fatalf(`%s: Expecting %v, got %v`, t.Name(), expect, result) // } // }) // req, _ := http.NewRequest("GET", "/test", nil) // req.Header.Set("Content-Type", "text/html") // 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_Locals(t *testing.T) { app := New() app.Use(func(c *Ctx) { c.Locals("john", "doe") c.Next() }) app.Get("/test", func(c *Ctx) { expect := "doe" result := c.Locals("john") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) 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_Method(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "GET" result := c.Method() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) app.Post("/test", func(c *Ctx) { expect := "POST" result := c.Method() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) app.Put("/test", func(c *Ctx) { expect := "PUT" result := c.Method() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) 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) } req, _ = http.NewRequest("POST", "/test", nil) 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) } req, _ = http.NewRequest("PUT", "/test", nil) 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_MultipartForm(t *testing.T) { app := New() app.Post("/test", func(c *Ctx) { expect := "john" result, err := c.MultipartForm() if err != nil { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, err) } if result.Value["name"][0] != expect { t.Fatalf(`%s: Expecting %s, got %v`, t.Name(), expect, result) } }) body := &bytes.Buffer{} writer := multipart.NewWriter(body) if err := writer.WriteField("name", "john"); err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } writer.Close() req, _ := http.NewRequest("POST", "/test", body) contentType := fmt.Sprintf("multipart/form-data; boundary=%s", writer.Boundary()) req.Header.Set("Content-Type", contentType) 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_OriginalURL(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "/test?search=demo" result := c.OriginalURL() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "http://google.com/test?search=demo", nil) 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_Params(t *testing.T) { app := New() app.Get("/test/:user", func(c *Ctx) { expect := "john" result := c.Params("user") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) app.Get("/test2/*", func(c *Ctx) { expect := "im/a/cookie" result := c.Params("*") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test/john", nil) 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) } req, _ = http.NewRequest("GET", "/test2/im/a/cookie", nil) 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_Path(t *testing.T) { app := New() app.Get("/test/:user", func(c *Ctx) { expect := "/test/john" result := c.Path() if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test/john", nil) 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_Query(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "john" result := c.Query("search") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } expect = "20" result = c.Query("age") if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test?search=john&age=20", nil) 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_Range(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { result, err := c.Range(1000) if err != nil { t.Fatalf(`%s: %s`, t.Name(), err) return } expect := "bytes" if result.Type != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result.Type) } expectNum := 500 if result.Ranges[0].Start != expectNum { t.Fatalf(`%s: Expecting %v, got %v`, t.Name(), expectNum, result.Ranges[0].Start) } expectNum = 700 if result.Ranges[0].End != expectNum { t.Fatalf(`%s: Expecting %v, got %v`, t.Name(), expectNum, result.Ranges[0].End) } }) req, _ := http.NewRequest("GET", "/test", nil) req.Header.Set("range", "bytes=500-700") _, err := app.Test(req) if err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } } func Test_Route(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := "/test" result := c.Route().Path if result != expect { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) 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_SaveFile(t *testing.T) { // TODO } func Test_Secure(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := false result := c.Secure() if result != expect { t.Fatalf(`%s: Expecting %v, got %v`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) 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_Stale(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.Stale() }) req, _ := http.NewRequest("GET", "/test", nil) _, err := app.Test(req) if err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } } func Test_Subdomains(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := []string{"john", "doe"} result := c.Subdomains() if result[0] != expect[0] && result[1] != expect[1] { t.Fatalf(`%s: Expecting %s, got %s`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "http://john.doe.google.com/test", nil) 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_XHR(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { expect := true result := c.XHR() if result != expect { t.Fatalf(`%s: Expecting %v, got %v`, t.Name(), expect, result) } }) req, _ := http.NewRequest("GET", "/test", nil) req.Header.Set("X-Requested-With", "XMLHttpRequest") 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_Append(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.Append("X-Test", "hel") c.Append("X-Test", "lo", "world") }) req, _ := http.NewRequest("GET", "/test", nil) 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) } if resp.Header.Get("X-Test") != "hel, lo, world" { t.Fatalf(`%s: Expecting %s`, t.Name(), "X-Test: hel, lo, world") } } func Test_Attachment(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.Attachment() c.Attachment("./static/img/logo.png") }) req, _ := http.NewRequest("GET", "/test", nil) 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) } if resp.Header.Get("Content-Disposition") != `attachment; filename="logo.png"` { t.Fatalf(`%s: Expecting %s`, t.Name(), `attachment; filename="logo.png"`) } if resp.Header.Get("Content-Type") != "image/png" { t.Fatalf(`%s: Expecting %s`, t.Name(), "image/png") } } func Test_ClearCookie(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.ClearCookie() }) app.Get("/test2", func(c *Ctx) { c.ClearCookie("john") }) req, _ := http.NewRequest("GET", "/test", nil) req.AddCookie(&http.Cookie{Name: "john", Value: "doe"}) 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) } if !strings.Contains(resp.Header.Get("Set-Cookie"), "expires=") { t.Fatalf(`%s: Expecting %s`, t.Name(), "expires=") } req, _ = http.NewRequest("GET", "/test2", nil) req.AddCookie(&http.Cookie{Name: "john", Value: "doe"}) 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) } if !strings.Contains(resp.Header.Get("Set-Cookie"), "expires=") { t.Fatalf(`%s: Expecting %s`, t.Name(), "expires=") } } func Test_Cookie(t *testing.T) { app := New() expire := time.Now().Add(24 * time.Hour) var dst []byte dst = expire.In(time.UTC).AppendFormat(dst, time.RFC1123) httpdate := strings.Replace(string(dst), "UTC", "GMT", -1) app.Get("/test", func(c *Ctx) { cookie := new(Cookie) cookie.Name = "username" cookie.Value = "jon" cookie.Expires = expire c.Cookie(cookie) }) req, _ := http.NewRequest("GET", "http://example.com/test", nil) 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) } if !strings.Contains(resp.Header.Get("Set-Cookie"), "username=jon; expires="+string(httpdate)+"; path=/") { t.Fatalf(`%s: Expecting %s`, t.Name(), "username=jon; expires="+string(httpdate)+"; path=/") } } func Test_Download(t *testing.T) { // TODO } func Test_Format(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.Format("Hello, World!") }) app.Get("/test2", func(c *Ctx) { c.Format([]byte("Hello, World!")) c.Format("Hello, World!") }) req, _ := http.NewRequest("GET", "http://example.com/test", nil) req.Header.Set("Accept", "text/html") 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) } body, err := ioutil.ReadAll(resp.Body) if err != nil { t.Fatalf(`%s: Error %s`, t.Name(), err) } if string(body) != "
Hello, World!
" { t.Fatalf(`%s: Expecting %s`, t.Name(), "Hello, World!
") } req, _ = http.NewRequest("GET", "http://example.com/test2", nil) req.Header.Set("Accept", "application/json") 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) } body, err = ioutil.ReadAll(resp.Body) if err != nil { t.Fatalf(`%s: Error %s`, t.Name(), err) } if string(body) != `"Hello, World!"` { t.Fatalf(`%s: Expecting %s`, t.Name(), `"Hello, World!"`) } } func Test_HeadersSent(t *testing.T) { // TODO } func Test_JSON(t *testing.T) { type SomeStruct struct { Name string Age uint8 } app := New() app.Get("/test", func(c *Ctx) { if err := c.JSON(""); err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } data := SomeStruct{ Name: "Grame", Age: 20, } if err := c.JSON(data); err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } }) req, _ := http.NewRequest("GET", "http://example.com/test", nil) 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) } if resp.Header.Get("Content-Type") != "application/json" { t.Fatalf(`%s: Expecting %s`, t.Name(), "application/json") } body, err := ioutil.ReadAll(resp.Body) if err != nil { t.Fatalf(`%s: Error %s`, t.Name(), err) } if string(body) != `{"Name":"Grame","Age":20}` { t.Fatalf(`%s: Expecting %s`, t.Name(), `{"Name":"Grame","Age":20}`) } } func Test_JSONP(t *testing.T) { type SomeStruct struct { Name string Age uint8 } app := New() app.Get("/test", func(c *Ctx) { if err := c.JSONP(""); err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } data := SomeStruct{ Name: "Grame", Age: 20, } if err := c.JSONP(data, "alwaysjohn"); err != nil { t.Fatalf(`%s: %s`, t.Name(), err) } }) req, _ := http.NewRequest("GET", "http://example.com/test", nil) 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) } if resp.Header.Get("Content-Type") != "application/javascript" { t.Fatalf(`%s: Expecting %s`, t.Name(), "application/javascript") } body, err := ioutil.ReadAll(resp.Body) if err != nil { t.Fatalf(`%s: Error %s`, t.Name(), err) } if string(body) != `alwaysjohn({"Name":"Grame","Age":20});` { t.Fatalf(`%s: Expecting %s`, t.Name(), `alwaysjohn({"Name":"Grame","Age":20});`) } } func Test_Links(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.Links( "http://api.example.com/users?page=2", "next", "http://api.example.com/users?page=5", "last", ) }) req, _ := http.NewRequest("GET", "http://example.com/test", nil) 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) } if resp.Header.Get("Link") != `