 ef4fc30246
			
		
	
	
	
	
	ef4fc30246GetActiveStopwatch & HasUserStopwatch is a hot piece of code that is repeatedly called and on examination of the cpu profile for TestGit it represents 0.44 seconds of CPU time. This PR reduces this time to 80ms. --------- Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: KN4CK3R <admin@oldschoolhack.me> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: delvh <leon@kske.dev>
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2020 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package issues_test
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"code.gitea.io/gitea/models/db"
 | |
| 	issues_model "code.gitea.io/gitea/models/issues"
 | |
| 	"code.gitea.io/gitea/models/unittest"
 | |
| 	user_model "code.gitea.io/gitea/models/user"
 | |
| 	"code.gitea.io/gitea/modules/timeutil"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestCancelStopwatch(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	user1, err := user_model.GetUserByID(db.DefaultContext, 1)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	issue1, err := issues_model.GetIssueByID(db.DefaultContext, 1)
 | |
| 	assert.NoError(t, err)
 | |
| 	issue2, err := issues_model.GetIssueByID(db.DefaultContext, 2)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	err = issues_model.CancelStopwatch(user1, issue1)
 | |
| 	assert.NoError(t, err)
 | |
| 	unittest.AssertNotExistsBean(t, &issues_model.Stopwatch{UserID: user1.ID, IssueID: issue1.ID})
 | |
| 
 | |
| 	_ = unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{Type: issues_model.CommentTypeCancelTracking, PosterID: user1.ID, IssueID: issue1.ID})
 | |
| 
 | |
| 	assert.Nil(t, issues_model.CancelStopwatch(user1, issue2))
 | |
| }
 | |
| 
 | |
| func TestStopwatchExists(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	assert.True(t, issues_model.StopwatchExists(1, 1))
 | |
| 	assert.False(t, issues_model.StopwatchExists(1, 2))
 | |
| }
 | |
| 
 | |
| func TestHasUserStopwatch(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	exists, sw, _, err := issues_model.HasUserStopwatch(db.DefaultContext, 1)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.True(t, exists)
 | |
| 	assert.Equal(t, int64(1), sw.ID)
 | |
| 
 | |
| 	exists, _, _, err = issues_model.HasUserStopwatch(db.DefaultContext, 3)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.False(t, exists)
 | |
| }
 | |
| 
 | |
| func TestCreateOrStopIssueStopwatch(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	user2, err := user_model.GetUserByID(db.DefaultContext, 2)
 | |
| 	assert.NoError(t, err)
 | |
| 	user3, err := user_model.GetUserByID(db.DefaultContext, 3)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	issue1, err := issues_model.GetIssueByID(db.DefaultContext, 1)
 | |
| 	assert.NoError(t, err)
 | |
| 	issue2, err := issues_model.GetIssueByID(db.DefaultContext, 2)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	assert.NoError(t, issues_model.CreateOrStopIssueStopwatch(user3, issue1))
 | |
| 	sw := unittest.AssertExistsAndLoadBean(t, &issues_model.Stopwatch{UserID: 3, IssueID: 1})
 | |
| 	assert.LessOrEqual(t, sw.CreatedUnix, timeutil.TimeStampNow())
 | |
| 
 | |
| 	assert.NoError(t, issues_model.CreateOrStopIssueStopwatch(user2, issue2))
 | |
| 	unittest.AssertNotExistsBean(t, &issues_model.Stopwatch{UserID: 2, IssueID: 2})
 | |
| 	unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{UserID: 2, IssueID: 2})
 | |
| }
 |