mirror of
https://github.com/discourse/discourse.git
synced 2025-02-07 00:15:15 +08:00
FIX: post & topic destroyed hooks not triggering with tag filter
This commit is contained in:
parent
2db3652338
commit
167d85c21f
|
@ -65,10 +65,12 @@ class WebHook < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.enqueue_topic_hooks(event, topic)
|
def self.enqueue_topic_hooks(event, topic, payload = nil)
|
||||||
if active_web_hooks('topic').exists? && topic.present?
|
if active_web_hooks('topic').exists? && topic.present?
|
||||||
topic_view = TopicView.new(topic.id, Discourse.system_user)
|
payload ||= begin
|
||||||
payload = WebHook.generate_payload(:topic, topic_view, WebHookTopicViewSerializer)
|
topic_view = TopicView.new(topic.id, Discourse.system_user)
|
||||||
|
WebHook.generate_payload(:topic, topic_view, WebHookTopicViewSerializer)
|
||||||
|
end
|
||||||
|
|
||||||
WebHook.enqueue_hooks(:topic, event,
|
WebHook.enqueue_hooks(:topic, event,
|
||||||
id: topic.id,
|
id: topic.id,
|
||||||
|
@ -79,9 +81,9 @@ class WebHook < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.enqueue_post_hooks(event, post)
|
def self.enqueue_post_hooks(event, post, payload = nil)
|
||||||
if active_web_hooks('post').exists? && post.present?
|
if active_web_hooks('post').exists? && post.present?
|
||||||
payload = WebHook.generate_payload(:post, post)
|
payload ||= WebHook.generate_payload(:post, post)
|
||||||
|
|
||||||
WebHook.enqueue_hooks(:post, event,
|
WebHook.enqueue_hooks(:post, event,
|
||||||
id: post.id,
|
id: post.id,
|
||||||
|
|
|
@ -61,19 +61,11 @@ class PostDestroyer
|
||||||
mark_for_deletion(delete_removed_posts_after)
|
mark_for_deletion(delete_removed_posts_after)
|
||||||
end
|
end
|
||||||
DiscourseEvent.trigger(:post_destroyed, @post, @opts, @user)
|
DiscourseEvent.trigger(:post_destroyed, @post, @opts, @user)
|
||||||
WebHook.enqueue_hooks(:post, :post_destroyed,
|
WebHook.enqueue_post_hooks(:post_destroyed, @post, payload)
|
||||||
id: @post.id,
|
|
||||||
category_id: @post&.topic&.category_id,
|
|
||||||
payload: payload
|
|
||||||
) if WebHook.active_web_hooks(:post).exists?
|
|
||||||
|
|
||||||
if @post.is_first_post? && @post.topic
|
if @post.is_first_post? && @post.topic
|
||||||
DiscourseEvent.trigger(:topic_destroyed, @post.topic, @user)
|
DiscourseEvent.trigger(:topic_destroyed, @post.topic, @user)
|
||||||
WebHook.enqueue_hooks(:topic, :topic_destroyed,
|
WebHook.enqueue_topic_hooks(:topic_destroyed, @post.topic, topic_payload)
|
||||||
id: topic.id,
|
|
||||||
category_id: topic&.category_id,
|
|
||||||
payload: topic_payload
|
|
||||||
) if WebHook.active_web_hooks(:topic).exists?
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -257,6 +257,33 @@ describe WebHook do
|
||||||
expect(payload["id"]).to eq(post.topic.id)
|
expect(payload["id"]).to eq(post.topic.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should enqueue the destroyed hooks with tag filter for post events' do
|
||||||
|
tag = Fabricate(:tag)
|
||||||
|
Fabricate(:web_hook, tags: [tag])
|
||||||
|
|
||||||
|
post = PostCreator.create!(user,
|
||||||
|
raw: 'post',
|
||||||
|
topic_id: topic.id,
|
||||||
|
reply_to_post_number: 1,
|
||||||
|
skip_validations: true
|
||||||
|
)
|
||||||
|
|
||||||
|
topic.tags = [tag]
|
||||||
|
topic.save!
|
||||||
|
|
||||||
|
Jobs::EmitWebHookEvent.jobs.clear
|
||||||
|
PostDestroyer.new(user, post).destroy
|
||||||
|
|
||||||
|
job = Jobs::EmitWebHookEvent.new
|
||||||
|
job.expects(:web_hook_request).times(2)
|
||||||
|
|
||||||
|
args = Jobs::EmitWebHookEvent.jobs[1]["args"].first
|
||||||
|
job.execute(args.with_indifferent_access)
|
||||||
|
|
||||||
|
args = Jobs::EmitWebHookEvent.jobs[2]["args"].first
|
||||||
|
job.execute(args.with_indifferent_access)
|
||||||
|
end
|
||||||
|
|
||||||
it 'should enqueue the right hooks for user events' do
|
it 'should enqueue the right hooks for user events' do
|
||||||
Fabricate(:user_web_hook, active: true)
|
Fabricate(:user_web_hook, active: true)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user