diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb index 18d5b075aa3..be758961f8c 100644 --- a/plugins/poll/plugin.rb +++ b/plugins/poll/plugin.rb @@ -70,6 +70,7 @@ after_initialize do validator = DiscoursePoll::PollsValidator.new(self) return unless (polls = validator.validate_polls) + return if polls.blank? && self.id.blank? if polls.present? validator = DiscoursePoll::PostValidator.new(self) @@ -78,6 +79,8 @@ after_initialize do # are we updating a post? if self.id.present? + return if polls.blank? && ::Poll.where(post: self).empty? + DiscoursePoll::PollsUpdater.update(self, polls) else self.extracted_polls = polls diff --git a/plugins/poll/spec/lib/polls_updater_spec.rb b/plugins/poll/spec/lib/polls_updater_spec.rb index f42ec701861..be71634c4f7 100644 --- a/plugins/poll/spec/lib/polls_updater_spec.rb +++ b/plugins/poll/spec/lib/polls_updater_spec.rb @@ -186,5 +186,27 @@ RSpec.describe DiscoursePoll::PollsUpdater do end end end + + context "when no polls" do + it "does not attempt to update polls" do + DiscoursePoll::PollsUpdater.stubs(:update).raises(StandardError) + no_poll_post = Fabricate(:post) + + raw = <<~RAW + no poll here, moving on + RAW + + no_poll_post.raw = raw + expect(no_poll_post.valid?).to eq(true) + end + + it "does not need to validate post" do + DiscoursePoll::PostValidator.stubs(:validate_post).raises(StandardError) + no_poll_post = + Post.new(user: user, topic: Fabricate(:topic), raw: "no poll here, meoving on") + + expect(no_poll_post.valid?).to eq(true) + end + end end end