Preserve old API interface

This commit is contained in:
Emelia Smith 2025-10-14 22:09:16 +02:00
parent 6aad732fc5
commit 891faa5d74
No known key found for this signature in database
3 changed files with 29 additions and 15 deletions

View File

@ -18,9 +18,6 @@ class Api::V1::Admin::ReportsController < Api::BaseController
def index
authorize :report, :index?
return redirect_to api_v1_admin_reports_path(reports_filter.updated_filter) if reports_filter.outdated?
render json: @reports, each_serializer: REST::Admin::ReportSerializer
end
@ -74,12 +71,8 @@ class Api::V1::Admin::ReportsController < Api::BaseController
@report = Report.find(params[:id])
end
def reports_filter
@reports_filter ||= ReportFilter.new(filter_params)
end
def filtered_reports
reports_filter.results
ReportFilter.new(filter_params).results
end
def report_params
@ -87,7 +80,16 @@ class Api::V1::Admin::ReportsController < Api::BaseController
end
def filter_params
params.slice(*ReportFilter::ALL_KEYS).permit(*ReportFilter::ALL_KEYS)
filter_params = params.slice(*ReportFilter::API_KEYS).permit(*ReportFilter::API_KEYS)
resolved = filter_params.delete(:resolved)
if resolved.present?
filter_params[:status] = ActiveModel::Type::Boolean.new.cast(resolved) ? 'resolved' : 'unresolved'
elsif filter_params[:status].nil?
filter_params[:status] = 'unresolved'
end
filter_params
end
def next_path

View File

@ -6,16 +6,23 @@ class ReportFilter
search_type
search_term
target_origin
account_id
target_account_id
).freeze
OUTDATED_KEYS = %i(
OUTDATED_ADMIN_KEYS = %i(
resolved
by_target_domain
account_id
target_account_id
).freeze
ALL_KEYS = KEYS + OUTDATED_KEYS
ALL_KEYS = KEYS + OUTDATED_ADMIN_KEYS
API_KEYS = KEYS + %i(
resolved
account_id
target_account_id
).freeze
SEARCH_TYPES = %w(
source
@ -41,7 +48,7 @@ class ReportFilter
# We always need a status parameter:
return true if @params.exclude? :status
OUTDATED_KEYS.any? { |key, _value| @params.include? key }
OUTDATED_ADMIN_KEYS.any? { |key, _value| @params.include? key }
end
def updated_filter
@ -174,6 +181,10 @@ class ReportFilter
case key.to_sym
when :target_origin
target_origin_scope(value)
when :target_account_id
Report.where(target_account_id: value)
when :account_id
Report.where(account_id: value)
else
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end

View File

@ -73,11 +73,12 @@ RSpec.describe 'Reports' do
context 'with outdated resolved param' do
let(:params) { { resolved: true } }
let(:scope) { Report.resolved }
it 'redirects to the new filter path' do
it 'returns the resolved reports' do
subject
expect(response).to redirect_to api_v1_admin_reports_url({ status: 'resolved' })
expect(response.parsed_body).to match_array(expected_response)
end
end
@ -99,7 +100,7 @@ RSpec.describe 'Reports' do
it 'returns only the resolved reports' do
subject
expect(body_as_json).to match_array(expected_response)
expect(response.parsed_body).to match_array(expected_response)
end
end