forked from treehouse/mastodon
Fix media not being marked sensitive when client sets a CW but no text (#13277)
Mastodon enforces the “sensitive” flag on media attachments whenever a toot is posted with a Content Warning. However, it does so *after* potentially converting the Content Warning to toot text (when there is no toot text), which leads to inconsistent and surprising behavior for API clients. This commit fixes this inconsistency.rebase/4.0.0rc2
parent
858d0dd168
commit
f08f880f58
|
@ -48,6 +48,7 @@ class PostStatusService < BaseService
|
||||||
private
|
private
|
||||||
|
|
||||||
def preprocess_attributes!
|
def preprocess_attributes!
|
||||||
|
@sensitive = (@options[:sensitive].nil? ? @account.user&.setting_default_sensitive : @options[:sensitive]) || @options[:spoiler_text].present?
|
||||||
@text = @options.delete(:spoiler_text) if @text.blank? && @options[:spoiler_text].present?
|
@text = @options.delete(:spoiler_text) if @text.blank? && @options[:spoiler_text].present?
|
||||||
@visibility = @options[:visibility] || @account.user&.setting_default_privacy
|
@visibility = @options[:visibility] || @account.user&.setting_default_privacy
|
||||||
@visibility = :unlisted if @visibility&.to_sym == :public && @account.silenced?
|
@visibility = :unlisted if @visibility&.to_sym == :public && @account.silenced?
|
||||||
|
@ -157,7 +158,7 @@ class PostStatusService < BaseService
|
||||||
media_attachments: @media || [],
|
media_attachments: @media || [],
|
||||||
thread: @in_reply_to,
|
thread: @in_reply_to,
|
||||||
poll_attributes: poll_attributes,
|
poll_attributes: poll_attributes,
|
||||||
sensitive: (@options[:sensitive].nil? ? @account.user&.setting_default_sensitive : @options[:sensitive]) || @options[:spoiler_text].present?,
|
sensitive: @sensitive,
|
||||||
spoiler_text: @options[:spoiler_text] || '',
|
spoiler_text: @options[:spoiler_text] || '',
|
||||||
visibility: @visibility,
|
visibility: @visibility,
|
||||||
language: language_from_option(@options[:language]) || @account.user&.setting_default_language&.presence || LanguageDetector.instance.detect(@text, @account),
|
language: language_from_option(@options[:language]) || @account.user&.setting_default_language&.presence || LanguageDetector.instance.detect(@text, @account),
|
||||||
|
|
|
@ -79,6 +79,13 @@ RSpec.describe PostStatusService, type: :service do
|
||||||
expect(status.spoiler_text).to eq spoiler_text
|
expect(status.spoiler_text).to eq spoiler_text
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'creates a sensitive status when there is a CW but no text' do
|
||||||
|
status = subject.call(Fabricate(:account), text: '', spoiler_text: 'foo')
|
||||||
|
|
||||||
|
expect(status).to be_persisted
|
||||||
|
expect(status).to be_sensitive
|
||||||
|
end
|
||||||
|
|
||||||
it 'creates a status with empty default spoiler text' do
|
it 'creates a status with empty default spoiler text' do
|
||||||
status = create_status_with_options(spoiler_text: nil)
|
status = create_status_with_options(spoiler_text: nil)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue