From 1dc9a5e19e355a6be514e52c8faf1330842bbf5f Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Sat, 21 Oct 2023 15:46:19 +0300 Subject: [PATCH 1/5] :bug: bug: fix route naming issue when using same path for different methods --- app.go | 6 +++++- app_test.go | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app.go b/app.go index cc43e95a77..c0d28e065a 100644 --- a/app.go +++ b/app.go @@ -620,7 +620,11 @@ func (app *App) Name(name string) Router { for _, routes := range app.stack { for _, route := range routes { - if route.Path == app.latestRoute.Path { + isMethodValid := route.Method == app.latestRoute.Method || app.latestRoute.use || + (app.latestRoute.Method == MethodGet && route.Method == MethodHead) + + if route.Path == app.latestRoute.Path && isMethodValid { + route.Name = name if route.group != nil { diff --git a/app_test.go b/app_test.go index d0acc68c6c..6ba25912be 100644 --- a/app_test.go +++ b/app_test.go @@ -1859,7 +1859,7 @@ func Test_Middleware_Route_Naming_With_Use(t *testing.T) { } } -func Test_Route_Naming_Issue_2671(t *testing.T) { +func Test_Route_Naming_Issue_2671_2685(t *testing.T) { app := New() app.Get("/", emptyHandler).Name("index") @@ -1904,4 +1904,22 @@ func Test_Route_Naming_Issue_2671(t *testing.T) { postGroup.Post("", emptyHandler).Name("post.update") utils.AssertEqual(t, "/post/:postId", app.GetRoute("post.update").Path) + + app.Get("/users", nil).Name("get-users") + app.Post("/users", nil).Name("add-user") + getUsers := app.GetRoute("get-users") + utils.AssertEqual(t, getUsers.Path, "/users") + + addUser := app.GetRoute("add-user") + utils.AssertEqual(t, addUser.Path, "/users") + + newGrp := app.Group("/name-test") + + newGrp.Get("/users", nil).Name("get-users") + newGrp.Post("/users", nil).Name("add-user") + getUsers = app.GetRoute("get-users") + utils.AssertEqual(t, getUsers.Path, "/users") + + addUser = app.GetRoute("add-user") + utils.AssertEqual(t, addUser.Path, "/users") } From f09fc5b7d0de8d0ece46ee6b23e7471ba3277b74 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Sat, 21 Oct 2023 15:56:50 +0300 Subject: [PATCH 2/5] fix linter --- app.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/app.go b/app.go index c0d28e065a..ebf1025167 100644 --- a/app.go +++ b/app.go @@ -624,9 +624,7 @@ func (app *App) Name(name string) Router { (app.latestRoute.Method == MethodGet && route.Method == MethodHead) if route.Path == app.latestRoute.Path && isMethodValid { - route.Name = name - if route.group != nil { route.Name = route.group.name + route.Name } From 6840d40e008c1ab2a78a60fa67dda638c3bb1dd0 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Sat, 21 Oct 2023 16:02:09 +0300 Subject: [PATCH 3/5] add new testcase for HEAD route --- app_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app_test.go b/app_test.go index 6ba25912be..4bd24659ff 100644 --- a/app_test.go +++ b/app_test.go @@ -1922,4 +1922,13 @@ func Test_Route_Naming_Issue_2671_2685(t *testing.T) { addUser = app.GetRoute("add-user") utils.AssertEqual(t, addUser.Path, "/users") + + app.Get("/simple-route", emptyHandler).Name("simple-route") + app.Head("/simple-route", emptyHandler).Name("simple-route2") + + sRoute := app.GetRoute("simple-route") + utils.AssertEqual(t, sRoute.Path, "/simple-route") + + sRoute2 := app.GetRoute("simple-route2") + utils.AssertEqual(t, sRoute2.Path, "/simple-route") } From 2bbfcef159f0a2be11cbff55393967542279af3f Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Sun, 22 Oct 2023 13:34:41 +0300 Subject: [PATCH 4/5] add comments to tests --- app_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app_test.go b/app_test.go index 4bd24659ff..7a1c1bb94b 100644 --- a/app_test.go +++ b/app_test.go @@ -1905,6 +1905,7 @@ func Test_Route_Naming_Issue_2671_2685(t *testing.T) { postGroup.Post("", emptyHandler).Name("post.update") utils.AssertEqual(t, "/post/:postId", app.GetRoute("post.update").Path) + // Add testcase for routes use the same PATH on different methods app.Get("/users", nil).Name("get-users") app.Post("/users", nil).Name("add-user") getUsers := app.GetRoute("get-users") @@ -1913,8 +1914,8 @@ func Test_Route_Naming_Issue_2671_2685(t *testing.T) { addUser := app.GetRoute("add-user") utils.AssertEqual(t, addUser.Path, "/users") + // Add testcase for routes use the same PATH on different methods (for groups) newGrp := app.Group("/name-test") - newGrp.Get("/users", nil).Name("get-users") newGrp.Post("/users", nil).Name("add-user") getUsers = app.GetRoute("get-users") @@ -1923,6 +1924,7 @@ func Test_Route_Naming_Issue_2671_2685(t *testing.T) { addUser = app.GetRoute("add-user") utils.AssertEqual(t, addUser.Path, "/users") + // Add testcase for HEAD route naming app.Get("/simple-route", emptyHandler).Name("simple-route") app.Head("/simple-route", emptyHandler).Name("simple-route2") From 0a8273449bea30ad9843f5998219856f91044e43 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Sun, 22 Oct 2023 21:05:25 +0300 Subject: [PATCH 5/5] fix tests --- app_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app_test.go b/app_test.go index 7a1c1bb94b..f650d52a97 100644 --- a/app_test.go +++ b/app_test.go @@ -1916,13 +1916,13 @@ func Test_Route_Naming_Issue_2671_2685(t *testing.T) { // Add testcase for routes use the same PATH on different methods (for groups) newGrp := app.Group("/name-test") - newGrp.Get("/users", nil).Name("get-users") - newGrp.Post("/users", nil).Name("add-user") - getUsers = app.GetRoute("get-users") - utils.AssertEqual(t, getUsers.Path, "/users") + newGrp.Get("/users", nil).Name("grp-get-users") + newGrp.Post("/users", nil).Name("grp-add-user") + getUsers = app.GetRoute("grp-get-users") + utils.AssertEqual(t, getUsers.Path, "/name-test/users") - addUser = app.GetRoute("add-user") - utils.AssertEqual(t, addUser.Path, "/users") + addUser = app.GetRoute("grp-add-user") + utils.AssertEqual(t, addUser.Path, "/name-test/users") // Add testcase for HEAD route naming app.Get("/simple-route", emptyHandler).Name("simple-route")