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