gitea源码

reaction_test.go 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package issue
  4. import (
  5. "testing"
  6. issues_model "code.gitea.io/gitea/models/issues"
  7. repo_model "code.gitea.io/gitea/models/repo"
  8. "code.gitea.io/gitea/models/unittest"
  9. user_model "code.gitea.io/gitea/models/user"
  10. "code.gitea.io/gitea/modules/setting"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func addReaction(t *testing.T, doer *user_model.User, issue *issues_model.Issue, comment *issues_model.Comment, content string) {
  14. var reaction *issues_model.Reaction
  15. var err error
  16. if comment == nil {
  17. reaction, err = CreateIssueReaction(t.Context(), doer, issue, content)
  18. } else {
  19. reaction, err = CreateCommentReaction(t.Context(), doer, comment, content)
  20. }
  21. assert.NoError(t, err)
  22. assert.NotNil(t, reaction)
  23. }
  24. func TestIssueAddReaction(t *testing.T) {
  25. assert.NoError(t, unittest.PrepareTestDatabase())
  26. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
  27. issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  28. addReaction(t, user1, issue, nil, "heart")
  29. unittest.AssertExistsAndLoadBean(t, &issues_model.Reaction{Type: "heart", UserID: user1.ID, IssueID: issue.ID})
  30. }
  31. func TestIssueAddDuplicateReaction(t *testing.T) {
  32. assert.NoError(t, unittest.PrepareTestDatabase())
  33. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
  34. issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  35. addReaction(t, user1, issue, nil, "heart")
  36. reaction, err := CreateIssueReaction(t.Context(), user1, issue, "heart")
  37. assert.Error(t, err)
  38. assert.Equal(t, issues_model.ErrReactionAlreadyExist{Reaction: "heart"}, err)
  39. existingR := unittest.AssertExistsAndLoadBean(t, &issues_model.Reaction{Type: "heart", UserID: user1.ID, IssueID: issue.ID})
  40. assert.Equal(t, existingR.ID, reaction.ID)
  41. }
  42. func TestIssueDeleteReaction(t *testing.T) {
  43. assert.NoError(t, unittest.PrepareTestDatabase())
  44. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
  45. issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  46. addReaction(t, user1, issue, nil, "heart")
  47. err := issues_model.DeleteIssueReaction(t.Context(), user1.ID, issue.ID, "heart")
  48. assert.NoError(t, err)
  49. unittest.AssertNotExistsBean(t, &issues_model.Reaction{Type: "heart", UserID: user1.ID, IssueID: issue.ID})
  50. }
  51. func TestIssueReactionCount(t *testing.T) {
  52. assert.NoError(t, unittest.PrepareTestDatabase())
  53. setting.UI.ReactionMaxUserNum = 2
  54. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
  55. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  56. org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
  57. user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
  58. ghost := user_model.NewGhostUser()
  59. issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2})
  60. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
  61. addReaction(t, user1, issue, nil, "heart")
  62. addReaction(t, user2, issue, nil, "heart")
  63. addReaction(t, org3, issue, nil, "heart")
  64. addReaction(t, org3, issue, nil, "+1")
  65. addReaction(t, user4, issue, nil, "+1")
  66. addReaction(t, user4, issue, nil, "heart")
  67. addReaction(t, ghost, issue, nil, "-1")
  68. reactionsList, _, err := issues_model.FindReactions(t.Context(), issues_model.FindReactionsOptions{
  69. IssueID: issue.ID,
  70. })
  71. assert.NoError(t, err)
  72. assert.Len(t, reactionsList, 7)
  73. _, err = reactionsList.LoadUsers(t.Context(), repo)
  74. assert.NoError(t, err)
  75. reactions := reactionsList.GroupByType()
  76. assert.Len(t, reactions["heart"], 4)
  77. assert.Equal(t, 2, reactions["heart"].GetMoreUserCount())
  78. assert.Equal(t, user1.Name+", "+user2.Name, reactions["heart"].GetFirstUsers())
  79. assert.True(t, reactions["heart"].HasUser(1))
  80. assert.False(t, reactions["heart"].HasUser(5))
  81. assert.False(t, reactions["heart"].HasUser(0))
  82. assert.Len(t, reactions["+1"], 2)
  83. assert.Equal(t, 0, reactions["+1"].GetMoreUserCount())
  84. assert.Len(t, reactions["-1"], 1)
  85. }
  86. func TestIssueCommentAddReaction(t *testing.T) {
  87. assert.NoError(t, unittest.PrepareTestDatabase())
  88. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
  89. comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 1})
  90. addReaction(t, user1, nil, comment, "heart")
  91. unittest.AssertExistsAndLoadBean(t, &issues_model.Reaction{Type: "heart", UserID: user1.ID, IssueID: comment.IssueID, CommentID: comment.ID})
  92. }
  93. func TestIssueCommentDeleteReaction(t *testing.T) {
  94. assert.NoError(t, unittest.PrepareTestDatabase())
  95. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
  96. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  97. org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
  98. user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
  99. comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 1})
  100. addReaction(t, user1, nil, comment, "heart")
  101. addReaction(t, user2, nil, comment, "heart")
  102. addReaction(t, org3, nil, comment, "heart")
  103. addReaction(t, user4, nil, comment, "+1")
  104. reactionsList, _, err := issues_model.FindReactions(t.Context(), issues_model.FindReactionsOptions{
  105. IssueID: comment.IssueID,
  106. CommentID: comment.ID,
  107. })
  108. assert.NoError(t, err)
  109. assert.Len(t, reactionsList, 4)
  110. reactions := reactionsList.GroupByType()
  111. assert.Len(t, reactions["heart"], 3)
  112. assert.Len(t, reactions["+1"], 1)
  113. }
  114. func TestIssueCommentReactionCount(t *testing.T) {
  115. assert.NoError(t, unittest.PrepareTestDatabase())
  116. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
  117. comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 1})
  118. addReaction(t, user1, nil, comment, "heart")
  119. assert.NoError(t, issues_model.DeleteCommentReaction(t.Context(), user1.ID, comment.IssueID, comment.ID, "heart"))
  120. unittest.AssertNotExistsBean(t, &issues_model.Reaction{Type: "heart", UserID: user1.ID, IssueID: comment.IssueID, CommentID: comment.ID})
  121. }