package router_test import ( "net/http" "strings" "testing" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/context" "github.com/kataras/iris/v12/httptest" ) func TestRouteExists(t *testing.T) { // build the api app := iris.New() emptyHandler := func(*context.Context) {} // setup the tested routes app.Handle("GET", "/route-exists", emptyHandler) app.Handle("POST", "/route-with-param/{param}", emptyHandler) // check RouteExists app.Handle("GET", "/route-test", func(ctx *context.Context) { 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) } 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) } }