FEATURE: Clarify Reviewable User Actions

"Approve" is now "Approve User" and "Delete" is a dropdown with a choice
that allows you to block.
This commit is contained in:
Robin Ward
2019-04-17 11:26:43 -04:00
parent 12a5c69abd
commit 14f9d40e48
12 changed files with 103 additions and 35 deletions

View File

@ -12,17 +12,18 @@ RSpec.describe ReviewableUser, type: :model do
context "actions_for" do
let(:reviewable) { Fabricate(:reviewable) }
it "returns approve/disapprove in the pending state" do
it "returns correct actions in the pending state" do
actions = reviewable.actions_for(Guardian.new(moderator))
expect(actions.has?(:approve)).to eq(true)
expect(actions.has?(:reject)).to eq(true)
expect(actions.has?(:approve_user)).to eq(true)
expect(actions.has?(:reject_user_delete)).to eq(true)
expect(actions.has?(:reject_user_block)).to eq(true)
end
it "doesn't return anything in the approved state" do
reviewable.status = Reviewable.statuses[:approved]
actions = reviewable.actions_for(Guardian.new(moderator))
expect(actions.has?(:approve)).to eq(false)
expect(actions.has?(:reject)).to eq(false)
expect(actions.has?(:approve_user)).to eq(false)
expect(actions.has?(:reject_user_delete)).to eq(false)
end
end
@ -52,7 +53,7 @@ RSpec.describe ReviewableUser, type: :model do
let(:reviewable) { Fabricate(:reviewable) }
context "approve" do
it "allows us to approve a user" do
result = reviewable.perform(moderator, :approve)
result = reviewable.perform(moderator, :approve_user)
expect(result.success?).to eq(true)
expect(reviewable.pending?).to eq(false)
@ -64,7 +65,7 @@ RSpec.describe ReviewableUser, type: :model do
end
it "allows us to reject a user" do
result = reviewable.perform(moderator, :reject)
result = reviewable.perform(moderator, :reject_user_delete)
expect(result.success?).to eq(true)
expect(reviewable.pending?).to eq(false)
@ -75,9 +76,27 @@ RSpec.describe ReviewableUser, type: :model do
expect(reviewable.target).to be_blank
end
it "allows us to reject and block a user" do
email = reviewable.target.email
ip = reviewable.target.ip_address
result = reviewable.perform(moderator, :reject_user_block)
expect(result.success?).to eq(true)
expect(reviewable.pending?).to eq(false)
expect(reviewable.rejected?).to eq(true)
# Rejecting deletes the user record
reviewable.reload
expect(reviewable.target).to be_blank
expect(ScreenedEmail.should_block?(email)).to eq(true)
expect(ScreenedIpAddress.should_block?(ip)).to eq(true)
end
it "allows us to reject a user who has posts" do
Fabricate(:post, user: reviewable.target)
result = reviewable.perform(moderator, :reject)
result = reviewable.perform(moderator, :reject_user_delete)
expect(result.success?).to eq(true)
expect(reviewable.pending?).to eq(false)
@ -92,7 +111,7 @@ RSpec.describe ReviewableUser, type: :model do
it "allows us to reject a user who has been deleted" do
reviewable.target.destroy!
reviewable.reload
result = reviewable.perform(moderator, :reject)
result = reviewable.perform(moderator, :reject_user_delete)
expect(result.success?).to eq(true)
expect(reviewable.rejected?).to eq(true)
expect(reviewable.target).to be_blank
@ -131,7 +150,7 @@ RSpec.describe ReviewableUser, type: :model do
end
after do
ReviewableUser.find_by(target: user).perform(admin, :approve)
ReviewableUser.find_by(target: user).perform(admin, :approve_user)
end
it "enqueues a 'signup after approval' email if must_approve_users is true" do
@ -151,7 +170,7 @@ RSpec.describe ReviewableUser, type: :model do
it 'triggers a extensibility event' do
user && admin # bypass the user_created event
event = DiscourseEvent.track_events {
ReviewableUser.find_by(target: user).perform(admin, :approve)
ReviewableUser.find_by(target: user).perform(admin, :approve_user)
}.first
expect(event[:event_name]).to eq(:user_approved)
@ -161,7 +180,7 @@ RSpec.describe ReviewableUser, type: :model do
it 'triggers a extensibility event' do
user && admin # bypass the user_created event
event = DiscourseEvent.track_events {
ReviewableUser.find_by(target: user).perform(admin, :approve)
ReviewableUser.find_by(target: user).perform(admin, :approve_user)
}.first
expect(event[:event_name]).to eq(:user_approved)