Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
FIX: Clean up posts and reviewables when deleteing an Akismet flagged…
… user. (#44) * FIX: When deleting an Akismet flagged user, we should approve existing reviewables and delete their posts. * FIX: Only act on pending akismet flagged posts
- Loading branch information
1 parent
c85e23b
commit 68206f1
Showing
5 changed files
with
113 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# frozen_string_literal: true | ||
|
||
module Jobs | ||
class ConfirmAkismetFlaggedPosts < Jobs::Base | ||
def execute(args) | ||
raise Discourse::InvalidParameters.new(:user_id) unless args[:user_id] | ||
raise Discourse::InvalidParameters.new(:performed_by_id) unless args[:performed_by_id] | ||
|
||
performed_by = User.find_by(id: args[:performed_by_id]) | ||
post_ids = Post.with_deleted.where(user_id: args[:user_id]).pluck(:id) | ||
|
||
ReviewableAkismetPost.where(target_id: post_ids, status: Reviewable.statuses[:pending]).find_each do |reviewable| | ||
reviewable.perform(performed_by, :confirm_spam) | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
RSpec.describe Jobs::ConfirmAkismetFlaggedPosts do | ||
describe '#execute' do | ||
let(:user) { Fabricate(:user) } | ||
|
||
it 'raises an exception if :user_id is not provided' do | ||
expect do | ||
subject.execute({}) | ||
end.to raise_error(Discourse::InvalidParameters) | ||
end | ||
|
||
it 'raises an exception if :performed_by_id is not provided' do | ||
expect do | ||
subject.execute(user_id: user.id) | ||
end.to raise_error(Discourse::InvalidParameters) | ||
end | ||
|
||
let(:admin) { Fabricate(:admin) } | ||
|
||
before do | ||
@user_post_reviewable = reviewable_post_for(user) | ||
end | ||
|
||
it 'approves every flagged post' do | ||
subject.execute(user_id: user.id, performed_by_id: admin.id) | ||
|
||
updated_post_reviewable = @user_post_reviewable.reload | ||
|
||
expect(updated_post_reviewable.status).to eq(Reviewable.statuses[:approved]) | ||
end | ||
|
||
it 'approves every flagged post even if the post was already deleted' do | ||
@user_post_reviewable.target.trash! | ||
subject.execute(user_id: user.id, performed_by_id: admin.id) | ||
|
||
updated_post_reviewable = @user_post_reviewable.reload | ||
|
||
expect(updated_post_reviewable.status).to eq(Reviewable.statuses[:approved]) | ||
end | ||
|
||
it 'only approves pending flagged posts' do | ||
@user_post_reviewable.perform(admin, :confirm_spam) | ||
last_update = @user_post_reviewable.updated_at | ||
subject.execute(user_id: user.id, performed_by_id: admin.id) | ||
|
||
updated_post_reviewable = @user_post_reviewable.reload | ||
|
||
expect(updated_post_reviewable.updated_at).to eq(last_update) | ||
end | ||
end | ||
|
||
def reviewable_post_for(user) | ||
post = Fabricate(:post, user: user) | ||
ReviewableAkismetPost.needs_review!(target: post, created_by: admin) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters