Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions middleware/idempotency/response_msgp.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions middleware/idempotency/response_msgp_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions mount.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,11 @@ func (app *App) Mount(prefix string, subApp *App) Router {
}

// Support for configs of mounted-apps and sub-mounted-apps
for mountedPrefixes, subApp := range subApp.mountFields.appList {
for mountedPrefixes, mountedApp := range subApp.mountFields.appList {
path := getGroupPath(prefix, mountedPrefixes)

subApp.mountFields.mountPath = path
app.mountFields.appList[path] = subApp
mountedApp.mountFields.mountPath = path
app.mountFields.appList[path] = mountedApp
}

// register mounted group
Expand All @@ -75,11 +75,11 @@ func (grp *Group) Mount(prefix string, subApp *App) Router {
}

// Support for configs of mounted-apps and sub-mounted-apps
for mountedPrefixes, subApp := range subApp.mountFields.appList {
for mountedPrefixes, mountedApp := range subApp.mountFields.appList {
path := getGroupPath(groupPath, mountedPrefixes)

subApp.mountFields.mountPath = path
grp.app.mountFields.appList[path] = subApp
mountedApp.mountFields.mountPath = path
grp.app.mountFields.appList[path] = mountedApp
}

// register mounted group
Expand Down
97 changes: 97 additions & 0 deletions mount_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,103 @@ func Test_App_Mount_Nested(t *testing.T) {
utils.AssertEqual(t, uint32(6), app.handlersCount)
}

func Test_App_Mount_NestedHooks(t *testing.T) {
t.Parallel()

app := New()
child := New()
grandchild := New()

var childParent *App
child.Hooks().OnMount(func(parent *App) error {
childParent = parent
return nil
})

var grandchildParent *App
grandchild.Hooks().OnMount(func(parent *App) error {
grandchildParent = parent
return nil
})

child.Get("/child", func(c *Ctx) error {
return c.SendString("child")
})

grandchild.Get("/grandchild", func(c *Ctx) error {
return c.SendString("grandchild")
})

child.Mount("/grandchild", grandchild)
app.Mount("/child", child)

resp, err := app.Test(httptest.NewRequest(MethodGet, "/child/child", http.NoBody))
utils.AssertEqual(t, nil, err, "app.Test(req)")
body, err := io.ReadAll(resp.Body)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, StatusOK, resp.StatusCode, "Status code")
utils.AssertEqual(t, "child", string(body))

resp, err = app.Test(httptest.NewRequest(MethodGet, "/child/grandchild/grandchild", http.NoBody))
utils.AssertEqual(t, nil, err, "app.Test(req)")
body, err = io.ReadAll(resp.Body)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, StatusOK, resp.StatusCode, "Status code")
utils.AssertEqual(t, "grandchild", string(body))
Comment thread
gaby marked this conversation as resolved.

utils.AssertEqual(t, app, childParent)
utils.AssertEqual(t, child, grandchildParent)
}

func Test_Group_Mount_NestedHooks(t *testing.T) {
t.Parallel()

app := New()
group := app.Group("/api")
child := New()
grandchild := New()

var childParent *App
child.Hooks().OnMount(func(parent *App) error {
childParent = parent
return nil
})

var grandchildParent *App
grandchild.Hooks().OnMount(func(parent *App) error {
grandchildParent = parent
return nil
})

child.Get("/child", func(c *Ctx) error {
return c.SendString("child")
})

grandchild.Get("/grandchild", func(c *Ctx) error {
return c.SendString("grandchild")
})

child.Mount("/grandchild", grandchild)
group.Mount("/child", child)

resp, err := app.Test(httptest.NewRequest(MethodGet, "/api/child/child", http.NoBody))
utils.AssertEqual(t, nil, err, "app.Test(req)")
body, err := io.ReadAll(resp.Body)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, StatusOK, resp.StatusCode, "Status code")
utils.AssertEqual(t, "child", string(body))

resp, err = app.Test(httptest.NewRequest(MethodGet, "/api/child/grandchild/grandchild", http.NoBody))
utils.AssertEqual(t, nil, err, "app.Test(req)")
body, err = io.ReadAll(resp.Body)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, StatusOK, resp.StatusCode, "Status code")
utils.AssertEqual(t, "grandchild", string(body))
Comment thread
gaby marked this conversation as resolved.

utils.AssertEqual(t, app, childParent)
utils.AssertEqual(t, child, grandchildParent)
}

// go test -run Test_App_Mount_Express_Behavior
func Test_App_Mount_Express_Behavior(t *testing.T) {
t.Parallel()
Expand Down
Loading