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.4KB

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