From 27276ff26e467d449dfd4a9f4a539b5539bfcca8 Mon Sep 17 00:00:00 2001 From: forgejo-backport-action Date: Fri, 31 Jan 2025 11:12:01 +0000 Subject: [PATCH] [v10.0/forgejo] fix: set explore pages to configurable default sort (#6749) **Backport:** https://codeberg.org/forgejo/forgejo/pulls/6708 - Currently, the explore/organizations page always defaults to using "newest" as its sort. Instead, use the pre-existing config option (`setting.UI.ExploreDefaultSort`) so server administrators can change the default sort order. ## Checklist The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org). ### Tests (Sorry, not sure how to add a test for this change) - I added test coverage for Go changes... - [ ] in their respective `*_test.go` for unit tests. - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server. ### Documentation - [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change. - [x] I did not document these changes and I do not expect someone else to do it. ### Release notes I don't mind either way. - [ ] I do not want this change to show in the release notes. - [x] I want the title to show in the release notes with a link to this pull request. - [ ] I want the content of the `release-notes/.md` to be be used for the release notes instead of the title. Co-authored-by: John Moon Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6749 Reviewed-by: Gusted Co-authored-by: forgejo-backport-action Co-committed-by: forgejo-backport-action --- routers/web/explore/org.go | 6 +++- routers/web/explore/user.go | 6 +++- tests/integration/explore_org_test.go | 49 ++++++++++++++++++++++++++ tests/integration/explore_user_test.go | 7 +++- 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 tests/integration/explore_org_test.go 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 15c60f546f..da5dd39f3e 100644 --- a/routers/web/explore/user.go +++ b/routers/web/explore/user.go @@ -149,7 +149,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="},