|
|
|
@ -14,6 +14,7 @@ import ( |
|
|
|
|
"code.gitea.io/gitea/modules/setting" |
|
|
|
|
api "code.gitea.io/gitea/modules/structs" |
|
|
|
|
"code.gitea.io/gitea/modules/timeutil" |
|
|
|
|
"code.gitea.io/gitea/modules/util" |
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
|
"xorm.io/builder" |
|
|
|
@ -39,10 +40,15 @@ func TestGetMilestoneByRepoID(t *testing.T) { |
|
|
|
|
func TestGetMilestonesByRepoID(t *testing.T) { |
|
|
|
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
|
|
|
test := func(repoID int64, state api.StateType) { |
|
|
|
|
var isClosed util.OptionalBool |
|
|
|
|
switch state { |
|
|
|
|
case api.StateClosed, api.StateOpen: |
|
|
|
|
isClosed = util.OptionalBoolOf(state == api.StateClosed) |
|
|
|
|
} |
|
|
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repoID}) |
|
|
|
|
milestones, _, err := issues_model.GetMilestones(db.DefaultContext, issues_model.GetMilestonesOption{ |
|
|
|
|
RepoID: repo.ID, |
|
|
|
|
State: state, |
|
|
|
|
milestones, err := db.Find[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
RepoID: repo.ID, |
|
|
|
|
IsClosed: isClosed, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
|
|
|
|
@ -77,9 +83,9 @@ func TestGetMilestonesByRepoID(t *testing.T) { |
|
|
|
|
test(3, api.StateClosed) |
|
|
|
|
test(3, api.StateAll) |
|
|
|
|
|
|
|
|
|
milestones, _, err := issues_model.GetMilestones(db.DefaultContext, issues_model.GetMilestonesOption{ |
|
|
|
|
RepoID: unittest.NonexistentID, |
|
|
|
|
State: api.StateOpen, |
|
|
|
|
milestones, err := db.Find[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
RepoID: unittest.NonexistentID, |
|
|
|
|
IsClosed: util.OptionalBoolFalse, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.Len(t, milestones, 0) |
|
|
|
@ -90,13 +96,13 @@ func TestGetMilestones(t *testing.T) { |
|
|
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) |
|
|
|
|
test := func(sortType string, sortCond func(*issues_model.Milestone) int) { |
|
|
|
|
for _, page := range []int{0, 1} { |
|
|
|
|
milestones, _, err := issues_model.GetMilestones(db.DefaultContext, issues_model.GetMilestonesOption{ |
|
|
|
|
milestones, err := db.Find[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
ListOptions: db.ListOptions{ |
|
|
|
|
Page: page, |
|
|
|
|
PageSize: setting.UI.IssuePagingNum, |
|
|
|
|
}, |
|
|
|
|
RepoID: repo.ID, |
|
|
|
|
State: api.StateOpen, |
|
|
|
|
IsClosed: util.OptionalBoolFalse, |
|
|
|
|
SortType: sortType, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
@ -107,13 +113,13 @@ func TestGetMilestones(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
assert.True(t, sort.IntsAreSorted(values)) |
|
|
|
|
|
|
|
|
|
milestones, _, err = issues_model.GetMilestones(db.DefaultContext, issues_model.GetMilestonesOption{ |
|
|
|
|
milestones, err = db.Find[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
ListOptions: db.ListOptions{ |
|
|
|
|
Page: page, |
|
|
|
|
PageSize: setting.UI.IssuePagingNum, |
|
|
|
|
}, |
|
|
|
|
RepoID: repo.ID, |
|
|
|
|
State: api.StateClosed, |
|
|
|
|
IsClosed: util.OptionalBoolTrue, |
|
|
|
|
Name: "", |
|
|
|
|
SortType: sortType, |
|
|
|
|
}) |
|
|
|
@ -150,9 +156,8 @@ func TestCountRepoMilestones(t *testing.T) { |
|
|
|
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
|
|
|
test := func(repoID int64) { |
|
|
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repoID}) |
|
|
|
|
count, err := issues_model.CountMilestones(db.DefaultContext, issues_model.GetMilestonesOption{ |
|
|
|
|
count, err := db.Count[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
RepoID: repoID, |
|
|
|
|
State: api.StateAll, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.EqualValues(t, repo.NumMilestones, count) |
|
|
|
@ -161,9 +166,8 @@ func TestCountRepoMilestones(t *testing.T) { |
|
|
|
|
test(2) |
|
|
|
|
test(3) |
|
|
|
|
|
|
|
|
|
count, err := issues_model.CountMilestones(db.DefaultContext, issues_model.GetMilestonesOption{ |
|
|
|
|
count, err := db.Count[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
RepoID: unittest.NonexistentID, |
|
|
|
|
State: api.StateAll, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.EqualValues(t, 0, count) |
|
|
|
@ -173,9 +177,9 @@ func TestCountRepoClosedMilestones(t *testing.T) { |
|
|
|
|
assert.NoError(t, unittest.PrepareTestDatabase()) |
|
|
|
|
test := func(repoID int64) { |
|
|
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repoID}) |
|
|
|
|
count, err := issues_model.CountMilestones(db.DefaultContext, issues_model.GetMilestonesOption{ |
|
|
|
|
RepoID: repoID, |
|
|
|
|
State: api.StateClosed, |
|
|
|
|
count, err := db.Count[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
RepoID: repoID, |
|
|
|
|
IsClosed: util.OptionalBoolTrue, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.EqualValues(t, repo.NumClosedMilestones, count) |
|
|
|
@ -184,9 +188,9 @@ func TestCountRepoClosedMilestones(t *testing.T) { |
|
|
|
|
test(2) |
|
|
|
|
test(3) |
|
|
|
|
|
|
|
|
|
count, err := issues_model.CountMilestones(db.DefaultContext, issues_model.GetMilestonesOption{ |
|
|
|
|
RepoID: unittest.NonexistentID, |
|
|
|
|
State: api.StateClosed, |
|
|
|
|
count, err := db.Count[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
RepoID: unittest.NonexistentID, |
|
|
|
|
IsClosed: util.OptionalBoolTrue, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.EqualValues(t, 0, count) |
|
|
|
@ -201,12 +205,19 @@ func TestCountMilestonesByRepoIDs(t *testing.T) { |
|
|
|
|
repo1OpenCount, repo1ClosedCount := milestonesCount(1) |
|
|
|
|
repo2OpenCount, repo2ClosedCount := milestonesCount(2) |
|
|
|
|
|
|
|
|
|
openCounts, err := issues_model.CountMilestonesByRepoCond(db.DefaultContext, builder.In("repo_id", []int64{1, 2}), false) |
|
|
|
|
openCounts, err := issues_model.CountMilestonesMap(db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
RepoIDs: []int64{1, 2}, |
|
|
|
|
IsClosed: util.OptionalBoolFalse, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.EqualValues(t, repo1OpenCount, openCounts[1]) |
|
|
|
|
assert.EqualValues(t, repo2OpenCount, openCounts[2]) |
|
|
|
|
|
|
|
|
|
closedCounts, err := issues_model.CountMilestonesByRepoCond(db.DefaultContext, builder.In("repo_id", []int64{1, 2}), true) |
|
|
|
|
closedCounts, err := issues_model.CountMilestonesMap(db.DefaultContext, |
|
|
|
|
issues_model.FindMilestoneOptions{ |
|
|
|
|
RepoIDs: []int64{1, 2}, |
|
|
|
|
IsClosed: util.OptionalBoolTrue, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.EqualValues(t, repo1ClosedCount, closedCounts[1]) |
|
|
|
|
assert.EqualValues(t, repo2ClosedCount, closedCounts[2]) |
|
|
|
@ -218,7 +229,15 @@ func TestGetMilestonesByRepoIDs(t *testing.T) { |
|
|
|
|
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}) |
|
|
|
|
test := func(sortType string, sortCond func(*issues_model.Milestone) int) { |
|
|
|
|
for _, page := range []int{0, 1} { |
|
|
|
|
openMilestones, err := issues_model.GetMilestonesByRepoIDs(db.DefaultContext, []int64{repo1.ID, repo2.ID}, page, false, sortType) |
|
|
|
|
openMilestones, err := db.Find[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{ |
|
|
|
|
ListOptions: db.ListOptions{ |
|
|
|
|
Page: page, |
|
|
|
|
PageSize: setting.UI.IssuePagingNum, |
|
|
|
|
}, |
|
|
|
|
RepoIDs: []int64{repo1.ID, repo2.ID}, |
|
|
|
|
IsClosed: util.OptionalBoolFalse, |
|
|
|
|
SortType: sortType, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.Len(t, openMilestones, repo1.NumOpenMilestones+repo2.NumOpenMilestones) |
|
|
|
|
values := make([]int, len(openMilestones)) |
|
|
|
@ -227,7 +246,16 @@ func TestGetMilestonesByRepoIDs(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
assert.True(t, sort.IntsAreSorted(values)) |
|
|
|
|
|
|
|
|
|
closedMilestones, err := issues_model.GetMilestonesByRepoIDs(db.DefaultContext, []int64{repo1.ID, repo2.ID}, page, true, sortType) |
|
|
|
|
closedMilestones, err := db.Find[issues_model.Milestone](db.DefaultContext, |
|
|
|
|
issues_model.FindMilestoneOptions{ |
|
|
|
|
ListOptions: db.ListOptions{ |
|
|
|
|
Page: page, |
|
|
|
|
PageSize: setting.UI.IssuePagingNum, |
|
|
|
|
}, |
|
|
|
|
RepoIDs: []int64{repo1.ID, repo2.ID}, |
|
|
|
|
IsClosed: util.OptionalBoolTrue, |
|
|
|
|
SortType: sortType, |
|
|
|
|
}) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.Len(t, closedMilestones, repo1.NumClosedMilestones+repo2.NumClosedMilestones) |
|
|
|
|
values = make([]int, len(closedMilestones)) |
|
|
|
|