1
0
Fork 0
forked from forgejo/forgejo

Add state param to milestone listing API (#7131)

* Support state params

* update tests

* fix tests

* add state=all support

* update tests

* update swagger

* update swagger
This commit is contained in:
Lanre Adelowo 2019-06-06 01:37:45 +01:00 committed by Lunny Xiao
parent 59e6a7b97f
commit de6539fc8c
8 changed files with 76 additions and 15 deletions

View file

@ -13,3 +13,11 @@
content: content2
is_closed: false
num_issues: 0
-
id: 3
repo_id: 1
name: milestone3
content: content3
is_closed: true
num_issues: 0

View file

@ -8,7 +8,8 @@
num_closed_issues: 1
num_pulls: 2
num_closed_pulls: 0
num_milestones: 2
num_milestones: 3
num_closed_milestones: 1
num_watches: 3
-
@ -495,4 +496,4 @@
num_stars: 0
num_forks: 0
num_issues: 0
is_mirror: false
is_mirror: false

View file

@ -190,10 +190,26 @@ func (milestones MilestoneList) getMilestoneIDs() []int64 {
}
// GetMilestonesByRepoID returns all opened milestones of a repository.
func GetMilestonesByRepoID(repoID int64) (MilestoneList, error) {
func GetMilestonesByRepoID(repoID int64, state api.StateType) (MilestoneList, error) {
sess := x.Where("repo_id = ?", repoID)
switch state {
case api.StateClosed:
sess = sess.And("is_closed = ?", true)
case api.StateAll:
break
case api.StateOpen:
fallthrough
default:
sess = sess.And("is_closed = ?", false)
}
miles := make([]*Milestone, 0, 10)
return miles, x.Where("repo_id = ? AND is_closed = ?", repoID, false).
Asc("deadline_unix").Asc("id").Find(&miles)
return miles, sess.Asc("deadline_unix").Asc("id").Find(&miles)
}
// GetMilestones returns a list of milestones of given repository and status.

View file

@ -69,20 +69,43 @@ func TestGetMilestoneByRepoID(t *testing.T) {
func TestGetMilestonesByRepoID(t *testing.T) {
assert.NoError(t, PrepareTestDatabase())
test := func(repoID int64) {
test := func(repoID int64, state api.StateType) {
repo := AssertExistsAndLoadBean(t, &Repository{ID: repoID}).(*Repository)
milestones, err := GetMilestonesByRepoID(repo.ID)
milestones, err := GetMilestonesByRepoID(repo.ID, state)
assert.NoError(t, err)
assert.Len(t, milestones, repo.NumMilestones)
var n int
switch state {
case api.StateClosed:
n = repo.NumClosedMilestones
case api.StateAll:
n = repo.NumMilestones
case api.StateOpen:
fallthrough
default:
n = repo.NumOpenMilestones
}
assert.Len(t, milestones, n)
for _, milestone := range milestones {
assert.EqualValues(t, repoID, milestone.RepoID)
}
}
test(1)
test(2)
test(3)
test(1, api.StateOpen)
test(1, api.StateAll)
test(1, api.StateClosed)
test(2, api.StateOpen)
test(2, api.StateAll)
test(2, api.StateClosed)
test(3, api.StateOpen)
test(3, api.StateClosed)
test(3, api.StateAll)
milestones, err := GetMilestonesByRepoID(NonexistentID)
milestones, err := GetMilestonesByRepoID(NonexistentID, api.StateOpen)
assert.NoError(t, err)
assert.Len(t, milestones, 0)
}