2019-12-27 23:30:58 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-12-27 23:30:58 +03:00
2022-06-13 12:37:59 +03:00
package issues_test
2017-09-12 09:48:13 +03:00
import (
"testing"
2019-12-27 23:30:58 +03:00
"time"
2017-09-12 09:48:13 +03:00
2022-05-20 17:08:52 +03:00
"code.gitea.io/gitea/models/db"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2021-11-12 17:36:47 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2024-03-02 18:42:31 +03:00
"code.gitea.io/gitea/modules/optional"
2021-11-17 15:34:35 +03:00
2017-09-12 09:48:13 +03:00
"github.com/stretchr/testify/assert"
)
func TestAddTime ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2017-09-12 09:48:13 +03:00
2023-09-14 05:59:53 +03:00
org3 , err := user_model . GetUserByID ( db . DefaultContext , 3 )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
2022-06-13 12:37:59 +03:00
issue1 , err := issues_model . GetIssueByID ( db . DefaultContext , 1 )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
2021-03-14 21:52:12 +03:00
// 3661 = 1h 1min 1s
2023-09-14 05:59:53 +03:00
trackedTime , err := issues_model . AddTime ( db . DefaultContext , org3 , issue1 , 3661 , time . Now ( ) )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
assert . Equal ( t , int64 ( 3 ) , trackedTime . UserID )
assert . Equal ( t , int64 ( 1 ) , trackedTime . IssueID )
assert . Equal ( t , int64 ( 3661 ) , trackedTime . Time )
2022-08-16 05:22:25 +03:00
tt := unittest . AssertExistsAndLoadBean ( t , & issues_model . TrackedTime { UserID : 3 , IssueID : 1 } )
2019-12-27 23:30:58 +03:00
assert . Equal ( t , int64 ( 3661 ) , tt . Time )
2017-09-12 09:48:13 +03:00
2022-08-16 05:22:25 +03:00
comment := unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { Type : issues_model . CommentTypeAddTimeManual , PosterID : 3 , IssueID : 1 } )
2023-06-23 15:12:39 +03:00
assert . Equal ( t , "|3661" , comment . Content )
2017-09-12 09:48:13 +03:00
}
func TestGetTrackedTimes ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2017-09-12 09:48:13 +03:00
// by Issue
2022-06-13 12:37:59 +03:00
times , err := issues_model . GetTrackedTimes ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { IssueID : 1 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
assert . Len ( t , times , 1 )
2019-12-27 23:30:58 +03:00
assert . Equal ( t , int64 ( 400 ) , times [ 0 ] . Time )
2017-09-12 09:48:13 +03:00
2022-06-13 12:37:59 +03:00
times , err = issues_model . GetTrackedTimes ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { IssueID : - 1 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
assert . Len ( t , times , 0 )
// by User
2022-06-13 12:37:59 +03:00
times , err = issues_model . GetTrackedTimes ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { UserID : 1 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
2019-12-27 23:30:58 +03:00
assert . Len ( t , times , 3 )
assert . Equal ( t , int64 ( 400 ) , times [ 0 ] . Time )
2017-09-12 09:48:13 +03:00
2022-06-13 12:37:59 +03:00
times , err = issues_model . GetTrackedTimes ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { UserID : 3 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
assert . Len ( t , times , 0 )
// by Repo
2022-06-13 12:37:59 +03:00
times , err = issues_model . GetTrackedTimes ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { RepositoryID : 2 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
2019-12-27 23:30:58 +03:00
assert . Len ( t , times , 3 )
assert . Equal ( t , int64 ( 1 ) , times [ 0 ] . Time )
2022-06-13 12:37:59 +03:00
issue , err := issues_model . GetIssueByID ( db . DefaultContext , times [ 0 ] . IssueID )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
assert . Equal ( t , issue . RepoID , int64 ( 2 ) )
2022-06-13 12:37:59 +03:00
times , err = issues_model . GetTrackedTimes ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { RepositoryID : 1 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
2019-12-27 23:30:58 +03:00
assert . Len ( t , times , 5 )
2017-09-12 09:48:13 +03:00
2022-06-13 12:37:59 +03:00
times , err = issues_model . GetTrackedTimes ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { RepositoryID : 10 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
assert . Len ( t , times , 0 )
}
2023-09-29 16:04:14 +03:00
func TestTotalTimesForEachUser ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2017-09-12 09:48:13 +03:00
2023-10-03 13:30:41 +03:00
total , err := issues_model . TotalTimesForEachUser ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { IssueID : 1 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
assert . Len ( t , total , 1 )
for user , time := range total {
2023-06-19 19:40:06 +03:00
assert . EqualValues ( t , 1 , user . ID )
assert . EqualValues ( t , 400 , time )
2017-09-12 09:48:13 +03:00
}
2023-10-03 13:30:41 +03:00
total , err = issues_model . TotalTimesForEachUser ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { IssueID : 2 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
2019-12-27 23:30:58 +03:00
assert . Len ( t , total , 2 )
2017-09-12 09:48:13 +03:00
for user , time := range total {
2019-12-27 23:30:58 +03:00
if user . ID == 2 {
2023-06-19 19:40:06 +03:00
assert . EqualValues ( t , 3662 , time )
2019-12-27 23:30:58 +03:00
} else if user . ID == 1 {
2023-06-19 19:40:06 +03:00
assert . EqualValues ( t , 20 , time )
2019-12-27 23:30:58 +03:00
} else {
assert . Error ( t , assert . AnError )
}
2017-09-12 09:48:13 +03:00
}
2023-10-03 13:30:41 +03:00
total , err = issues_model . TotalTimesForEachUser ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { IssueID : 5 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
assert . Len ( t , total , 1 )
for user , time := range total {
2023-06-19 19:40:06 +03:00
assert . EqualValues ( t , 2 , user . ID )
assert . EqualValues ( t , 1 , time )
2017-09-12 09:48:13 +03:00
}
2023-10-03 13:30:41 +03:00
total , err = issues_model . TotalTimesForEachUser ( db . DefaultContext , & issues_model . FindTrackedTimesOptions { IssueID : 4 } )
2017-09-12 09:48:13 +03:00
assert . NoError ( t , err )
2019-12-27 23:30:58 +03:00
assert . Len ( t , total , 2 )
2017-09-12 09:48:13 +03:00
}
2023-10-19 17:08:31 +03:00
func TestGetIssueTotalTrackedTime ( t * testing . T ) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2024-03-02 18:42:31 +03:00
ttt , err := issues_model . GetIssueTotalTrackedTime ( db . DefaultContext , & issues_model . IssuesOptions { MilestoneIDs : [ ] int64 { 1 } } , optional . Some ( false ) )
2023-10-19 17:08:31 +03:00
assert . NoError ( t , err )
assert . EqualValues ( t , 3682 , ttt )
2024-03-02 18:42:31 +03:00
ttt , err = issues_model . GetIssueTotalTrackedTime ( db . DefaultContext , & issues_model . IssuesOptions { MilestoneIDs : [ ] int64 { 1 } } , optional . Some ( true ) )
2023-10-19 17:08:31 +03:00
assert . NoError ( t , err )
assert . EqualValues ( t , 0 , ttt )
2024-01-15 18:07:22 +03:00
2024-03-02 18:42:31 +03:00
ttt , err = issues_model . GetIssueTotalTrackedTime ( db . DefaultContext , & issues_model . IssuesOptions { MilestoneIDs : [ ] int64 { 1 } } , optional . None [ bool ] ( ) )
2024-01-15 18:07:22 +03:00
assert . NoError ( t , err )
assert . EqualValues ( t , 3682 , ttt )
2023-10-19 17:08:31 +03:00
}