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  }