FIX: Polls permanently broken if post requires approval.
This commit is contained in:
parent
396557bae9
commit
bed11dfa0e
|
@ -78,7 +78,7 @@ class QueuedPost < ActiveRecord::Base
|
|||
# Do sidekiq work outside of the transaction
|
||||
creator.enqueue_jobs
|
||||
|
||||
DiscourseEvent.trigger(:approved_post, self)
|
||||
DiscourseEvent.trigger(:approved_post, self, created_post)
|
||||
created_post
|
||||
end
|
||||
|
||||
|
|
|
@ -247,11 +247,11 @@ after_initialize do
|
|||
end
|
||||
end
|
||||
|
||||
validate(:post, :validate_polls) do
|
||||
validate(:post, :validate_polls) do |force=nil|
|
||||
return if !SiteSetting.poll_enabled? && (self.user && !self.user.staff?)
|
||||
|
||||
# only care when raw has changed!
|
||||
return unless self.raw_changed?
|
||||
return unless self.raw_changed? || force
|
||||
|
||||
validator = DiscoursePoll::PollsValidator.new(self)
|
||||
return unless (polls = validator.validate_polls)
|
||||
|
@ -268,6 +268,29 @@ after_initialize do
|
|||
true
|
||||
end
|
||||
|
||||
NewPostManager.add_handler(1) do |manager|
|
||||
post = Post.new(raw: manager.args[:raw])
|
||||
|
||||
if !DiscoursePoll::PollsValidator.new(post).validate_polls
|
||||
result = NewPostResult.new(:poll, false)
|
||||
|
||||
post.errors.full_messages.each do |message|
|
||||
result.errors[:base] << message
|
||||
end
|
||||
|
||||
result
|
||||
else
|
||||
manager.args["is_poll"] = true
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
on(:approved_post) do |queued_post, created_post|
|
||||
if queued_post.post_options["is_poll"]
|
||||
created_post.validate_polls(true)
|
||||
end
|
||||
end
|
||||
|
||||
Post.register_custom_field_type(DiscoursePoll::POLLS_CUSTOM_FIELD, :json)
|
||||
Post.register_custom_field_type(DiscoursePoll::VOTES_CUSTOM_FIELD, :json)
|
||||
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe NewPostManager do
|
||||
let(:user) { Fabricate(:newuser) }
|
||||
let(:admin) { Fabricate(:admin) }
|
||||
|
||||
describe 'when new post containing a poll is queued for approval' do
|
||||
it 'should render the poll upon approval' do
|
||||
params = {
|
||||
raw: "[poll]\n* 1\n* 2\n* 3\n[/poll]",
|
||||
archetype: "regular",
|
||||
category: "",
|
||||
typing_duration_msecs: "2700",
|
||||
composer_open_duration_msecs: "12556",
|
||||
visible: true,
|
||||
image_sizes: nil,
|
||||
is_warning: false,
|
||||
title: "This is a test post with a poll",
|
||||
ip_address: "127.0.0.1",
|
||||
user_agent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
|
||||
referrer: "http://localhost:3000/",
|
||||
first_post_checks: true
|
||||
}
|
||||
|
||||
expect { NewPostManager.new(user, params).perform }
|
||||
.to change { QueuedPost.count }.by(1)
|
||||
|
||||
queued_post = QueuedPost.last
|
||||
queued_post.approve!(admin)
|
||||
|
||||
expect(Post.last.custom_fields[DiscoursePoll::POLLS_CUSTOM_FIELD])
|
||||
.to_not eq(nil)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue