mirror of
https://github.com/discourse/discourse.git
synced 2025-05-26 06:21:33 +08:00
FEATURE: Add webhooks for user suspend and unsuspend (#23684)
This commit is contained in:
@ -311,6 +311,29 @@ RSpec.describe Admin::UsersController do
|
||||
)
|
||||
end
|
||||
|
||||
context "with webhook" do
|
||||
fab!(:user_web_hook) { Fabricate(:user_web_hook) }
|
||||
|
||||
it "enqueues a user_suspended webhook event" do
|
||||
expect do
|
||||
put "/admin/users/#{user.id}/suspend.json",
|
||||
params: {
|
||||
suspend_until: 5.hours.from_now,
|
||||
reason: "because I said so",
|
||||
}
|
||||
end.to change { Jobs::EmitWebHookEvent.jobs.size }.by(2)
|
||||
|
||||
user.reload
|
||||
job_args =
|
||||
Jobs::EmitWebHookEvent.jobs.last["args"].find do |args|
|
||||
args["event_name"] == "user_suspended"
|
||||
end
|
||||
expect(job_args).to be_present
|
||||
expect(job_args["id"]).to eq(user.id)
|
||||
expect(job_args["payload"]).to eq(WebHook.generate_payload(:user, user))
|
||||
end
|
||||
end
|
||||
|
||||
it "requires suspend_until and reason" do
|
||||
expect(user).not_to be_suspended
|
||||
put "/admin/users/#{user.id}/suspend.json", params: {}
|
||||
@ -496,6 +519,29 @@ RSpec.describe Admin::UsersController do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#unsuspend" do
|
||||
context "when logged in as an admin" do
|
||||
before { sign_in(admin) }
|
||||
|
||||
context "with webhook" do
|
||||
fab!(:user_web_hook) { Fabricate(:user_web_hook) }
|
||||
|
||||
it "enqueues a user_unsuspended webhook event" do
|
||||
user.update!(suspended_at: DateTime.now, suspended_till: 2.years.from_now)
|
||||
|
||||
expect do put "/admin/users/#{user.id}/unsuspend.json" end.to change {
|
||||
Jobs::EmitWebHookEvent.jobs.size
|
||||
}.by(1)
|
||||
|
||||
user.reload
|
||||
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||
expect(job_args["id"]).to eq(user.id)
|
||||
expect(job_args["payload"]).to eq(WebHook.generate_payload(:user, user))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#revoke_admin" do
|
||||
fab!(:another_admin) { Fabricate(:admin) }
|
||||
|
||||
|
Reference in New Issue
Block a user