FIX: Ensure poll extraction is not attempted if post body is absent (#19718)
Since the poll post handler runs very early in the post creation process, it's possible to run the handler on an obiviously invalid post. This change ensures the post's `raw` value is present before proceeding.
This commit is contained in:
parent
73ec80893d
commit
55bdab2b3b
|
@ -306,6 +306,10 @@ class DiscoursePoll::Poll
|
|||
end
|
||||
|
||||
def self.extract(raw, topic_id, user_id = nil)
|
||||
# Poll Post handlers get called very early in the post
|
||||
# creation process. `raw` could be nil here.
|
||||
return [] if raw.blank?
|
||||
|
||||
# TODO: we should fix the callback mess so that the cooked version is available
|
||||
# in the validators instead of cooking twice
|
||||
raw = raw.sub(%r{\[quote.+/quote\]}m, "")
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe PostsController do
|
||||
let(:admin) { Fabricate(:admin) }
|
||||
|
||||
describe "#create" do
|
||||
it "fails gracefully without a post body" do
|
||||
key = Fabricate(:api_key).key
|
||||
|
||||
expect do
|
||||
post "/posts.json",
|
||||
params: {
|
||||
title: "this is test body",
|
||||
},
|
||||
headers: {
|
||||
HTTP_API_USERNAME: admin.username,
|
||||
HTTP_API_KEY: key,
|
||||
}
|
||||
end.not_to change { Topic.count }
|
||||
|
||||
expect(response.status).to eq(422)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue