forked from gitea/gitea
		
	 ef4fc30246
			
		
	
	
		ef4fc30246
		
			
		
	
	
	
	
		
			
			GetActiveStopwatch & 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>
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			79 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})
 | |
| }
 |