diff --git a/models/git/commit_status.go b/models/git/commit_status.go index 381f35b2e8a..1b7ba58d00b 100644 --- a/models/git/commit_status.go +++ b/models/git/commit_status.go @@ -311,17 +311,17 @@ func (opts *CommitStatusOptions) ToConds() builder.Cond { func (opts *CommitStatusOptions) ToOrders() string { switch opts.SortType { case "oldest": - return "created_unix ASC" + return "created_unix ASC, `index` ASC" case "recentupdate": - return "updated_unix DESC" + return "updated_unix DESC, `index` DESC" case "leastupdate": - return "updated_unix ASC" + return "updated_unix ASC, `index` ASC" case "leastindex": return "`index` DESC" case "highestindex": return "`index` ASC" default: - return "created_unix DESC" + return "created_unix DESC, `index` DESC" // timestamps have 1s resolution, `index` keeps paging stable } } diff --git a/models/git/commit_status_test.go b/models/git/commit_status_test.go index 86967c1bce8..a85a2ff5de1 100644 --- a/models/git/commit_status_test.go +++ b/models/git/commit_status_test.go @@ -32,28 +32,15 @@ func TestGetCommitStatuses(t *testing.T) { }) assert.NoError(t, err) assert.Equal(t, 5, int(maxResults)) - assert.Len(t, statuses, 5) - - assert.Equal(t, "ci/awesomeness", statuses[0].Context) - assert.Equal(t, commitstatus.CommitStatusPending, statuses[0].State) + var indexes []int64 + for _, status := range statuses { + indexes = append(indexes, status.Index) + } + assert.Equal(t, []int64{5, 4, 3, 2, 1}, indexes) + assert.Equal(t, "deploy/awesomeness", statuses[0].Context) + assert.Equal(t, commitstatus.CommitStatusError, statuses[0].State) assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[0].APIURL(t.Context())) - assert.Equal(t, "cov/awesomeness", statuses[1].Context) - assert.Equal(t, commitstatus.CommitStatusWarning, statuses[1].State) - assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[1].APIURL(t.Context())) - - assert.Equal(t, "cov/awesomeness", statuses[2].Context) - assert.Equal(t, commitstatus.CommitStatusSuccess, statuses[2].State) - assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[2].APIURL(t.Context())) - - assert.Equal(t, "ci/awesomeness", statuses[3].Context) - assert.Equal(t, commitstatus.CommitStatusFailure, statuses[3].State) - assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[3].APIURL(t.Context())) - - assert.Equal(t, "deploy/awesomeness", statuses[4].Context) - assert.Equal(t, commitstatus.CommitStatusError, statuses[4].State) - assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[4].APIURL(t.Context())) - statuses, maxResults, err = db.FindAndCount[git_model.CommitStatus](t.Context(), &git_model.CommitStatusOptions{ ListOptions: db.ListOptions{Page: 2, PageSize: 50}, RepoID: repo1.ID,