From 9bb188176e3bf3225783267b858763f1543f662e Mon Sep 17 00:00:00 2001 From: Gusted Date: Fri, 29 Dec 2023 15:35:08 +0100 Subject: [PATCH] [MODERATION] Block issue creation when blocked by repo owner (squash) - Block the creation of a issue if the user is blocked by the repository owner. - Fix integration tests (This should ideally in the future all be self-created fixtures instead of relying on the existing ones as a small condition can make the tests be inaccurate). (cherry picked from commit 88d3ee333aa91814bbe0b11d9fc1e62ffecae1b9) (cherry picked from commit 146c82d232a5a4a81bbbebcae568b5c3b6117804) (cherry picked from commit d9dc25d0382acf819900eae5f652d682c3594ef5) (cherry picked from commit cd1eadd9234205bce443e61c52415de342493b13) (cherry picked from commit 40a8584bbb4768d2527ad1558034ebd2ea1f5077) --- services/issue/comments.go | 4 ++-- tests/integration/block_test.go | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/services/issue/comments.go b/services/issue/comments.go index cd17641090..d1645d5a80 100644 --- a/services/issue/comments.go +++ b/services/issue/comments.go @@ -46,8 +46,8 @@ func CreateRefComment(ctx context.Context, doer *user_model.User, repo *repo_mod // CreateIssueComment creates a plain issue comment. func CreateIssueComment(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, issue *issues_model.Issue, content string, attachments []string) (*issues_model.Comment, error) { - // Check if doer is blocked by the poster of the issue. - if user_model.IsBlocked(ctx, issue.PosterID, doer.ID) { + // Check if doer is blocked by the poster of the issue or by the owner of the repository. + if user_model.IsBlockedMultiple(ctx, []int64{issue.PosterID, repo.OwnerID}, doer.ID) { return nil, user_model.ErrBlockedByUser } diff --git a/tests/integration/block_test.go b/tests/integration/block_test.go index 70e3fc08a5..4f8249f8cc 100644 --- a/tests/integration/block_test.go +++ b/tests/integration/block_test.go @@ -168,6 +168,9 @@ func TestBlockActions(t *testing.T) { repo7 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 7, OwnerID: blockedUser2.ID}) issue4 := unittest.AssertExistsAndLoadBean(t, &issue_model.Issue{ID: 4, RepoID: repo2.ID}) issue4URL := fmt.Sprintf("/%s/issues/%d", repo2.FullName(), issue4.Index) + repo42 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 42, OwnerID: doer.ID}) + issue10 := unittest.AssertExistsAndLoadBean(t, &issue_model.Issue{ID: 10, RepoID: repo42.ID}, unittest.Cond("poster_id != ?", doer.ID)) + issue10URL := fmt.Sprintf("/%s/issues/%d", repo42.FullName(), issue10.Index) // NOTE: Sessions shouldn't be shared, because in some situations flash // messages are persistent and that would interfere with accurate test // results. @@ -206,8 +209,8 @@ func TestBlockActions(t *testing.T) { session := loginUser(t, blockedUser.Name) - req := NewRequestWithValues(t, "POST", path.Join(issue4URL, "/comments"), map[string]string{ - "_csrf": GetCSRF(t, session, issue4URL), + req := NewRequestWithValues(t, "POST", path.Join(issue10URL, "/comments"), map[string]string{ + "_csrf": GetCSRF(t, session, issue10URL), "content": "Not a kind comment", }) session.MakeRequest(t, req, http.StatusOK)