From 891faa5d7416b466f669ca3de7c799e327fe912c Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Tue, 14 Oct 2025 22:09:16 +0200 Subject: [PATCH] Preserve old API interface --- .../api/v1/admin/reports_controller.rb | 20 ++++++++++--------- app/models/report_filter.rb | 17 +++++++++++++--- spec/requests/api/v1/admin/reports_spec.rb | 7 ++++--- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/app/controllers/api/v1/admin/reports_controller.rb b/app/controllers/api/v1/admin/reports_controller.rb index 520388d01ca..d53c36a9003 100644 --- a/app/controllers/api/v1/admin/reports_controller.rb +++ b/app/controllers/api/v1/admin/reports_controller.rb @@ -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 diff --git a/app/models/report_filter.rb b/app/models/report_filter.rb index b0cce56770c..a63acafd72a 100644 --- a/app/models/report_filter.rb +++ b/app/models/report_filter.rb @@ -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 diff --git a/spec/requests/api/v1/admin/reports_spec.rb b/spec/requests/api/v1/admin/reports_spec.rb index 90a60d16c50..c1be7ec3ae5 100644 --- a/spec/requests/api/v1/admin/reports_spec.rb +++ b/spec/requests/api/v1/admin/reports_spec.rb @@ -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