Skip to content
Snippets Groups Projects
Unverified Commit 3ad3223b authored by Eugen Rochko's avatar Eugen Rochko Committed by GitHub
Browse files

Fix detailed poll validation errors not being returned in the API (#10261)

No more "Owned poll is invalid"
parent c20d096e
No related branches found
No related tags found
No related merge requests found
......@@ -71,7 +71,8 @@ class Status < ApplicationRecord
validates_with DisallowedHashtagsValidator
validates :reblog, uniqueness: { scope: :account }, if: :reblog?
validates :visibility, exclusion: { in: %w(direct limited) }, if: :reblog?
validates_associated :owned_poll
accepts_nested_attributes_for :owned_poll
default_scope { recent }
......
......@@ -29,7 +29,6 @@ class PostStatusService < BaseService
return idempotency_duplicate if idempotency_given? && idempotency_duplicate?
validate_media!
validate_poll!
preprocess_attributes!
if scheduled?
......@@ -71,6 +70,7 @@ class PostStatusService < BaseService
def schedule_status!
status_for_validation = @account.statuses.build(status_attributes)
if status_for_validation.valid?
status_for_validation.destroy
......@@ -103,12 +103,6 @@ class PostStatusService < BaseService
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:video?)
end
def validate_poll!
return if @options[:poll].blank?
@poll = @account.polls.new(@options[:poll])
end
def language_from_option(str)
ISO_639.find(str)&.alpha2
end
......@@ -161,13 +155,13 @@ class PostStatusService < BaseService
text: @text,
media_attachments: @media || [],
thread: @in_reply_to,
owned_poll: @poll,
owned_poll_attributes: poll_attributes,
sensitive: (@options[:sensitive].nil? ? @account.user&.setting_default_sensitive : @options[:sensitive]) || @options[:spoiler_text].present?,
spoiler_text: @options[:spoiler_text] || '',
visibility: @visibility,
language: language_from_option(@options[:language]) || @account.user&.setting_default_language&.presence || LanguageDetector.instance.detect(@text, @account),
application: @options[:application],
}
}.compact
end
def scheduled_status_attributes
......@@ -178,6 +172,12 @@ class PostStatusService < BaseService
}
end
def poll_attributes
return if @options[:poll].blank?
@options[:poll].merge(account: @account)
end
def scheduled_options
@options.tap do |options_hash|
options_hash[:in_reply_to_id] = options_hash.delete(:thread)&.id
......
---
en:
activerecord:
attributes:
status:
owned_poll: Poll
errors:
models:
account:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment