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

@ -8,7 +8,7 @@ RSpec.describe ReviewableHistory, type: :model do
it "adds a `created` history event when a reviewable is created" do
reviewable = ReviewableUser.needs_review!(target: user, created_by: admin)
reviewable.perform(moderator, :approve)
reviewable.perform(moderator, :approve_user)
reviewable = ReviewableUser.needs_review!(target: user, created_by: admin)
history = reviewable.history
@ -21,7 +21,7 @@ RSpec.describe ReviewableHistory, type: :model do
it "adds a `transitioned` event when transitioning" do
reviewable = ReviewableUser.needs_review!(target: user, created_by: admin)
reviewable.perform(moderator, :approve)
reviewable.perform(moderator, :approve_user)
reviewable = ReviewableUser.needs_review!(target: user, created_by: admin)
history = reviewable.history

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)

View File

@ -322,7 +322,7 @@ describe WebHook do
payload = JSON.parse(job_args["payload"])
expect(payload["id"]).to eq(admin.id)
ReviewableUser.find_by(target: user).perform(admin, :approve)
ReviewableUser.find_by(target: user).perform(admin, :approve_user)
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
expect(job_args["event_name"]).to eq("user_approved")
@ -515,7 +515,7 @@ describe WebHook do
payload = JSON.parse(job_args["payload"])
expect(payload["id"]).to eq(reviewable.id)
reviewable.perform(Discourse.system_user, :reject)
reviewable.perform(Discourse.system_user, :reject_user_delete)
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
expect(job_args["event_name"]).to eq("reviewable_transitioned_to")