You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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