summaryrefslogtreecommitdiffstats
path: root/models/issue_milestone_test.go
diff options
context:
space:
mode:
authorEthan Koenig <etk39@cornell.edu>2017-02-09 01:39:26 -0500
committerLunny Xiao <xiaolunwen@gmail.com>2017-02-09 14:39:26 +0800
commita6751cec049f4a814b590beab641e94ab1bd30c8 (patch)
tree9d187d34a02b871bf3893a2c0fd9404a33d661a0 /models/issue_milestone_test.go
parent1da7dd3da937baeaf0d9d78c3e92d47622791cdb (diff)
downloadgitea-a6751cec049f4a814b590beab641e94ab1bd30c8.tar.gz
gitea-a6751cec049f4a814b590beab641e94ab1bd30c8.zip
Unit tests for issue_milestone (#878)
Diffstat (limited to 'models/issue_milestone_test.go')
-rw-r--r--models/issue_milestone_test.go240
1 files changed, 240 insertions, 0 deletions
diff --git a/models/issue_milestone_test.go b/models/issue_milestone_test.go
new file mode 100644
index 0000000000..aa4038dc6e
--- /dev/null
+++ b/models/issue_milestone_test.go
@@ -0,0 +1,240 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package models
+
+import (
+ "testing"
+
+ api "code.gitea.io/sdk/gitea"
+
+ "github.com/stretchr/testify/assert"
+ "sort"
+ "time"
+)
+
+func TestMilestone_State(t *testing.T) {
+ assert.Equal(t, api.StateOpen, (&Milestone{IsClosed: false}).State())
+ assert.Equal(t, api.StateClosed, (&Milestone{IsClosed: true}).State())
+}
+
+func TestMilestone_APIFormat(t *testing.T) {
+ milestone := &Milestone{
+ ID: 3,
+ RepoID: 4,
+ Name: "milestoneName",
+ Content: "milestoneContent",
+ IsClosed: false,
+ NumOpenIssues: 5,
+ NumClosedIssues: 6,
+ Deadline: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
+ }
+ assert.Equal(t, api.Milestone{
+ ID: milestone.ID,
+ State: api.StateOpen,
+ Title: milestone.Name,
+ Description: milestone.Content,
+ OpenIssues: milestone.NumOpenIssues,
+ ClosedIssues: milestone.NumClosedIssues,
+ Deadline: &milestone.Deadline,
+ }, *milestone.APIFormat())
+}
+
+func TestNewMilestone(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ milestone := &Milestone{
+ RepoID: 1,
+ Name: "milestoneName",
+ Content: "milestoneContent",
+ }
+
+ assert.NoError(t, NewMilestone(milestone))
+ AssertExistsAndLoadBean(t, milestone)
+ CheckConsistencyFor(t, &Repository{ID: milestone.RepoID}, &Milestone{})
+}
+
+func TestGetMilestoneByRepoID(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+
+ milestone, err := GetMilestoneByRepoID(1, 1)
+ assert.NoError(t, err)
+ assert.EqualValues(t, 1, milestone.ID)
+ assert.EqualValues(t, 1, milestone.RepoID)
+
+ _, err = GetMilestoneByRepoID(NonexistentID, NonexistentID)
+ assert.True(t, IsErrMilestoneNotExist(err))
+}
+
+func TestGetMilestonesByRepoID(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ test := func(repoID int64) {
+ repo := AssertExistsAndLoadBean(t, &Repository{ID: repoID}).(*Repository)
+ milestones, err := GetMilestonesByRepoID(repo.ID)
+ assert.NoError(t, err)
+ assert.Len(t, milestones, repo.NumMilestones)
+ for _, milestone := range milestones {
+ assert.EqualValues(t, repoID, milestone.RepoID)
+ }
+ }
+ test(1)
+ test(2)
+ test(3)
+
+ milestones, err := GetMilestonesByRepoID(NonexistentID)
+ assert.NoError(t, err)
+ assert.Len(t, milestones, 0)
+}
+
+func TestGetMilestones(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ repo := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
+ test := func(sortType string, sortCond func(*Milestone) int) {
+ for _, page := range []int{0, 1} {
+ milestones, err := GetMilestones(repo.ID, page, false, sortType)
+ assert.NoError(t, err)
+ assert.Len(t, milestones, repo.NumMilestones-repo.NumClosedMilestones)
+ values := make([]int, len(milestones))
+ for i, milestone := range milestones {
+ values[i] = sortCond(milestone)
+ }
+ assert.True(t, sort.IntsAreSorted(values))
+
+ milestones, err = GetMilestones(repo.ID, page, true, sortType)
+ assert.NoError(t, err)
+ assert.Len(t, milestones, repo.NumClosedMilestones)
+ values = make([]int, len(milestones))
+ for i, milestone := range milestones {
+ values[i] = sortCond(milestone)
+ }
+ assert.True(t, sort.IntsAreSorted(values))
+ }
+ }
+ test("furthestduedate", func(milestone *Milestone) int {
+ return -int(milestone.DeadlineUnix)
+ })
+ test("leastcomplete", func(milestone *Milestone) int {
+ return milestone.Completeness
+ })
+ test("mostcomplete", func(milestone *Milestone) int {
+ return -milestone.Completeness
+ })
+ test("leastissues", func(milestone *Milestone) int {
+ return milestone.NumIssues
+ })
+ test("mostissues", func(milestone *Milestone) int {
+ return -milestone.NumIssues
+ })
+ test("soonestduedate", func(milestone *Milestone) int {
+ return int(milestone.DeadlineUnix)
+ })
+}
+
+func TestUpdateMilestone(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+
+ milestone := AssertExistsAndLoadBean(t, &Milestone{ID: 1}).(*Milestone)
+ milestone.Name = "newMilestoneName"
+ milestone.Content = "newMilestoneContent"
+ assert.NoError(t, UpdateMilestone(milestone))
+ AssertExistsAndLoadBean(t, milestone)
+ CheckConsistencyFor(t, &Milestone{})
+}
+
+func TestCountRepoMilestones(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ test := func(repoID int64) {
+ repo := AssertExistsAndLoadBean(t, &Repository{ID: repoID}).(*Repository)
+ assert.EqualValues(t, repo.NumMilestones, countRepoMilestones(x, repoID))
+ }
+ test(1)
+ test(2)
+ test(3)
+ assert.EqualValues(t, 0, countRepoMilestones(x, NonexistentID))
+}
+
+func TestCountRepoClosedMilestones(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ test := func(repoID int64) {
+ repo := AssertExistsAndLoadBean(t, &Repository{ID: repoID}).(*Repository)
+ assert.EqualValues(t, repo.NumClosedMilestones, CountRepoClosedMilestones(repoID))
+ }
+ test(1)
+ test(2)
+ test(3)
+ assert.EqualValues(t, 0, countRepoMilestones(x, NonexistentID))
+}
+
+func TestMilestoneStats(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ test := func(repoID int64) {
+ repo := AssertExistsAndLoadBean(t, &Repository{ID: repoID}).(*Repository)
+ open, closed := MilestoneStats(repoID)
+ assert.EqualValues(t, repo.NumMilestones-repo.NumClosedMilestones, open)
+ assert.EqualValues(t, repo.NumClosedMilestones, closed)
+ }
+ test(1)
+ test(2)
+ test(3)
+
+ open, closed := MilestoneStats(NonexistentID)
+ assert.EqualValues(t, 0, open)
+ assert.EqualValues(t, 0, closed)
+}
+
+func TestChangeMilestoneStatus(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ milestone := AssertExistsAndLoadBean(t, &Milestone{ID: 1}).(*Milestone)
+
+ assert.NoError(t, ChangeMilestoneStatus(milestone, true))
+ AssertExistsAndLoadBean(t, &Milestone{ID: 1}, "is_closed=1")
+ CheckConsistencyFor(t, &Repository{ID: milestone.RepoID}, &Milestone{})
+
+ assert.NoError(t, ChangeMilestoneStatus(milestone, false))
+ AssertExistsAndLoadBean(t, &Milestone{ID: 1}, "is_closed=0")
+ CheckConsistencyFor(t, &Repository{ID: milestone.RepoID}, &Milestone{})
+}
+
+func TestChangeMilestoneIssueStats(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ issue := AssertExistsAndLoadBean(t, &Issue{MilestoneID: 1},
+ "is_closed=0").(*Issue)
+
+ issue.IsClosed = true
+ _, err := x.Cols("is_closed").Update(issue)
+ assert.NoError(t, err)
+ assert.NoError(t, changeMilestoneIssueStats(x.NewSession(), issue))
+ CheckConsistencyFor(t, &Milestone{})
+
+ issue.IsClosed = false
+ _, err = x.Cols("is_closed").Update(issue)
+ assert.NoError(t, err)
+ assert.NoError(t, changeMilestoneIssueStats(x.NewSession(), issue))
+ CheckConsistencyFor(t, &Milestone{})
+}
+
+func TestChangeMilestoneAssign(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ issue := AssertExistsAndLoadBean(t, &Issue{RepoID: 1}).(*Issue)
+ doer := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
+
+ oldMilestoneID := issue.MilestoneID
+ issue.MilestoneID = 2
+ assert.NoError(t, ChangeMilestoneAssign(issue, doer, oldMilestoneID))
+ AssertExistsAndLoadBean(t, &Comment{
+ IssueID: issue.ID,
+ Type: CommentTypeMilestone,
+ MilestoneID: issue.MilestoneID,
+ OldMilestoneID: oldMilestoneID,
+ })
+ CheckConsistencyFor(t, &Milestone{}, &Issue{})
+}
+
+func TestDeleteMilestoneByRepoID(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+ assert.NoError(t, DeleteMilestoneByRepoID(1, 1))
+ AssertNotExistsBean(t, &Milestone{ID: 1})
+ CheckConsistencyFor(t, &Repository{ID: 1})
+
+ assert.NoError(t, DeleteMilestoneByRepoID(NonexistentID, NonexistentID))
+}