You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
r.Match(chi.NewRouteContext(), http.MethodGet, "/path") to be false, and
r.Match(chi.NewRouteContext(), http.MethodGet, "/path/all") to be true
however, the first case is true.
For what it's worth, the contents of the inner subrouter don't appear to matter, so:
r := chi.NewRouter()
r.Route("/path", func(chi.Router){})
shows the same behaviour in the "/path" case.
As noted this is surprising to me; I would expect no match to occur unless a final handler has been configured (Get(...), Post(...) etc).
Below is a more elaborate test setup:
package routing
import (
"net/http"
"testing"
"github.com/go-chi/chi/v5"
)
func TestWithAll(t *testing.T) {
r := chi.NewRouter()
r.Route("/path", func(r chi.Router) {
r.Group(func(r chi.Router) {
r.Get("/all", nil)
})
})
assert(t, !r.Match(chi.NewRouteContext(), http.MethodGet, "/path"), "GET /path should not be matched")
assert(t, !r.Match(chi.NewRouteContext(), http.MethodPost, "/path"), "POST /path should not be matched")
assert(t, !r.Match(chi.NewRouteContext(), http.MethodPut, "/path"), "PUT /path should not be matched")
assert(t, !r.Match(chi.NewRouteContext(), http.MethodDelete, "/path"), "DELETE /path should not be matched")
assert(t, r.Match(chi.NewRouteContext(), http.MethodGet, "/path/all"), "GET /path/all should be matched")
}
func TestWithoutAll(t *testing.T) {
r := chi.NewRouter()
r.Route("/path", func(chi.Router){})
assert(t, !r.Match(chi.NewRouteContext(), http.MethodGet, "/path"), "GET /path should not be matched")
assert(t, !r.Match(chi.NewRouteContext(), http.MethodPost, "/path"), "POST /path should not be matched")
assert(t, !r.Match(chi.NewRouteContext(), http.MethodPut, "/path"), "PUT /path should not be matched")
assert(t, !r.Match(chi.NewRouteContext(), http.MethodDelete, "/path"), "DELETE /path should not be matched")
}
func assert(t *testing.T, condition bool, message string) {
if !condition {
t.Errorf(message)
}
}
The text was updated successfully, but these errors were encountered:
If I add a subrouter using
Route
, callingMatch
with the same pattern and any method shows a (what I would consider) false positive. For example:I would expect:
r.Match(chi.NewRouteContext(), http.MethodGet, "/path")
to be false, andr.Match(chi.NewRouteContext(), http.MethodGet, "/path/all")
to be truehowever, the first case is true.
For what it's worth, the contents of the inner subrouter don't appear to matter, so:
shows the same behaviour in the "/path" case.
As noted this is surprising to me; I would expect no match to occur unless a final handler has been configured (
Get(...)
,Post(...)
etc).Below is a more elaborate test setup:
The text was updated successfully, but these errors were encountered: