package fiber import ( "io/ioutil" "net/http" "strings" "testing" ) 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() app.Get("/test", func(c *Ctx) { options := &Cookie{ MaxAge: 60, Domain: "example.com", Path: "/", HTTPOnly: true, Secure: false, SameSite: "lax", } c.Cookie("name", "john", options) }) 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"), "name=john; max-age=60; domain=example.com; path=/; HttpOnly; SameSite=Lax") { t.Fatalf(`%s: Expecting %s`, t.Name(), "name=john; max-age=60; domain=example.com; path=/; HttpOnly; SameSite=Lax") } } 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) } 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_JSONBytes(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.JsonBytes([]byte("")) c.JSONBytes([]byte(`{"Name":"Grame","Age":20}`)) }) 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) } 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_JSONString(t *testing.T) { app := New() app.Get("/test", func(c *Ctx) { c.JsonString("") c.JSONString(`{"Name":"Grame","Age":20}`) }) 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_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") != `