@@ -289,3 +289,88 @@ func TestMilestoneList_LoadTotalTrackedTimes(t *testing.T) {
289289
290290 assert .Equal (t , miles [0 ].TotalTrackedTime , int64 (3662 ))
291291}
292+
293+ func TestCountMilestonesByRepoIDs (t * testing.T ) {
294+ assert .NoError (t , PrepareTestDatabase ())
295+ milestonesCount := func (repoID int64 ) (int , int ) {
296+ repo := AssertExistsAndLoadBean (t , & Repository {ID : repoID }).(* Repository )
297+ return repo .NumOpenMilestones , repo .NumClosedMilestones
298+ }
299+ repo1OpenCount , repo1ClosedCount := milestonesCount (1 )
300+ repo2OpenCount , repo2ClosedCount := milestonesCount (2 )
301+
302+ openCounts , err := CountMilestonesByRepoIDs ([]int64 {1 , 2 }, false )
303+ assert .NoError (t , err )
304+ assert .EqualValues (t , repo1OpenCount , openCounts [1 ])
305+ assert .EqualValues (t , repo2OpenCount , openCounts [2 ])
306+
307+ closedCounts , err := CountMilestonesByRepoIDs ([]int64 {1 , 2 }, true )
308+ assert .NoError (t , err )
309+ assert .EqualValues (t , repo1ClosedCount , closedCounts [1 ])
310+ assert .EqualValues (t , repo2ClosedCount , closedCounts [2 ])
311+ }
312+
313+ func TestGetMilestonesByRepoIDs (t * testing.T ) {
314+ assert .NoError (t , PrepareTestDatabase ())
315+ repo1 := AssertExistsAndLoadBean (t , & Repository {ID : 1 }).(* Repository )
316+ repo2 := AssertExistsAndLoadBean (t , & Repository {ID : 2 }).(* Repository )
317+ test := func (sortType string , sortCond func (* Milestone ) int ) {
318+ for _ , page := range []int {0 , 1 } {
319+ openMilestones , err := GetMilestonesByRepoIDs ([]int64 {repo1 .ID , repo2 .ID }, page , false , sortType )
320+ assert .NoError (t , err )
321+ assert .Len (t , openMilestones , repo1 .NumOpenMilestones + repo2 .NumOpenMilestones )
322+ values := make ([]int , len (openMilestones ))
323+ for i , milestone := range openMilestones {
324+ values [i ] = sortCond (milestone )
325+ }
326+ assert .True (t , sort .IntsAreSorted (values ))
327+
328+ closedMilestones , err := GetMilestonesByRepoIDs ([]int64 {repo1 .ID , repo2 .ID }, page , true , sortType )
329+ assert .NoError (t , err )
330+ assert .Len (t , closedMilestones , repo1 .NumClosedMilestones + repo2 .NumClosedMilestones )
331+ values = make ([]int , len (closedMilestones ))
332+ for i , milestone := range closedMilestones {
333+ values [i ] = sortCond (milestone )
334+ }
335+ assert .True (t , sort .IntsAreSorted (values ))
336+ }
337+ }
338+ test ("furthestduedate" , func (milestone * Milestone ) int {
339+ return - int (milestone .DeadlineUnix )
340+ })
341+ test ("leastcomplete" , func (milestone * Milestone ) int {
342+ return milestone .Completeness
343+ })
344+ test ("mostcomplete" , func (milestone * Milestone ) int {
345+ return - milestone .Completeness
346+ })
347+ test ("leastissues" , func (milestone * Milestone ) int {
348+ return milestone .NumIssues
349+ })
350+ test ("mostissues" , func (milestone * Milestone ) int {
351+ return - milestone .NumIssues
352+ })
353+ test ("soonestduedate" , func (milestone * Milestone ) int {
354+ return int (milestone .DeadlineUnix )
355+ })
356+ }
357+
358+ func TestLoadTotalTrackedTime (t * testing.T ) {
359+ assert .NoError (t , PrepareTestDatabase ())
360+ milestone := AssertExistsAndLoadBean (t , & Milestone {ID : 1 }).(* Milestone )
361+
362+ assert .NoError (t , milestone .LoadTotalTrackedTime ())
363+
364+ assert .Equal (t , milestone .TotalTrackedTime , int64 (3662 ))
365+ }
366+
367+ func TestGetMilestonesStats (t * testing.T ) {
368+ assert .NoError (t , PrepareTestDatabase ())
369+ repo1 := AssertExistsAndLoadBean (t , & Repository {ID : 1 }).(* Repository )
370+ repo2 := AssertExistsAndLoadBean (t , & Repository {ID : 2 }).(* Repository )
371+
372+ milestoneStats , err := GetMilestonesStats ([]int64 {repo1 .ID , repo2 .ID })
373+ assert .NoError (t , err )
374+ assert .EqualValues (t , repo1 .NumOpenMilestones + repo2 .NumOpenMilestones , milestoneStats .OpenCount )
375+ assert .EqualValues (t , repo1 .NumClosedMilestones + repo2 .NumClosedMilestones , milestoneStats .ClosedCount )
376+ }
0 commit comments