From 90765342a35abd6883e57f5419342f491b83e250 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 17 Sep 2025 21:16:36 +0200 Subject: [PATCH] Fix posts when omitting quote policy and default policy is `nobody` (#36158) --- .../api/interaction_policies_concern.rb | 4 +--- spec/requests/api/v1/statuses_spec.rb | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/controllers/concerns/api/interaction_policies_concern.rb b/app/controllers/concerns/api/interaction_policies_concern.rb index 3e319f6be9e..5b63705a9bf 100644 --- a/app/controllers/concerns/api/interaction_policies_concern.rb +++ b/app/controllers/concerns/api/interaction_policies_concern.rb @@ -6,15 +6,13 @@ module Api::InteractionPoliciesConcern def quote_approval_policy return nil unless Mastodon::Feature.outgoing_quotes_enabled? - case status_params[:quote_approval_policy] + case status_params[:quote_approval_policy].presence || current_user.setting_default_quote_policy when 'public' Status::QUOTE_APPROVAL_POLICY_FLAGS[:public] << 16 when 'followers' Status::QUOTE_APPROVAL_POLICY_FLAGS[:followers] << 16 when 'nobody' 0 - when nil - Status::QUOTE_APPROVAL_POLICY_FLAGS[current_user.setting_default_quote_policy&.to_sym] << 16 else # TODO: raise more useful message raise ActiveRecord::RecordInvalid diff --git a/spec/requests/api/v1/statuses_spec.rb b/spec/requests/api/v1/statuses_spec.rb index b3cc4913c33..eb3e8aed5bc 100644 --- a/spec/requests/api/v1/statuses_spec.rb +++ b/spec/requests/api/v1/statuses_spec.rb @@ -180,6 +180,28 @@ RSpec.describe '/api/v1/statuses' do end end + context 'without a quote policy and the user defaults to nobody', feature: :outgoing_quotes do + let(:user) do + Fabricate(:user, settings: { default_quote_policy: 'nobody' }) + end + + it 'returns post with user default quote policy, as well as rate limit headers', :aggregate_failures do + subject + expect(user.setting_default_quote_policy).to eq 'nobody' + + expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body[:quote_approval]).to include({ + automatic: [], + manual: [], + current_user: 'automatic', + }) + expect(response.headers['X-RateLimit-Limit']).to eq RateLimiter::FAMILIES[:statuses][:limit].to_s + expect(response.headers['X-RateLimit-Remaining']).to eq (RateLimiter::FAMILIES[:statuses][:limit] - 1).to_s + end + end + context 'with a quote policy', feature: :outgoing_quotes do let(:quoted_status) { Fabricate(:status, account: user.account) } let(:params) do