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.

issue_reaction_test.go 5.6KB

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