From 40a8584bbb4768d2527ad1558034ebd2ea1f5077 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) --- 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)