diff --git a/app/controllers/api/v1/admin/reports_controller.rb b/app/controllers/api/v1/admin/reports_controller.rb index 9b5beeab67..765996eb3c 100644 --- a/app/controllers/api/v1/admin/reports_controller.rb +++ b/app/controllers/api/v1/admin/reports_controller.rb @@ -16,6 +16,7 @@ class Api::V1::Admin::ReportsController < Api::BaseController FILTER_PARAMS = %i( resolved + unresolved account_id target_account_id ).freeze diff --git a/app/models/report_filter.rb b/app/models/report_filter.rb index 9d2b0fb374..dab45007bc 100644 --- a/app/models/report_filter.rb +++ b/app/models/report_filter.rb @@ -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 diff --git a/spec/requests/api/v1/admin/reports_spec.rb b/spec/requests/api/v1/admin/reports_spec.rb index 54dd4c9c8c..432e7f47a2 100644 --- a/spec/requests/api/v1/admin/reports_spec.rb +++ b/spec/requests/api/v1/admin/reports_spec.rb @@ -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) }