summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-04-25 02:20:22 +0800
committerzeripath <art27@cantab.net>2019-04-24 19:20:22 +0100
commitff03b2f6064e436a03586fa9e2c73bf0d70ba0cc (patch)
treec7fa63117d7e4b00b3d03ef1851bea4e5e92baf1
parent821184c20357f32cc8eea6a02443f66f02461da1 (diff)
downloadgitea-ff03b2f6064e436a03586fa9e2c73bf0d70ba0cc.tar.gz
gitea-ff03b2f6064e436a03586fa9e2c73bf0d70ba0cc.zip
Fix: Sort repos on org home page with non-admin login (#6741)
-rw-r--r--integrations/org_test.go43
-rw-r--r--models/org.go14
-rw-r--r--routers/user/home.go1
3 files changed, 55 insertions, 3 deletions
diff --git a/integrations/org_test.go b/integrations/org_test.go
new file mode 100644
index 0000000000..b17d229d67
--- /dev/null
+++ b/integrations/org_test.go
@@ -0,0 +1,43 @@
+// Copyright 2019 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package integrations
+
+import (
+ "net/http"
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestOrgRepos(t *testing.T) {
+ prepareTestEnv(t)
+
+ var (
+ users = []string{"user1", "user2"}
+ cases = map[string][]string{
+ "alphabetically": {"repo21", "repo3", "repo5"},
+ "reversealphabetically": {"repo5", "repo3", "repo21"},
+ }
+ )
+
+ for _, user := range users {
+ t.Run(user, func(t *testing.T) {
+ session := loginUser(t, user)
+ for sortBy, repos := range cases {
+ req := NewRequest(t, "GET", "/user3?sort="+sortBy)
+ resp := session.MakeRequest(t, req, http.StatusOK)
+
+ htmlDoc := NewHTMLParser(t, resp.Body)
+
+ sel := htmlDoc.doc.Find("a.name")
+ assert.EqualValues(t, len(repos), len(sel.Nodes))
+ for i := 0; i < len(repos); i++ {
+ assert.EqualValues(t, repos[i], strings.TrimSpace(sel.Eq(i).Text()))
+ }
+ }
+ })
+ }
+}
diff --git a/models/org.go b/models/org.go
index 5235dad7a7..149d6f7aa7 100644
--- a/models/org.go
+++ b/models/org.go
@@ -657,6 +657,7 @@ type AccessibleReposEnvironment interface {
Repos(page, pageSize int) ([]*Repository, error)
MirrorRepos() ([]*Repository, error)
AddKeyword(keyword string)
+ SetSort(SearchOrderBy)
}
type accessibleReposEnv struct {
@@ -665,6 +666,7 @@ type accessibleReposEnv struct {
teamIDs []int64
e Engine
keyword string
+ orderBy SearchOrderBy
}
// AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org`
@@ -683,6 +685,7 @@ func (org *User) accessibleReposEnv(e Engine, userID int64) (AccessibleReposEnvi
userID: userID,
teamIDs: teamIDs,
e: e,
+ orderBy: SearchOrderByRecentUpdated,
}, nil
}
@@ -722,8 +725,8 @@ func (env *accessibleReposEnv) RepoIDs(page, pageSize int) ([]int64, error) {
Table("repository").
Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id").
Where(env.cond()).
- GroupBy("`repository`.id,`repository`.updated_unix").
- OrderBy("updated_unix DESC").
+ GroupBy("`repository`.id,`repository`."+strings.Fields(string(env.orderBy))[0]).
+ OrderBy(string(env.orderBy)).
Limit(pageSize, (page-1)*pageSize).
Cols("`repository`.id").
Find(&repoIDs)
@@ -742,6 +745,7 @@ func (env *accessibleReposEnv) Repos(page, pageSize int) ([]*Repository, error)
return repos, env.e.
In("`repository`.id", repoIDs).
+ OrderBy(string(env.orderBy)).
Find(&repos)
}
@@ -752,7 +756,7 @@ func (env *accessibleReposEnv) MirrorRepoIDs() ([]int64, error) {
Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id AND `repository`.is_mirror=?", true).
Where(env.cond()).
GroupBy("`repository`.id, `repository`.updated_unix").
- OrderBy("updated_unix DESC").
+ OrderBy(string(env.orderBy)).
Cols("`repository`.id").
Find(&repoIDs)
}
@@ -776,3 +780,7 @@ func (env *accessibleReposEnv) MirrorRepos() ([]*Repository, error) {
func (env *accessibleReposEnv) AddKeyword(keyword string) {
env.keyword = keyword
}
+
+func (env *accessibleReposEnv) SetSort(orderBy SearchOrderBy) {
+ env.orderBy = orderBy
+}
diff --git a/routers/user/home.go b/routers/user/home.go
index 2293461f08..b53a47db94 100644
--- a/routers/user/home.go
+++ b/routers/user/home.go
@@ -505,6 +505,7 @@ func showOrgProfile(ctx *context.Context) {
ctx.ServerError("AccessibleReposEnv", err)
return
}
+ env.SetSort(orderBy)
if len(keyword) != 0 {
env.AddKeyword(keyword)
}