2018-02-21 10:27:01 +01:00
|
|
|
package router_test
|
|
|
|
|
|
|
|
import (
|
2020-04-25 01:30:19 +02:00
|
|
|
"net/http"
|
|
|
|
"strings"
|
2018-02-21 10:27:01 +01:00
|
|
|
"testing"
|
|
|
|
|
2019-10-25 00:27:02 +02:00
|
|
|
"github.com/kataras/iris/v12"
|
|
|
|
"github.com/kataras/iris/v12/context"
|
|
|
|
"github.com/kataras/iris/v12/httptest"
|
2018-02-21 10:27:01 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestRouteExists(t *testing.T) {
|
|
|
|
// build the api
|
|
|
|
app := iris.New()
|
2020-07-10 22:21:09 +02:00
|
|
|
emptyHandler := func(*context.Context) {}
|
2018-02-21 10:27:01 +01:00
|
|
|
|
|
|
|
// setup the tested routes
|
|
|
|
app.Handle("GET", "/route-exists", emptyHandler)
|
|
|
|
app.Handle("POST", "/route-with-param/{param}", emptyHandler)
|
|
|
|
|
|
|
|
// check RouteExists
|
2020-07-10 22:21:09 +02:00
|
|
|
app.Handle("GET", "/route-test", func(ctx *context.Context) {
|
2018-02-21 10:27:01 +01:00
|
|
|
if ctx.RouteExists("GET", "/route-not-exists") {
|
|
|
|
t.Error("Route with path should not exists")
|
|
|
|
}
|
|
|
|
|
|
|
|
if ctx.RouteExists("POST", "/route-exists") {
|
|
|
|
t.Error("Route with method should not exists")
|
|
|
|
}
|
|
|
|
|
|
|
|
if !ctx.RouteExists("GET", "/route-exists") {
|
|
|
|
t.Error("Route 1 should exists")
|
|
|
|
}
|
|
|
|
|
|
|
|
if !ctx.RouteExists("POST", "/route-with-param/a-param") {
|
|
|
|
t.Error("Route 2 should exists")
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
// run the tests
|
|
|
|
httptest.New(t, app, httptest.Debug(false)).Request("GET", "/route-test").Expect().Status(iris.StatusOK)
|
|
|
|
}
|
2020-04-25 01:30:19 +02:00
|
|
|
|
|
|
|
func TestLowercaseRouting(t *testing.T) {
|
|
|
|
app := iris.New()
|
|
|
|
app.WrapRouter(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
|
|
|
|
// test bottom to begin wrapper, the last ones should execute first.
|
|
|
|
// The ones that are registered at `Build` state, after this `WrapRouter` call.
|
|
|
|
// So path should be already lowecased.
|
|
|
|
if expected, got := strings.ToLower(r.URL.Path), r.URL.Path; expected != got {
|
|
|
|
t.Fatalf("expected path: %s but got: %s", expected, got)
|
|
|
|
}
|
|
|
|
next(w, r)
|
|
|
|
})
|
|
|
|
|
|
|
|
h := func(ctx iris.Context) { ctx.WriteString(ctx.Path()) }
|
|
|
|
|
|
|
|
// Register routes.
|
|
|
|
tests := []string{"/", "/lowercase", "/UPPERCASE", "/Title", "/m1xEd2"}
|
|
|
|
for _, tt := range tests {
|
|
|
|
app.Get(tt, h)
|
|
|
|
}
|
|
|
|
|
|
|
|
app.Configure(iris.WithLowercaseRouting)
|
|
|
|
// Test routes.
|
|
|
|
e := httptest.New(t, app)
|
|
|
|
for _, tt := range tests {
|
|
|
|
s := strings.ToLower(tt)
|
|
|
|
e.GET(tt).Expect().Status(httptest.StatusOK).Body().Equal(s)
|
|
|
|
e.GET(s).Expect().Status(httptest.StatusOK).Body().Equal(s)
|
|
|
|
e.GET(strings.ToUpper(tt)).Expect().Status(httptest.StatusOK).Body().Equal(s)
|
|
|
|
}
|
|
|
|
}
|