code.gitea.io/gitea@v1.22.3/models/issues/tracked_time_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package issues_test 5 6 import ( 7 "testing" 8 "time" 9 10 "code.gitea.io/gitea/models/db" 11 issues_model "code.gitea.io/gitea/models/issues" 12 "code.gitea.io/gitea/models/unittest" 13 user_model "code.gitea.io/gitea/models/user" 14 "code.gitea.io/gitea/modules/optional" 15 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestAddTime(t *testing.T) { 20 assert.NoError(t, unittest.PrepareTestDatabase()) 21 22 org3, err := user_model.GetUserByID(db.DefaultContext, 3) 23 assert.NoError(t, err) 24 25 issue1, err := issues_model.GetIssueByID(db.DefaultContext, 1) 26 assert.NoError(t, err) 27 28 // 3661 = 1h 1min 1s 29 trackedTime, err := issues_model.AddTime(db.DefaultContext, org3, issue1, 3661, time.Now()) 30 assert.NoError(t, err) 31 assert.Equal(t, int64(3), trackedTime.UserID) 32 assert.Equal(t, int64(1), trackedTime.IssueID) 33 assert.Equal(t, int64(3661), trackedTime.Time) 34 35 tt := unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{UserID: 3, IssueID: 1}) 36 assert.Equal(t, int64(3661), tt.Time) 37 38 comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{Type: issues_model.CommentTypeAddTimeManual, PosterID: 3, IssueID: 1}) 39 assert.Equal(t, "|3661", comment.Content) 40 } 41 42 func TestGetTrackedTimes(t *testing.T) { 43 assert.NoError(t, unittest.PrepareTestDatabase()) 44 45 // by Issue 46 times, err := issues_model.GetTrackedTimes(db.DefaultContext, &issues_model.FindTrackedTimesOptions{IssueID: 1}) 47 assert.NoError(t, err) 48 assert.Len(t, times, 1) 49 assert.Equal(t, int64(400), times[0].Time) 50 51 times, err = issues_model.GetTrackedTimes(db.DefaultContext, &issues_model.FindTrackedTimesOptions{IssueID: -1}) 52 assert.NoError(t, err) 53 assert.Len(t, times, 0) 54 55 // by User 56 times, err = issues_model.GetTrackedTimes(db.DefaultContext, &issues_model.FindTrackedTimesOptions{UserID: 1}) 57 assert.NoError(t, err) 58 assert.Len(t, times, 3) 59 assert.Equal(t, int64(400), times[0].Time) 60 61 times, err = issues_model.GetTrackedTimes(db.DefaultContext, &issues_model.FindTrackedTimesOptions{UserID: 3}) 62 assert.NoError(t, err) 63 assert.Len(t, times, 0) 64 65 // by Repo 66 times, err = issues_model.GetTrackedTimes(db.DefaultContext, &issues_model.FindTrackedTimesOptions{RepositoryID: 2}) 67 assert.NoError(t, err) 68 assert.Len(t, times, 3) 69 assert.Equal(t, int64(1), times[0].Time) 70 issue, err := issues_model.GetIssueByID(db.DefaultContext, times[0].IssueID) 71 assert.NoError(t, err) 72 assert.Equal(t, issue.RepoID, int64(2)) 73 74 times, err = issues_model.GetTrackedTimes(db.DefaultContext, &issues_model.FindTrackedTimesOptions{RepositoryID: 1}) 75 assert.NoError(t, err) 76 assert.Len(t, times, 5) 77 78 times, err = issues_model.GetTrackedTimes(db.DefaultContext, &issues_model.FindTrackedTimesOptions{RepositoryID: 10}) 79 assert.NoError(t, err) 80 assert.Len(t, times, 0) 81 } 82 83 func TestTotalTimesForEachUser(t *testing.T) { 84 assert.NoError(t, unittest.PrepareTestDatabase()) 85 86 total, err := issues_model.TotalTimesForEachUser(db.DefaultContext, &issues_model.FindTrackedTimesOptions{IssueID: 1}) 87 assert.NoError(t, err) 88 assert.Len(t, total, 1) 89 for user, time := range total { 90 assert.EqualValues(t, 1, user.ID) 91 assert.EqualValues(t, 400, time) 92 } 93 94 total, err = issues_model.TotalTimesForEachUser(db.DefaultContext, &issues_model.FindTrackedTimesOptions{IssueID: 2}) 95 assert.NoError(t, err) 96 assert.Len(t, total, 2) 97 for user, time := range total { 98 if user.ID == 2 { 99 assert.EqualValues(t, 3662, time) 100 } else if user.ID == 1 { 101 assert.EqualValues(t, 20, time) 102 } else { 103 assert.Error(t, assert.AnError) 104 } 105 } 106 107 total, err = issues_model.TotalTimesForEachUser(db.DefaultContext, &issues_model.FindTrackedTimesOptions{IssueID: 5}) 108 assert.NoError(t, err) 109 assert.Len(t, total, 1) 110 for user, time := range total { 111 assert.EqualValues(t, 2, user.ID) 112 assert.EqualValues(t, 1, time) 113 } 114 115 total, err = issues_model.TotalTimesForEachUser(db.DefaultContext, &issues_model.FindTrackedTimesOptions{IssueID: 4}) 116 assert.NoError(t, err) 117 assert.Len(t, total, 2) 118 } 119 120 func TestGetIssueTotalTrackedTime(t *testing.T) { 121 assert.NoError(t, unittest.PrepareTestDatabase()) 122 123 ttt, err := issues_model.GetIssueTotalTrackedTime(db.DefaultContext, &issues_model.IssuesOptions{MilestoneIDs: []int64{1}}, optional.Some(false)) 124 assert.NoError(t, err) 125 assert.EqualValues(t, 3682, ttt) 126 127 ttt, err = issues_model.GetIssueTotalTrackedTime(db.DefaultContext, &issues_model.IssuesOptions{MilestoneIDs: []int64{1}}, optional.Some(true)) 128 assert.NoError(t, err) 129 assert.EqualValues(t, 0, ttt) 130 131 ttt, err = issues_model.GetIssueTotalTrackedTime(db.DefaultContext, &issues_model.IssuesOptions{MilestoneIDs: []int64{1}}, optional.None[bool]()) 132 assert.NoError(t, err) 133 assert.EqualValues(t, 3682, ttt) 134 }