Add a httptest simple example, I'm thinking to obselete the gitbook entirely, the feature/_example folder is easier for the users

Former-commit-id: 6d4143e63838164a6b1bf1184b0c86a6b3fe15cd
This commit is contained in:
Gerasimos (Makis) Maropoulos 2017-02-17 01:34:45 +02:00
parent fa5b529634
commit bfeabbd74e
4 changed files with 83 additions and 11 deletions

View File

@ -116,8 +116,8 @@ package main
import ( import (
"gopkg.in/kataras/iris.v6" "gopkg.in/kataras/iris.v6"
"gopkg.in/kataras/iris.v6/adaptors/httprouter"
"gopkg.in/kataras/iris.v6/adaptors/view" "gopkg.in/kataras/iris.v6/adaptors/view"
"gopkg.in/kataras/iris.v6/adaptors/httprouter"
) )
func main() { func main() {
@ -208,9 +208,8 @@ Testing
You can find RESTFUL test examples by navigating to the following links: You can find RESTFUL test examples by navigating to the following links:
- [gavv/_examples/iris_test.go](https://github.com/gavv/httpexpect/blob/master/_examples/iris_test.go). - [gavv/_examples/iris_test.go](https://github.com/gavv/httpexpect/blob/master/_examples/iris_test.go)
- [./http_test.go](https://github.com/kataras/iris/blob/v6/http_test.go). - [./httptest/_example/main_test.go](https://github.com/kataras/iris/blob/v6/httptest/_example/main_test.go)
- [./context_test.go](https://github.com/kataras/iris/blob/v6/context_test.go).
FAQ FAQ

41
httptest/_example/main.go Normal file
View File

@ -0,0 +1,41 @@
package main
import (
"gopkg.in/kataras/iris.v6"
"gopkg.in/kataras/iris.v6/adaptors/httprouter"
"gopkg.in/kataras/iris.v6/adaptors/sessions"
)
func newApp() *iris.Framework {
app := iris.New()
app.Adapt(httprouter.New())
app.Adapt(sessions.New(sessions.Config{Cookie: "mysessionid"}))
app.Get("/hello", func(ctx *iris.Context) {
sess := ctx.Session()
if !sess.HasFlash() /* or sess.GetFlash("name") == "", same thing here */ {
ctx.HTML(iris.StatusUnauthorized, "<h1> Unauthorized Page! </h1>")
return
}
ctx.JSON(iris.StatusOK, iris.Map{
"Message": "Hello",
"From": sess.GetFlash("name"),
})
})
app.Post("/login", func(ctx *iris.Context) {
sess := ctx.Session()
if !sess.HasFlash() {
sess.SetFlash("name", ctx.FormValue("name"))
}
// let's no redirect, just set the flash message, nothing more.
})
return app
}
func main() {
app := newApp()
app.Listen(":8080")
}

View File

@ -0,0 +1,32 @@
package main
import (
"testing"
"gopkg.in/kataras/iris.v6/httptest"
)
// $ cd _example
// $ go test -v
func TestNewApp(t *testing.T) {
app := newApp()
e := httptest.New(app, t)
// test nauthorized
e.GET("/hello").Expect().Status(401).Body().Equal("<h1> Unauthorized Page! </h1>")
// test our login flash message
name := "myname"
e.POST("/login").WithFormField("name", name).Expect().Status(200)
// test the /hello again with the flash (a message which deletes itself after it has been shown to the user)
// setted on /login previously.
expectedResponse := map[string]interface{}{
"Message": "Hello",
"From": name,
}
e.GET("/hello").Expect().Status(200).JSON().Equal(expectedResponse)
// test /hello nauthorized again, it should be return 401 now (flash should be removed)
e.GET("/hello").Expect().Status(401).Body().Equal("<h1> Unauthorized Page! </h1>")
}
// for advanced test examples navigate there:
// https://github.com/gavv/httpexpect/blob/master/_examples/iris_test.go

View File

@ -63,7 +63,7 @@ func DefaultConfiguration() *Configuration {
return &Configuration{ExplicitURL: false, Debug: false} return &Configuration{ExplicitURL: false, Debug: false}
} }
// New Prepares and returns a new test framework based on the api // New Prepares and returns a new test framework based on the app
// is useful when you need to have more than one test framework for the same iris instance // is useful when you need to have more than one test framework for the same iris instance
// usage: // usage:
// iris.Default.Get("/mypath", func(ctx *iris.Context){ctx.Write("my body")}) // iris.Default.Get("/mypath", func(ctx *iris.Context){ctx.Write("my body")})
@ -72,19 +72,19 @@ func DefaultConfiguration() *Configuration {
// e.GET("/mypath").Expect().Status(iris.StatusOK).Body().Equal("my body") // e.GET("/mypath").Expect().Status(iris.StatusOK).Body().Equal("my body")
// //
// You can find example on the https://github.com/kataras/iris/glob/master/context_test.go // You can find example on the https://github.com/kataras/iris/glob/master/context_test.go
func New(api *iris.Framework, t *testing.T, setters ...OptionSetter) *httpexpect.Expect { func New(app *iris.Framework, t *testing.T, setters ...OptionSetter) *httpexpect.Expect {
conf := DefaultConfiguration() conf := DefaultConfiguration()
for _, setter := range setters { for _, setter := range setters {
setter.Set(conf) setter.Set(conf)
} }
api.Set(iris.OptionDisableBanner(true)) app.Set(iris.OptionDisableBanner(true))
api.Adapt(iris.DevLogger()) app.Adapt(iris.DevLogger())
baseURL := "" baseURL := ""
api.Boot() app.Boot()
if !conf.ExplicitURL { if !conf.ExplicitURL {
baseURL = api.Config.VScheme + api.Config.VHost baseURL = app.Config.VScheme + app.Config.VHost
// if it's still empty then set it to the default server addr // if it's still empty then set it to the default server addr
if baseURL == "" { if baseURL == "" {
baseURL = iris.SchemeHTTP + iris.DefaultServerAddr baseURL = iris.SchemeHTTP + iris.DefaultServerAddr
@ -95,7 +95,7 @@ func New(api *iris.Framework, t *testing.T, setters ...OptionSetter) *httpexpect
testConfiguration := httpexpect.Config{ testConfiguration := httpexpect.Config{
BaseURL: baseURL, BaseURL: baseURL,
Client: &http.Client{ Client: &http.Client{
Transport: httpexpect.NewBinder(api), Transport: httpexpect.NewBinder(app),
Jar: httpexpect.NewJar(), Jar: httpexpect.NewJar(),
}, },
Reporter: httpexpect.NewAssertReporter(t), Reporter: httpexpect.NewAssertReporter(t),