Fix: Sort repos on org home page with non-admin login (#6741)
This commit is contained in:
		
							parent
							
								
									821184c203
								
							
						
					
					
						commit
						ff03b2f606
					
				
					 3 changed files with 55 additions and 3 deletions
				
			
		
							
								
								
									
										43
									
								
								integrations/org_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								integrations/org_test.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -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())) | ||||
| 				} | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | @ -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 | ||||
| } | ||||
|  |  | |||
|  | @ -505,6 +505,7 @@ func showOrgProfile(ctx *context.Context) { | |||
| 			ctx.ServerError("AccessibleReposEnv", err) | ||||
| 			return | ||||
| 		} | ||||
| 		env.SetSort(orderBy) | ||||
| 		if len(keyword) != 0 { | ||||
| 			env.AddKeyword(keyword) | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue