|
|
|
@ -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{
|
|
|
|
|
milestones, err := db.Find[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{
|
|
|
|
|
RepoID: repo.ID,
|
|
|
|
|
State: state,
|
|
|
|
|
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{
|
|
|
|
|
milestones, err := db.Find[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{
|
|
|
|
|
RepoID: unittest.NonexistentID,
|
|
|
|
|
State: api.StateOpen,
|
|
|
|
|
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{
|
|
|
|
|
count, err := db.Count[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{
|
|
|
|
|
RepoID: repoID,
|
|
|
|
|
State: api.StateClosed,
|
|
|
|
|
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{
|
|
|
|
|
count, err := db.Count[issues_model.Milestone](db.DefaultContext, issues_model.FindMilestoneOptions{
|
|
|
|
|
RepoID: unittest.NonexistentID,
|
|
|
|
|
State: api.StateClosed,
|
|
|
|
|
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))
|
|
|
|
|