From f2c34155489329cf44a1ac08c7d494ac8ddc809c Mon Sep 17 00:00:00 2001 From: Vinoth Kannan Date: Tue, 19 Feb 2019 12:23:42 +0530 Subject: [PATCH] FIX: Should not generate payload until active webhooks are exist --- app/models/concerns/has_destroyed_web_hook.rb | 2 +- lib/post_destroyer.rb | 4 ++-- spec/models/web_hook_spec.rb | 11 ++++++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/models/concerns/has_destroyed_web_hook.rb b/app/models/concerns/has_destroyed_web_hook.rb index 98d165d070c..081189ff83e 100644 --- a/app/models/concerns/has_destroyed_web_hook.rb +++ b/app/models/concerns/has_destroyed_web_hook.rb @@ -7,7 +7,7 @@ module HasDestroyedWebHook def enqueue_destroyed_web_hook type = self.class.name.underscore.to_sym - payload = WebHook.generate_payload(type, self) + payload = WebHook.generate_payload(type, self) if WebHook.active_web_hooks(type).exists? yield WebHook.enqueue_hooks(type, "#{type}_destroyed".to_sym, id: id, diff --git a/lib/post_destroyer.rb b/lib/post_destroyer.rb index fee0fc79ea8..9509a965644 100644 --- a/lib/post_destroyer.rb +++ b/lib/post_destroyer.rb @@ -45,12 +45,12 @@ class PostDestroyer end def destroy - payload = WebHook.generate_payload(:post, @post) + payload = WebHook.generate_payload(:post, @post) if WebHook.active_web_hooks(:post).exists? topic = @post.topic if @post.is_first_post? && topic topic_view = TopicView.new(topic.id, Discourse.system_user) - topic_payload = WebHook.generate_payload(:topic, topic_view, WebHookTopicViewSerializer) + topic_payload = WebHook.generate_payload(:topic, topic_view, WebHookTopicViewSerializer) if WebHook.active_web_hooks(:topic).exists? end delete_removed_posts_after = @opts[:delete_removed_posts_after] || SiteSetting.delete_removed_posts_after diff --git a/spec/models/web_hook_spec.rb b/spec/models/web_hook_spec.rb index 67e0f914a02..f424cb0033a 100644 --- a/spec/models/web_hook_spec.rb +++ b/spec/models/web_hook_spec.rb @@ -125,10 +125,13 @@ describe WebHook do end describe 'when there are no active hooks' do - it 'should not enqueue anything' do + it 'should not generate payload and enqueue anything' do topic_web_hook.destroy! post = PostCreator.create(user, raw: 'post', title: 'topic', skip_validations: true) expect(Jobs::EmitWebHookEvent.jobs.length).to eq(0) + + WebHook.expects(:generate_payload).times(0) + PostDestroyer.new(admin, post).destroy end end @@ -384,6 +387,12 @@ describe WebHook do expect(payload["id"]).to eq(tag.id) end + it 'should not generate payload if webhooks not exist' do + WebHook.expects(:generate_payload).times(0) + tag = Fabricate(:tag) + tag.destroy! + end + it 'should enqueue the right hooks for flag events' do post = Fabricate(:post) admin = Fabricate(:admin)