Browse Source

Changes the tests into a subtest structure(#515)

pull/517/head
RaviKiran Kilingar 5 years ago
parent
commit
53dfa85261
No known key found for this signature in database
GPG Key ID: 47D29311AEB6F0A7
  1. 155
      mux_test.go

155
mux_test.go

@ -2841,32 +2841,147 @@ func testOptionsMiddleWare(inner http.Handler) http.Handler {
// TestRouterOrder Should Pass whichever order route is defined // TestRouterOrder Should Pass whichever order route is defined
func TestRouterOrder(t *testing.T) { func TestRouterOrder(t *testing.T) {
handler := func(w http.ResponseWriter, r *http.Request) {} type requestCase struct {
router := NewRouter() request *http.Request
router.Path("/a/b").Handler(http.HandlerFunc(handler)).Methods(http.MethodGet) expCode int
router.Path("/a/{a}").Handler(nil).Methods(http.MethodOptions) }
router.Use(MiddlewareFunc(testOptionsMiddleWare))
w := NewRecorder()
req := newRequest(http.MethodOptions, "/a/b")
router.ServeHTTP(w, req)
if w.Code != http.StatusOK { tests := []struct {
t.Fatalf("Expected status code 200 (got %d)", w.Code) name string
routes []*Route
customMiddleware MiddlewareFunc
requests []requestCase
}{
{
name: "Routes added with same method and intersecting path regex",
routes: []*Route{
new(Route).Path("/a/b").Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
})).Methods(http.MethodGet),
new(Route).Path("/a/{a}").Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})).Methods(http.MethodGet),
},
requests: []requestCase{
{
request: newRequest(http.MethodGet, "/a/b"),
expCode: http.StatusNotFound,
},
{
request: newRequest(http.MethodGet, "/a/a"),
expCode: http.StatusOK,
},
},
},
{
name: "Routes added with same method and intersecting path regex, path with pathVariable first",
routes: []*Route{
new(Route).Path("/a/{a}").Handler(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})).Methods(http.MethodGet),
new(Route).Path("/a/b").Handler(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
})).Methods(http.MethodGet),
},
requests: []requestCase{
{
request: newRequest(http.MethodGet, "/a/b"),
expCode: http.StatusOK,
},
{
request: newRequest(http.MethodGet, "/a/a"),
expCode: http.StatusOK,
},
},
},
{
name: "Routes added same path - different methods, no path variables",
routes: []*Route{
new(Route).Path("/a/b").Handler(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})).Methods(http.MethodGet),
new(Route).Path("/a/b").Handler(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
})).Methods(http.MethodOptions),
},
requests: []requestCase{
{
request: newRequest(http.MethodGet, "/a/b"),
expCode: http.StatusOK,
},
{
request: newRequest(http.MethodOptions, "/a/b"),
expCode: http.StatusNotFound,
},
},
},
{
name: "Routes added same path - different methods, with path variables and middleware",
routes: []*Route{
new(Route).Path("/a/{a}").Handler(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
})).Methods(http.MethodGet),
new(Route).Path("/a/b").Handler(nil).Methods(http.MethodOptions),
},
customMiddleware: testOptionsMiddleWare,
requests: []requestCase{
{
request: newRequest(http.MethodGet, "/a/b"),
expCode: http.StatusNotFound,
},
{
request: newRequest(http.MethodOptions, "/a/b"),
expCode: http.StatusOK,
},
},
},
{
name: "Routes added same path - different methods, with path variables and middleware order reversed",
routes: []*Route{
new(Route).Path("/a/b").Handler(nil).Methods(http.MethodOptions),
new(Route).Path("/a/{a}").Handler(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
})).Methods(http.MethodGet),
},
customMiddleware: testOptionsMiddleWare,
requests: []requestCase{
{
request: newRequest(http.MethodGet, "/a/b"),
expCode: http.StatusNotFound,
},
{
request: newRequest(http.MethodOptions, "/a/b"),
expCode: http.StatusOK,
},
},
},
} }
reversedPathRouter := NewRouter() for _, test := range tests {
reversedPathRouter.Path("/a/{a}").Handler(http.HandlerFunc(handler)).Methods(http.MethodGet) t.Run(test.name, func(t *testing.T) {
reversedPathRouter.Path("/a/b").Handler(nil).Methods(http.MethodOptions) router := NewRouter()
reversedPathRouter.Use(MiddlewareFunc(testOptionsMiddleWare))
w = NewRecorder() if test.customMiddleware != nil {
router.Use(test.customMiddleware)
}
router.routes = test.routes
w := NewRecorder()
reversedPathRouter.ServeHTTP(w, req) for _, requestCase := range test.requests {
router.ServeHTTP(w, requestCase.request)
if w.Code != http.StatusOK { if w.Code != requestCase.expCode {
t.Fatalf("Expected status code 200 (got %d)", w.Code) t.Fatalf("Expected status code %d (got %d)", requestCase.expCode, w.Code)
}
}
})
} }
} }

Loading…
Cancel
Save