Add pagination and search box to org teams list (#37245)
- Add pagination and keyword search to the teams list page - 5 teams shown at most in the overview page Fixes: #34482 Fixes: #36602 Fixes: #37084 Signed-off-by: silverwind <me@silverwind.io> Co-authored-by: Animesh Kumar <83393501+kmranimesh@users.noreply.github.com> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
@@ -16,9 +16,12 @@ import (
|
||||
"code.gitea.io/gitea/models/unit"
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
api "code.gitea.io/gitea/modules/structs"
|
||||
"code.gitea.io/gitea/modules/test"
|
||||
"code.gitea.io/gitea/tests"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -31,6 +34,7 @@ func TestOrg(t *testing.T) {
|
||||
t.Run("OrgMembers", testOrgMembers)
|
||||
t.Run("OrgRestrictedUser", testOrgRestrictedUser)
|
||||
t.Run("TeamSearch", testTeamSearch)
|
||||
t.Run("TeamsPage", testTeamsPage)
|
||||
t.Run("OrgSettings", testOrgSettings)
|
||||
}
|
||||
|
||||
@@ -251,6 +255,67 @@ func testTeamSearch(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func testTeamsPage(t *testing.T) {
|
||||
// org17 has three teams in fixtures: Owners (id 5), test_team (id 8), review_team (id 9).
|
||||
// user15 is in Owners; user20 is in review_team only; user5 is not a member.
|
||||
org := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 17})
|
||||
|
||||
listTeams := func(t *testing.T, session *TestSession, query string) []string {
|
||||
req := NewRequestf(t, "GET", "/org/%s/teams%s", org.Name, query)
|
||||
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||
sel := htmlDoc.doc.Find(".ui.top.attached.header strong")
|
||||
names := make([]string, 0, sel.Length())
|
||||
sel.Each(func(_ int, s *goquery.Selection) {
|
||||
names = append(names, s.Text())
|
||||
})
|
||||
return names
|
||||
}
|
||||
|
||||
// Owner sees all teams, "Owners" sorted first regardless of alphabetical order
|
||||
ownerSession := loginUser(t, "user15")
|
||||
assert.Equal(t, []string{"Owners", "review_team", "test_team"}, listTeams(t, ownerSession, ""))
|
||||
|
||||
// Keyword filter narrows by name
|
||||
assert.Equal(t, []string{"review_team"}, listTeams(t, ownerSession, "?q=review"))
|
||||
|
||||
// Non-admin org member sees only the teams they belong to
|
||||
memberSession := loginUser(t, "user20")
|
||||
assert.Equal(t, []string{"review_team"}, listTeams(t, memberSession, ""))
|
||||
|
||||
// Edit review_team so user20 gets full list
|
||||
reviewTeam := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 9})
|
||||
req := NewRequestWithValues(t, "POST", fmt.Sprintf("/org/%s/teams/%s/edit", org.Name, reviewTeam.Name), map[string]string{
|
||||
"team_name": reviewTeam.Name,
|
||||
"description": reviewTeam.Description,
|
||||
"repo_access": "all",
|
||||
"permission": "admin",
|
||||
"unit_1": "1",
|
||||
"unit_2": "1",
|
||||
"unit_3": "1",
|
||||
"unit_4": "1",
|
||||
"unit_5": "1",
|
||||
"unit_6": "1",
|
||||
"unit_7": "1",
|
||||
"unit_8": "1",
|
||||
"unit_9": "1",
|
||||
"unit_10": "1",
|
||||
})
|
||||
ownerSession.MakeRequest(t, req, http.StatusSeeOther)
|
||||
assert.Equal(t, []string{"Owners", "review_team", "test_team"}, listTeams(t, memberSession, ""))
|
||||
|
||||
// Non-member is denied
|
||||
nonMemberSession := loginUser(t, "user5")
|
||||
req = NewRequestf(t, "GET", "/org/%s/teams", org.Name)
|
||||
nonMemberSession.MakeRequest(t, req, http.StatusNotFound)
|
||||
|
||||
t.Run("Pagination", func(t *testing.T) {
|
||||
defer test.MockVariableValue(&setting.UI.MembersPagingNum, 2)()
|
||||
assert.Len(t, listTeams(t, ownerSession, "?page=1"), 2)
|
||||
assert.Equal(t, []string{"test_team"}, listTeams(t, ownerSession, "?page=2"))
|
||||
})
|
||||
}
|
||||
|
||||
func testOrgSettings(t *testing.T) {
|
||||
session := loginUser(t, "user2")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user