Skip to content

Commit

Permalink
🐛 bug: fix mounting when mount prefix is / (#2227)
Browse files Browse the repository at this point in the history
  • Loading branch information
efectn committed Nov 20, 2022
1 parent 82db296 commit 291fb6e
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 6 deletions.
16 changes: 10 additions & 6 deletions mount.go
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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 {
Expand All @@ -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
Expand Down
19 changes: 19 additions & 0 deletions mount_test.go
Expand Up @@ -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()
Expand Down

0 comments on commit 291fb6e

Please sign in to comment.