gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package issues_test
  4. import (
  5. "testing"
  6. issues_model "code.gitea.io/gitea/models/issues"
  7. "code.gitea.io/gitea/models/unittest"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestCancelStopwatch(t *testing.T) {
  12. assert.NoError(t, unittest.PrepareTestDatabase())
  13. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
  14. issue1 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  15. ok, err := issues_model.CancelStopwatch(t.Context(), user1, issue1)
  16. assert.NoError(t, err)
  17. assert.True(t, ok)
  18. unittest.AssertNotExistsBean(t, &issues_model.Stopwatch{UserID: user1.ID, IssueID: issue1.ID})
  19. unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{Type: issues_model.CommentTypeCancelTracking, PosterID: user1.ID, IssueID: issue1.ID})
  20. ok, err = issues_model.CancelStopwatch(t.Context(), user1, issue1)
  21. assert.NoError(t, err)
  22. assert.False(t, ok)
  23. }
  24. func TestStopwatchExists(t *testing.T) {
  25. assert.NoError(t, unittest.PrepareTestDatabase())
  26. assert.True(t, issues_model.StopwatchExists(t.Context(), 1, 1))
  27. assert.False(t, issues_model.StopwatchExists(t.Context(), 1, 2))
  28. }
  29. func TestHasUserStopwatch(t *testing.T) {
  30. assert.NoError(t, unittest.PrepareTestDatabase())
  31. exists, sw, _, err := issues_model.HasUserStopwatch(t.Context(), 1)
  32. assert.NoError(t, err)
  33. assert.True(t, exists)
  34. assert.Equal(t, int64(1), sw.ID)
  35. exists, _, _, err = issues_model.HasUserStopwatch(t.Context(), 3)
  36. assert.NoError(t, err)
  37. assert.False(t, exists)
  38. }
  39. func TestCreateOrStopIssueStopwatch(t *testing.T) {
  40. assert.NoError(t, unittest.PrepareTestDatabase())
  41. user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
  42. issue1 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  43. issue3 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 3})
  44. // create a new stopwatch
  45. ok, err := issues_model.CreateIssueStopwatch(t.Context(), user4, issue1)
  46. assert.NoError(t, err)
  47. assert.True(t, ok)
  48. unittest.AssertExistsAndLoadBean(t, &issues_model.Stopwatch{UserID: user4.ID, IssueID: issue1.ID})
  49. // should not create a second stopwatch for the same issue
  50. ok, err = issues_model.CreateIssueStopwatch(t.Context(), user4, issue1)
  51. assert.NoError(t, err)
  52. assert.False(t, ok)
  53. // on a different issue, it will finish the existing stopwatch and create a new one
  54. ok, err = issues_model.CreateIssueStopwatch(t.Context(), user4, issue3)
  55. assert.NoError(t, err)
  56. assert.True(t, ok)
  57. unittest.AssertNotExistsBean(t, &issues_model.Stopwatch{UserID: user4.ID, IssueID: issue1.ID})
  58. unittest.AssertExistsAndLoadBean(t, &issues_model.Stopwatch{UserID: user4.ID, IssueID: issue3.ID})
  59. // user2 already has a stopwatch in test fixture
  60. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  61. issue2 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2})
  62. ok, err = issues_model.FinishIssueStopwatch(t.Context(), user2, issue2)
  63. assert.NoError(t, err)
  64. assert.True(t, ok)
  65. unittest.AssertNotExistsBean(t, &issues_model.Stopwatch{UserID: user2.ID, IssueID: issue2.ID})
  66. unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{UserID: user2.ID, IssueID: issue2.ID})
  67. ok, err = issues_model.FinishIssueStopwatch(t.Context(), user2, issue2)
  68. assert.NoError(t, err)
  69. assert.False(t, ok)
  70. }