Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 26 additions & 31 deletions app/services/reporting/account_reuse_report.rb
Original file line number Diff line number Diff line change
Expand Up @@ -150,27 +150,26 @@ def initialize(
super(
total_all_users:, total_all_percent:,
total_idv_users:, total_idv_percent:
)
)
end

def update_from_results(results, total_proofed)
if !results.nil? && !results[:detail_rows].nil? && !results[:detail_rows].empty?
detail_results = results[:detail_rows]
detail_results.each do |result_entry|
def update_from_results(results:, total_registered:, total_proofed:)
if !results.nil? && !results.detail_rows.nil? && !results.detail_rows.empty?
results.detail_rows.each do |result_entry|
self.total_all_users += result_entry.dig(:num_all_users)
self.total_idv_users += result_entry.dig(:num_idv_users)
end

if total_proofed > 0
if total_registered > 0 && total_proofed > 0
# Calculate percentages for breakdowns with both sps and angencies
detail_results.each_with_index do |result_entry, index|
detail_results[index][:all_percent] =
result_entry.dig(:num_all_users) / total_proofed.to_f
detail_results[index][:idv_percent] =
results.detail_rows.each_with_index do |result_entry, index|
results.detail_rows[index][:all_percent] =
result_entry.dig(:num_all_users) / total_registered.to_f
results.detail_rows[index][:idv_percent] =
result_entry.dig(:num_idv_users) / total_proofed.to_f

self.total_all_percent += detail_results[index].dig(:all_percent)
self.total_idv_percent += detail_results[index].dig(:idv_percent)
self.total_all_percent += results.detail_rows[index].dig(:all_percent)
self.total_idv_percent += results.detail_rows[index].dig(:idv_percent)
end
end
end
Expand All @@ -193,19 +192,22 @@ def summary_row_as_csv
def total_reuse_report
return @total_reuse_report if defined?(@total_reuse_report)

total_registered = num_registered_users
total_proofed = num_active_profiles

sp_reuse_stats = EntityReuseSummary.new.update_from_results(
ReuseDetailSection.new.organize_results(
results: ReuseDetailSection.new.organize_results(
sp_reuse_results_all, sp_reuse_results_idv, 'apps'
),
total_proofed,
total_registered: total_registered,
total_proofed: total_proofed,
)
agency_reuse_stats = EntityReuseSummary.new.update_from_results(
ReuseDetailSection.new.organize_results(
results: ReuseDetailSection.new.organize_results(
agency_reuse_results_all, agency_reuse_results_idv, 'agencies'
),
total_proofed,
total_registered: total_registered,
total_proofed: total_proofed,
)

@total_reuse_report = {
Expand Down Expand Up @@ -350,23 +352,16 @@ def agency_reuse_results_idv
agency_idv_results.as_json
end

def num_active_profiles
proofed_sql = format(<<-SQL, params)
SELECT
COUNT(*) AS num_proofed
FROM
profiles
WHERE
profiles.active = TRUE
AND
profiles.activated_at < %{query_date}
SQL

proofed_results = Reports::BaseReport.transaction_with_timeout do
ActiveRecord::Base.connection.execute(proofed_sql)
def num_registered_users
@num_registered_users ||= Reports::BaseReport.transaction_with_timeout do
RegistrationLog.where('registered_at <= ?', report_date).count
end
end

proofed_results.first['num_proofed']
def num_active_profiles
@num_active_profiles ||= Reports::BaseReport.transaction_with_timeout do
Profile.where(active: true).where('activated_at < ?', report_date).count
end
end

def params
Expand Down
10 changes: 5 additions & 5 deletions spec/services/reporting/account_reuse_report_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,11 @@ def create_identity(user_id:, created_at:, provider:, verified_at:)
it 'has the correct results' do
expected_csv = [
['Metric', 'Num. all users', '% of accounts', 'Num. IDV users', '% of accounts'],
['2 apps', 5, 0.5, 3, 0.3],
['3 apps', 4, 0.4, 1, 0.1],
['2+ apps', 9, 0.9, 4, 0.4],
['2 agencies', 7, 0.7, 3, 0.3],
['2+ agencies', 7, 0.7, 3, 0.3],
['2 apps', 5, 5 / 13.0, 3, 0.3],
['3 apps', 4, 4 / 13.0, 1, 0.1],
['2+ apps', 9, 9 / 13.0, 4, 0.4],
['2 agencies', 7, 7 / 13.0, 3, 0.3],
['2+ agencies', 7, 7 / 13.0, 3, 0.3],
]

aggregate_failures do
Expand Down