Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix incorrect oldest sort in project list (#25806) #25835

Merged
merged 1 commit into from
Jul 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions models/fixtures/project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
creator_id: 2
board_type: 1
type: 2
created_unix: 1688973030
updated_unix: 1688973030

-
id: 2
Expand All @@ -17,6 +19,8 @@
creator_id: 3
board_type: 1
type: 2
created_unix: 1688973010
updated_unix: 1688973010

-
id: 3
Expand All @@ -27,6 +31,8 @@
creator_id: 5
board_type: 1
type: 2
created_unix: 1688973020
updated_unix: 1688973020

-
id: 4
Expand All @@ -37,3 +43,5 @@
creator_id: 2
board_type: 1
type: 2
created_unix: 1688973000
updated_unix: 1688973000
28 changes: 15 additions & 13 deletions models/project/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ type SearchOptions struct {
RepoID int64
Page int
IsClosed util.OptionalBool
SortType string
OrderBy db.SearchOrderBy
Type Type
}

Expand Down Expand Up @@ -226,26 +226,28 @@ func CountProjects(ctx context.Context, opts SearchOptions) (int64, error) {
return db.GetEngine(ctx).Where(opts.toConds()).Count(new(Project))
}

func GetSearchOrderByBySortType(sortType string) db.SearchOrderBy {
switch sortType {
case "oldest":
return db.SearchOrderByOldest
case "recentupdate":
return db.SearchOrderByRecentUpdated
case "leastupdate":
return db.SearchOrderByLeastUpdated
default:
return db.SearchOrderByNewest
}
}

// FindProjects returns a list of all projects that have been created in the repository
func FindProjects(ctx context.Context, opts SearchOptions) ([]*Project, int64, error) {
e := db.GetEngine(ctx).Where(opts.toConds())
e := db.GetEngine(ctx).Where(opts.toConds()).OrderBy(opts.OrderBy.String())
projects := make([]*Project, 0, setting.UI.IssuePagingNum)

if opts.Page > 0 {
e = e.Limit(setting.UI.IssuePagingNum, (opts.Page-1)*setting.UI.IssuePagingNum)
}

switch opts.SortType {
case "oldest":
e.Desc("created_unix")
case "recentupdate":
e.Desc("updated_unix")
case "leastupdate":
e.Asc("updated_unix")
default:
e.Asc("created_unix")
}

count, err := e.FindAndCount(&projects)
return projects, count, err
}
Expand Down
39 changes: 39 additions & 0 deletions models/project/project_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,42 @@ func TestProject(t *testing.T) {

assert.True(t, projectFromDB.IsClosed)
}

func TestProjectsSort(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())

tests := []struct {
sortType string
wants []int64
}{
{
sortType: "default",
wants: []int64{1, 3, 2, 4},
},
{
sortType: "oldest",
wants: []int64{4, 2, 3, 1},
},
{
sortType: "recentupdate",
wants: []int64{1, 3, 2, 4},
},
{
sortType: "leastupdate",
wants: []int64{4, 2, 3, 1},
},
}

for _, tt := range tests {
projects, count, err := FindProjects(db.DefaultContext, SearchOptions{
OrderBy: GetSearchOrderByBySortType(tt.sortType),
})
assert.NoError(t, err)
assert.EqualValues(t, int64(4), count)
if assert.Len(t, projects, 4) {
for i := range projects {
assert.EqualValues(t, tt.wants[i], projects[i].ID)
}
}
}
}
2 changes: 1 addition & 1 deletion routers/web/org/projects.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func Projects(ctx *context.Context) {
OwnerID: ctx.ContextUser.ID,
Page: page,
IsClosed: util.OptionalBoolOf(isShowClosed),
SortType: sortType,
OrderBy: project_model.GetSearchOrderByBySortType(sortType),
Type: projectType,
})
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion routers/web/repo/projects.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func Projects(ctx *context.Context) {
RepoID: repo.ID,
Page: page,
IsClosed: util.OptionalBoolOf(isShowClosed),
SortType: sortType,
OrderBy: project_model.GetSearchOrderByBySortType(sortType),
Type: project_model.TypeRepository,
})
if err != nil {
Expand Down