FIX: The option to delete replies was missing from the new review queue

This commit is contained in:
Robin Ward 2019-04-04 15:51:36 -04:00
parent dd5b8bd85e
commit 2055804e95
3 changed files with 92 additions and 3 deletions

View File

@ -67,7 +67,25 @@ class ReviewableFlaggedPost < Reviewable
if guardian.is_staff?
delete = actions.add_bundle("#{id}-delete", icon: "far-trash-alt", label: "reviewables.actions.delete.title")
build_action(actions, :delete_and_ignore, icon: 'external-link-alt', bundle: delete)
if post.reply_count > 0
build_action(
actions,
:delete_and_ignore_replies,
icon: 'external-link-alt',
confirm: true,
bundle: delete
)
end
build_action(actions, :delete_and_agree, icon: 'thumbs-up', bundle: delete)
if post.reply_count > 0
build_action(
actions,
:delete_and_agree_replies,
icon: 'external-link-alt',
bundle: delete,
confirm: true
)
end
end
end
@ -192,11 +210,32 @@ class ReviewableFlaggedPost < Reviewable
result
end
def perform_delete_and_ignore_replies(performed_by, args)
result = perform_ignore(performed_by, args)
replies = PostReply.where(post_id: post.id).includes(:reply).map(&:reply)
PostDestroyer.new(performed_by, post).destroy
replies.each { |reply| PostDestroyer.new(performed_by, reply).destroy }
result
end
def perform_delete_and_agree(performed_by, args)
result = agree(performed_by, args)
PostDestroyer.new(performed_by, post).destroy
result
end
def perform_delete_and_agree_replies(performed_by, args)
result = agree(performed_by, args)
replies = PostReply.where(post_id: post.id).includes(:reply).map(&:reply)
PostDestroyer.new(performed_by, post).destroy
replies.each { |reply| PostDestroyer.new(performed_by, reply).destroy }
result
end
protected
def agree(performed_by, args)

View File

@ -4397,11 +4397,19 @@ en:
delete:
title: "Delete..."
delete_and_ignore:
title: "Delete Post and Ignore flag"
title: "Delete Post and Ignore"
description: "Delete post; if the first post, delete the topic as well"
delete_and_ignore_replies:
title: "Delete Post + Replies and Ignore"
description: "Delete post and all of its replies; if the first post, delete the topic as well"
confirm: "Are you sure you want to delete the replies to the post as well?"
delete_and_agree:
title: "Delete Post and Agree with flag"
title: "Delete Post and Agree"
description: "Delete post; if the first post, delete the topic as well"
delete_and_agree_replies:
title: "Delete Post + Replies and Agree"
description: "Delete post and all of its replies; if the first post, delete the topic as well"
confirm: "Are you sure you want to delete the replies to the post as well?"
disagree_and_restore:
title: "Disagree and Restore Post"
description: "Restore the post so that all users can see it."

View File

@ -34,7 +34,9 @@ RSpec.describe ReviewableFlaggedPost, type: :model do
expect(actions.has?(:disagree)).to eq(true)
expect(actions.has?(:ignore)).to eq(true)
expect(actions.has?(:delete_and_ignore)).to eq(true)
expect(actions.has?(:delete_and_ignore_replies)).to eq(false)
expect(actions.has?(:delete_and_agree)).to eq(true)
expect(actions.has?(:delete_and_replies)).to eq(false)
expect(actions.has?(:disagree_and_restore)).to eq(false)
end
@ -44,6 +46,13 @@ RSpec.describe ReviewableFlaggedPost, type: :model do
expect(reviewable.actions_for(guardian).has?(:agree_and_restore)).to eq(true)
end
it "returns delete replies options if there are replies" do
post.update(reply_count: 3)
expect(reviewable.actions_for(guardian).has?(:delete_and_agree_replies)).to eq(true)
expect(reviewable.actions_for(guardian).has?(:delete_and_ignore_replies)).to eq(true)
end
it "returns appropriate actions for a hidden post" do
post.update(hidden: true, hidden_at: Time.now)
expect(reviewable.actions_for(guardian).has?(:agree_and_hide)).to eq(false)
@ -107,13 +116,29 @@ RSpec.describe ReviewableFlaggedPost, type: :model do
expect(score.reload).to be_ignored
end
it "delete_and_defer ignores the flags and deletes post" do
it "delete_and_ignore ignores the flags and deletes post" do
reviewable.perform(moderator, :delete_and_ignore)
expect(reviewable).to be_ignored
expect(score.reload).to be_ignored
expect(post.reload.deleted_at).to be_present
end
it "delete_and_ignore_replies ignores the flags and deletes post + replies" do
reply = PostCreator.create(
Fabricate(:user),
raw: 'this is the reply text',
reply_to_post_number: post.post_number,
topic_id: post.topic_id
)
post.reload
reviewable.perform(moderator, :delete_and_ignore_replies)
expect(reviewable).to be_ignored
expect(score.reload).to be_ignored
expect(post.reload.deleted_at).to be_present
expect(reply.reload.deleted_at).to be_present
end
it "delete_and_agree agrees with the flags and deletes post" do
reviewable.perform(moderator, :delete_and_agree)
expect(reviewable).to be_approved
@ -121,6 +146,23 @@ RSpec.describe ReviewableFlaggedPost, type: :model do
expect(post.reload.deleted_at).to be_present
end
it "delete_and_agree_replies agrees w/ the flags and deletes post + replies" do
reply = PostCreator.create(
Fabricate(:user),
raw: 'this is the reply text',
reply_to_post_number: post.post_number,
topic_id: post.topic_id
)
post.reload
reviewable.perform(moderator, :delete_and_agree_replies)
expect(reviewable).to be_approved
expect(score.reload).to be_agreed
expect(post.reload.deleted_at).to be_present
expect(reply.reload.deleted_at).to be_present
end
it "disagrees with the flags" do
reviewable.perform(moderator, :disagree)
expect(reviewable).to be_rejected