FIX: FlagSockpuppets should not flag a post if a post of that user was already rejected by staff (#9328)
* FIX: FlagSockpuppets should not flag a post if a post of that user was already rejected by staff * Update spec/services/flag_sockpuppets_spec.rb Co-Authored-By: Robin Ward <robin.ward@gmail.com> Co-authored-by: Robin Ward <robin.ward@gmail.com>
This commit is contained in:
parent
acc16dada3
commit
b2f30aa0b5
|
@ -19,8 +19,6 @@ class SpamRule::FlagSockpuppets
|
|||
|
||||
def reply_is_from_sockpuppet?
|
||||
return false if @post.try(:post_number) == 1
|
||||
|
||||
first_post = @post.topic.posts.by_post_number.first
|
||||
return false if first_post.user.nil?
|
||||
|
||||
!first_post.user.staff? &&
|
||||
|
@ -41,11 +39,22 @@ class SpamRule::FlagSockpuppets
|
|||
locale: SiteSetting.default_locale
|
||||
)
|
||||
|
||||
PostActionCreator.create(Discourse.system_user, @post, :spam, message: message)
|
||||
flag_post(@post, message)
|
||||
|
||||
if (first_post = @post.topic.posts.by_post_number.first).try(:user).try(:new_user?)
|
||||
PostActionCreator.create(Discourse.system_user, first_post, :spam, message: message)
|
||||
end
|
||||
flag_post(first_post, message) if first_post&.user&.new_user?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def flag_post(post, message)
|
||||
can_trust_user = ReviewableFlaggedPost.where(status: Reviewable.statuses[:rejected], target_created_by: post.user).exists?
|
||||
return if can_trust_user
|
||||
|
||||
PostActionCreator.create(Discourse.system_user, post, :spam, message: message)
|
||||
end
|
||||
|
||||
def first_post
|
||||
@first_post ||= @post.topic.posts.by_post_number.first
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -150,5 +150,28 @@ describe SpamRule::FlagSockpuppets do
|
|||
expect(PostAction.where(user: system, post: post2, post_action_type_id: spam).exists?).to eq(true)
|
||||
expect(PostAction.where(user: system, post: post1, post_action_type_id: spam).exists?).to eq(false)
|
||||
end
|
||||
|
||||
it "doesn't flag the first post if it was already rejected by staff before" do
|
||||
flagged_post = Fabricate(
|
||||
:reviewable_flagged_post,
|
||||
target: post1, status: Reviewable.statuses[:rejected], target_created_by: post1.user
|
||||
)
|
||||
|
||||
described_class.new(post2).perform
|
||||
|
||||
expect(flagged_post.reload.status).to eq(Reviewable.statuses[:rejected])
|
||||
end
|
||||
|
||||
it "doesn't flag the post if another post of the same user was rejected by staff before" do
|
||||
another_post = Fabricate(:post, user: user1)
|
||||
flagged_post = Fabricate(
|
||||
:reviewable_flagged_post,
|
||||
target: another_post, status: Reviewable.statuses[:rejected], target_created_by: another_post.user
|
||||
)
|
||||
|
||||
described_class.new(post2).perform
|
||||
|
||||
expect(ReviewableFlaggedPost.where(target_created_by: user1).count).to eq(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue