mirror of
https://github.com/discourse/discourse.git
synced 2025-06-08 00:17:19 +08:00
Add new web hook serializers
This commit is contained in:
@ -50,6 +50,18 @@ module Jobs
|
|||||||
args[:payload] = WebHookUserSerializer.new(user, scope: guardian, root: false).as_json
|
args[:payload] = WebHookUserSerializer.new(user, scope: guardian, root: false).as_json
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setup_group(args)
|
||||||
|
group = Group.find(args[:group_id])
|
||||||
|
return if group.blank?
|
||||||
|
args[:payload] = WebHookGroupSerializer.new(group, scope: guardian, root: false).as_json
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup_category(args)
|
||||||
|
category = Category.find(args[:category_id])
|
||||||
|
return if category.blank?
|
||||||
|
args[:payload] = WebHookCategorySerializer.new(category, scope: guardian, root: false).as_json
|
||||||
|
end
|
||||||
|
|
||||||
def ping_event?(event_type)
|
def ping_event?(event_type)
|
||||||
event_type.to_s == 'ping'.freeze
|
event_type.to_s == 'ping'.freeze
|
||||||
end
|
end
|
||||||
|
12
app/serializers/web_hook_category_serializer.rb
Normal file
12
app/serializers/web_hook_category_serializer.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
class WebHookCategorySerializer < CategorySerializer
|
||||||
|
|
||||||
|
%i{
|
||||||
|
can_edit
|
||||||
|
notification_level
|
||||||
|
}.each do |attr|
|
||||||
|
define_method("include_#{attr}?") do
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
12
app/serializers/web_hook_group_serializer.rb
Normal file
12
app/serializers/web_hook_group_serializer.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
class WebHookGroupSerializer < GroupShowSerializer
|
||||||
|
|
||||||
|
%i{
|
||||||
|
is_group_user
|
||||||
|
is_group_owner
|
||||||
|
}.each do |attr|
|
||||||
|
define_method("include_#{attr}?") do
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -21,6 +21,9 @@ Fabricator(:wildcard_web_hook, from: :web_hook) do
|
|||||||
wildcard_web_hook true
|
wildcard_web_hook true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Fabricator(:post_web_hook, from: :web_hook) do
|
||||||
|
end
|
||||||
|
|
||||||
Fabricator(:topic_web_hook, from: :web_hook) do
|
Fabricator(:topic_web_hook, from: :web_hook) do
|
||||||
transient topic_hook: WebHookEventType.find_by(name: 'topic')
|
transient topic_hook: WebHookEventType.find_by(name: 'topic')
|
||||||
|
|
||||||
@ -36,3 +39,19 @@ Fabricator(:user_web_hook, from: :web_hook) do
|
|||||||
web_hook.web_hook_event_types = [transients[:user_hook]]
|
web_hook.web_hook_event_types = [transients[:user_hook]]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Fabricator(:group_web_hook, from: :web_hook) do
|
||||||
|
transient group_hook: WebHookEventType.find_by(name: 'group')
|
||||||
|
|
||||||
|
after_build do |web_hook, transients|
|
||||||
|
web_hook.web_hook_event_types = [transients[:group_hook]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Fabricator(:category_web_hook, from: :web_hook) do
|
||||||
|
transient category_hook: WebHookEventType.find_by(name: 'category')
|
||||||
|
|
||||||
|
after_build do |web_hook, transients|
|
||||||
|
web_hook.web_hook_event_types = [transients[:category_hook]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@ -56,9 +56,14 @@ describe Jobs::EmitWebHookEvent do
|
|||||||
stub_request(:post, "https://meta.discourse.org/webhook_listener")
|
stub_request(:post, "https://meta.discourse.org/webhook_listener")
|
||||||
.to_return(body: 'OK', status: 200)
|
.to_return(body: 'OK', status: 200)
|
||||||
|
|
||||||
expect do
|
WebHookEventType.all.pluck(:name).each do |name|
|
||||||
subject.execute(web_hook_id: post_hook.id, event_type: 'post', post_id: post.id)
|
web_hook_id = Fabricate("#{name}_web_hook").id
|
||||||
end.to change(WebHookEvent, :count).by(1)
|
object_id = Fabricate(name).id
|
||||||
|
|
||||||
|
expect do
|
||||||
|
subject.execute(web_hook_id: web_hook_id, event_type: name, "#{name}_id": object_id)
|
||||||
|
end.to change(WebHookEvent, :count).by(1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'skips silently on missing post' do
|
it 'skips silently on missing post' do
|
||||||
|
Reference in New Issue
Block a user