From 291fb6e444e8c6d058fd7d27a7c96e4b869d6b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Efe=20=C3=87etin?= Date: Sun, 20 Nov 2022 16:26:42 +0300 Subject: [PATCH] :bug: bug: fix mounting when mount prefix is `/` (#2227) --- mount.go | 16 ++++++++++------ mount_test.go | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/mount.go b/mount.go index f7df3a97e6..abb4a73930 100644 --- a/mount.go +++ b/mount.go @@ -44,8 +44,10 @@ func (app *App) Mount(prefix string, fiber *App) Router { // Support for configs of mounted-apps and sub-mounted-apps for mountedPrefixes, subApp := range fiber.mountFields.appList { - subApp.mountFields.mountPath = prefix + mountedPrefixes - app.mountFields.appList[prefix+mountedPrefixes] = subApp + path := getGroupPath(prefix, mountedPrefixes) + + subApp.mountFields.mountPath = path + app.mountFields.appList[path] = subApp } // Execute onMount hooks @@ -68,8 +70,10 @@ func (grp *Group) Mount(prefix string, fiber *App) Router { // Support for configs of mounted-apps and sub-mounted-apps for mountedPrefixes, subApp := range fiber.mountFields.appList { - subApp.mountFields.mountPath = groupPath + mountedPrefixes - grp.app.mountFields.appList[groupPath+mountedPrefixes] = subApp + path := getGroupPath(groupPath, mountedPrefixes) + + subApp.mountFields.mountPath = path + grp.app.mountFields.appList[path] = subApp } // Execute onMount hooks @@ -105,7 +109,7 @@ func (app *App) appendSubAppLists(appList map[string]*App, parent ...string) { } if len(parent) > 0 { - prefix = parent[0] + prefix + prefix = getGroupPath(parent[0], prefix) } if _, ok := app.mountFields.appList[prefix]; !ok { @@ -129,7 +133,7 @@ func (app *App) addSubAppsRoutes(appList map[string]*App, parent ...string) { } if len(parent) > 0 { - prefix = parent[0] + prefix + prefix = getGroupPath(parent[0], prefix) } // add routes diff --git a/mount_test.go b/mount_test.go index 1e944d09ba..d53ea06214 100644 --- a/mount_test.go +++ b/mount_test.go @@ -29,6 +29,25 @@ func Test_App_Mount(t *testing.T) { utils.AssertEqual(t, uint32(2), app.handlersCount) } +func Test_App_Mount_RootPath_Nested(t *testing.T) { + app := New() + dynamic := New() + apiserver := New() + + apiroutes := apiserver.Group("/v1") + apiroutes.Get("/home", func(c *Ctx) error { + return c.SendString("home") + }) + + dynamic.Mount("/api", apiserver) + app.Mount("/", dynamic) + + resp, err := app.Test(httptest.NewRequest(MethodGet, "/api/v1/home", nil)) + utils.AssertEqual(t, nil, err, "app.Test(req)") + utils.AssertEqual(t, 200, resp.StatusCode, "Status code") + utils.AssertEqual(t, uint32(2), app.handlersCount) +} + // go test -run Test_App_Mount_Nested func Test_App_Mount_Nested(t *testing.T) { app := New()