diff --git a/routers/web/explore/org.go b/routers/web/explore/org.go index 7178630b64..d13271ae53 100644 --- a/routers/web/explore/org.go +++ b/routers/web/explore/org.go @@ -39,7 +39,11 @@ func Organizations(ctx *context.Context) { ) sortOrder := ctx.FormString("sort") if sortOrder == "" { - sortOrder = "newest" + if supportedSortOrders.Contains(setting.UI.ExploreDefaultSort) { + sortOrder = setting.UI.ExploreDefaultSort + } else { + sortOrder = "newest" + } ctx.SetFormString("sort", sortOrder) } diff --git a/routers/web/explore/user.go b/routers/web/explore/user.go index 6f2683b5da..241e5f61a1 100644 --- a/routers/web/explore/user.go +++ b/routers/web/explore/user.go @@ -151,7 +151,11 @@ func Users(ctx *context.Context) { ) sortOrder := ctx.FormString("sort") if sortOrder == "" { - sortOrder = "newest" + if supportedSortOrders.Contains(setting.UI.ExploreDefaultSort) { + sortOrder = setting.UI.ExploreDefaultSort + } else { + sortOrder = "newest" + } ctx.SetFormString("sort", sortOrder) } diff --git a/tests/integration/explore_org_test.go b/tests/integration/explore_org_test.go new file mode 100644 index 0000000000..e0c48ccf0d --- /dev/null +++ b/tests/integration/explore_org_test.go @@ -0,0 +1,49 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package integration + +import ( + "net/http" + "testing" + + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/tests" + + "github.com/stretchr/testify/assert" +) + +func TestExploreOrg(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + // Set the default sort order + defer test.MockVariableValue(&setting.UI.ExploreDefaultSort, "alphabetically")() + + cases := []struct{ sortOrder, expected string }{ + {"", "?sort=" + setting.UI.ExploreDefaultSort + "&q="}, + {"newest", "?sort=newest&q="}, + {"oldest", "?sort=oldest&q="}, + {"alphabetically", "?sort=alphabetically&q="}, + {"reversealphabetically", "?sort=reversealphabetically&q="}, + } + for _, c := range cases { + req := NewRequest(t, "GET", "/explore/organizations?sort="+c.sortOrder) + resp := MakeRequest(t, req, http.StatusOK) + h := NewHTMLParser(t, resp.Body) + href, _ := h.Find(`.ui.dropdown .menu a.active.item[href^="?sort="]`).Attr("href") + assert.Equal(t, c.expected, href) + } + + // these sort orders shouldn't be supported, to avoid leaking user activity + cases404 := []string{ + "/explore/organizations?sort=mostMembers", + "/explore/organizations?sort=leastGroups", + "/explore/organizations?sort=leastupdate", + "/explore/organizations?sort=reverseleastupdate", + } + for _, c := range cases404 { + req := NewRequest(t, "GET", c).SetHeader("Accept", "text/html") + MakeRequest(t, req, http.StatusNotFound) + } +} diff --git a/tests/integration/explore_user_test.go b/tests/integration/explore_user_test.go index 441d89cea5..d1e3fd85af 100644 --- a/tests/integration/explore_user_test.go +++ b/tests/integration/explore_user_test.go @@ -7,6 +7,8 @@ import ( "net/http" "testing" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" @@ -15,8 +17,11 @@ import ( func TestExploreUser(t *testing.T) { defer tests.PrepareTestEnv(t)() + // Set the default sort order + defer test.MockVariableValue(&setting.UI.ExploreDefaultSort, "reversealphabetically")() + cases := []struct{ sortOrder, expected string }{ - {"", "?sort=newest&q="}, + {"", "?sort=" + setting.UI.ExploreDefaultSort + "&q="}, {"newest", "?sort=newest&q="}, {"oldest", "?sort=oldest&q="}, {"alphabetically", "?sort=alphabetically&q="},