From 5a8e6de42ca91dcbfd500497332bae0f3e1ce96d Mon Sep 17 00:00:00 2001 From: Jarek Radosz Date: Mon, 22 Nov 2021 12:31:53 +0100 Subject: [PATCH] FIX: Don't publish polls on message bus when there are no polls (#15041) `poll` plugin was publishing on `/polls/[topic_id]` every time a non-first post was created. I can't imagine this being needed. It regressed 3 years ago in https://github.com/discourse/discourse/pull/6359 --- plugins/poll/plugin.rb | 9 ++++---- plugins/poll/spec/lib/poll_spec.rb | 37 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb index 078d40c0ec7..677852cc059 100644 --- a/plugins/poll/plugin.rb +++ b/plugins/poll/plugin.rb @@ -160,10 +160,11 @@ after_initialize do guardian = Guardian.new(user) DiscoursePoll::Poll.schedule_jobs(post) - unless post.is_first_post? - polls = ActiveModel::ArraySerializer.new(post.polls, each_serializer: PollSerializer, root: false, scope: guardian).as_json - post.publish_message!("/polls/#{post.topic_id}", post_id: post.id, polls: polls) - end + next if post.is_first_post? + next if post.custom_fields[DiscoursePoll::HAS_POLLS].blank? + + polls = ActiveModel::ArraySerializer.new(post.polls, each_serializer: PollSerializer, root: false, scope: guardian).as_json + post.publish_message!("/polls/#{post.topic_id}", post_id: post.id, polls: polls) end on(:merging_users) do |source_user, target_user| diff --git a/plugins/poll/spec/lib/poll_spec.rb b/plugins/poll/spec/lib/poll_spec.rb index 92740546c07..139a82dd7cd 100644 --- a/plugins/poll/spec/lib/poll_spec.rb +++ b/plugins/poll/spec/lib/poll_spec.rb @@ -128,4 +128,41 @@ describe DiscoursePoll::Poll do ) end end + + describe "post_created" do + it "publishes on message bus if a there are polls" do + first_post = Fabricate(:post) + topic = first_post.topic + creator = PostCreator.new(user, + topic_id: topic.id, + raw: <<~RAW + [poll] + * 1 + * 2 + [/poll] + RAW + ) + + messages = MessageBus.track_publish("/polls/#{topic.id}") do + creator.create! + end + + expect(messages.count).to eq(1) + end + + it "does not publish on message bus when a post with no polls is created" do + first_post = Fabricate(:post) + topic = first_post.topic + creator = PostCreator.new(user, + topic_id: topic.id, + raw: "Just a post with definitely no polls" + ) + + messages = MessageBus.track_publish("/polls/#{topic.id}") do + creator.create! + end + + expect(messages.count).to eq(0) + end + end end