mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 09:31:53 +01:00 
			
		
		
		
	Add sort option recentclose for issues and pulls (#34525)
closes #34171 Adds a new sort option `recentclose` for issues and pull requests which will return items in a descending order of when they were closed
This commit is contained in:
		
							parent
							
								
									11ee7ff3bf
								
							
						
					
					
						commit
						50d9565088
					
				| @ -88,6 +88,8 @@ func applySorts(sess *xorm.Session, sortType string, priorityRepoID int64) { | ||||
| 		sess.Asc("issue.created_unix").Asc("issue.id") | ||||
| 	case "recentupdate": | ||||
| 		sess.Desc("issue.updated_unix").Desc("issue.created_unix").Desc("issue.id") | ||||
| 	case "recentclose": | ||||
| 		sess.Desc("issue.closed_unix").Desc("issue.created_unix").Desc("issue.id") | ||||
| 	case "leastupdate": | ||||
| 		sess.Asc("issue.updated_unix").Asc("issue.created_unix").Asc("issue.id") | ||||
| 	case "mostcomment": | ||||
|  | ||||
| @ -152,7 +152,8 @@ func PullRequests(ctx context.Context, baseRepoID int64, opts *PullRequestsOptio | ||||
| 	applySorts(findSession, opts.SortType, 0) | ||||
| 	findSession = db.SetSessionPagination(findSession, opts) | ||||
| 	prs := make([]*PullRequest, 0, opts.PageSize) | ||||
| 	return prs, maxResults, findSession.Find(&prs) | ||||
| 	found := findSession.Find(&prs) | ||||
| 	return prs, maxResults, found | ||||
| } | ||||
| 
 | ||||
| // PullRequestList defines a list of pull requests | ||||
|  | ||||
| @ -14,6 +14,7 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| ) | ||||
| 
 | ||||
| func TestPullRequest_LoadAttributes(t *testing.T) { | ||||
| @ -76,6 +77,47 @@ func TestPullRequestsNewest(t *testing.T) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestPullRequests_Closed_RecentSortType(t *testing.T) { | ||||
| 	// Issue ID | Closed At.  | Updated At | ||||
| 	//    2     | 1707270001  | 1707270001 | ||||
| 	//    3     | 1707271000  | 1707279999 | ||||
| 	//    11    | 1707279999  | 1707275555 | ||||
| 	tests := []struct { | ||||
| 		sortType             string | ||||
| 		expectedIssueIDOrder []int64 | ||||
| 	}{ | ||||
| 		{"recentupdate", []int64{3, 11, 2}}, | ||||
| 		{"recentclose", []int64{11, 3, 2}}, | ||||
| 	} | ||||
| 
 | ||||
| 	assert.NoError(t, unittest.PrepareTestDatabase()) | ||||
| 	_, err := db.Exec(db.DefaultContext, "UPDATE issue SET closed_unix = 1707270001, updated_unix = 1707270001, is_closed = true WHERE id = 2") | ||||
| 	require.NoError(t, err) | ||||
| 	_, err = db.Exec(db.DefaultContext, "UPDATE issue SET closed_unix = 1707271000, updated_unix = 1707279999, is_closed = true WHERE id = 3") | ||||
| 	require.NoError(t, err) | ||||
| 	_, err = db.Exec(db.DefaultContext, "UPDATE issue SET closed_unix = 1707279999, updated_unix = 1707275555, is_closed = true WHERE id = 11") | ||||
| 	require.NoError(t, err) | ||||
| 
 | ||||
| 	for _, test := range tests { | ||||
| 		t.Run(test.sortType, func(t *testing.T) { | ||||
| 			prs, _, err := issues_model.PullRequests(db.DefaultContext, 1, &issues_model.PullRequestsOptions{ | ||||
| 				ListOptions: db.ListOptions{ | ||||
| 					Page: 1, | ||||
| 				}, | ||||
| 				State:    "closed", | ||||
| 				SortType: test.sortType, | ||||
| 			}) | ||||
| 			require.NoError(t, err) | ||||
| 
 | ||||
| 			if assert.Len(t, prs, len(test.expectedIssueIDOrder)) { | ||||
| 				for i := range test.expectedIssueIDOrder { | ||||
| 					assert.Equal(t, test.expectedIssueIDOrder[i], prs[i].IssueID) | ||||
| 				} | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestLoadRequestedReviewers(t *testing.T) { | ||||
| 	assert.NoError(t, unittest.PrepareTestDatabase()) | ||||
| 
 | ||||
|  | ||||
| @ -73,7 +73,7 @@ func ListPullRequests(ctx *context.APIContext) { | ||||
| 	//   in: query | ||||
| 	//   description: Type of sort | ||||
| 	//   type: string | ||||
| 	//   enum: [oldest, recentupdate, leastupdate, mostcomment, leastcomment, priority] | ||||
| 	//   enum: [oldest, recentupdate, recentclose, leastupdate, mostcomment, leastcomment, priority] | ||||
| 	// - name: milestone | ||||
| 	//   in: query | ||||
| 	//   description: ID of the milestone | ||||
|  | ||||
							
								
								
									
										1
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							| @ -12871,6 +12871,7 @@ | ||||
|             "enum": [ | ||||
|               "oldest", | ||||
|               "recentupdate", | ||||
|               "recentclose", | ||||
|               "leastupdate", | ||||
|               "mostcomment", | ||||
|               "leastcomment", | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user