Make it possible to retrieve both resolved and unresolved reports by api (#38323)

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk 2026-05-23 13:07:02 +02:00 committed by GitHub
parent 6a4d14b178
commit 6b2616453f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 4 deletions

View File

@ -16,6 +16,7 @@ class Api::V1::Admin::ReportsController < Api::BaseController
FILTER_PARAMS = %i(
resolved
unresolved
account_id
target_account_id
).freeze

View File

@ -3,6 +3,7 @@
class ReportFilter
KEYS = %i(
resolved
unresolved
account_id
target_account_id
by_target_domain
@ -16,7 +17,7 @@ class ReportFilter
end
def results
scope = Report.unresolved
scope = status_scope
relevant_params.each do |key, value|
scope = scope.merge scope_for(key, value)
@ -28,7 +29,7 @@ class ReportFilter
private
def relevant_params
params.tap do |args|
params.except(:resolved, :unresolved).tap do |args|
args.delete(:target_origin) if origin_is_remote_and_domain_present?
end
end
@ -37,12 +38,20 @@ class ReportFilter
params[:target_origin] == 'remote' && params[:by_target_domain].present?
end
def status_scope
resolved = params.key?(:resolved)
unresolved = params.key?(:unresolved)
return Report.all if resolved && unresolved
return Report.resolved if resolved
Report.unresolved
end
def scope_for(key, value)
case key.to_sym
when :by_target_domain
Report.where(target_account: Account.where(domain: value))
when :resolved
Report.resolved
when :account_id
Report.where(account_id: value)
when :target_account_id

View File

@ -78,6 +78,17 @@ RSpec.describe 'Reports' do
end
end
context 'with both resolved and unresolved params' do
let(:params) { { resolved: true, unresolved: true } }
let(:scope) { Report.all }
it 'returns all reports' do
subject
expect(response.parsed_body).to match_array(expected_response)
end
end
context 'with account_id param' do
let(:params) { { account_id: reporter.id } }
let(:scope) { Report.unresolved.where(account: reporter) }