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
40 changes: 37 additions & 3 deletions app/jobs/reports/combined_invoice_supplement_report_v2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,31 @@ def build_csv(iaas, partner_accounts)
)
end

by_issuer_profile_age_results = iaas.flat_map do |iaa|
iaa.issuers.flat_map do |issuer|
Db::MonthlySpAuthCount::NewUniqueMonthlyUserCountsByPartner.call(
partner: issuer, # just a label
issuers: [issuer],
start_date: iaa.start_date,
end_date: iaa.end_date,
)
end
end

combine_by_iaa_month(
by_iaa_results: by_iaa_results,
by_issuer_results: by_issuer_results,
by_partner_results: by_partner_results,
by_issuer_profile_age_results: by_issuer_profile_age_results,
)
end

def combine_by_iaa_month(by_iaa_results:, by_issuer_results:, by_partner_results:)
def combine_by_iaa_month(
by_iaa_results:,
by_issuer_results:,
by_partner_results:,
by_issuer_profile_age_results:
)
by_iaa_and_year_month = by_iaa_results.group_by do |result|
[result[:key], result[:year_month]]
end
Expand Down Expand Up @@ -95,7 +112,13 @@ def combine_by_iaa_month(by_iaa_results:, by_issuer_results:, by_partner_results
'issuer_ial1_unique_users',
'issuer_ial2_unique_users',
'issuer_ial1_plus_2_unique_users',
'issuer_ial2_new_unique_users',
'issuer_ial2_new_unique_users_year1',
'issuer_ial2_new_unique_users_year2',
'issuer_ial2_new_unique_users_year3',
'issuer_ial2_new_unique_users_year4',
'issuer_ial2_new_unique_users_year5',
'issuer_ial2_new_unique_users_year_greater_than_5',
'issuer_ial2_new_unique_users_year_unknown',
]
by_issuer_iaa_issuer_year_months.each do |iaa_key, issuer_year_months|
issuer_year_months.each do |issuer, year_months_data|
Expand All @@ -112,6 +135,11 @@ def combine_by_iaa_month(by_iaa_results:, by_issuer_results:, by_partner_results
partner_results = by_partner_results.find do |result|
result[:year_month] == year_month && result[:issuers]&.include?(issuer)
end || {}

issuer_profile_age_results = by_issuer_profile_age_results.find do |result|
result[:year_month] == year_month && result[:issuers]&.include?(issuer)
end || {}

csv << [
iaa_key,
partner_results[:partner],
Expand Down Expand Up @@ -142,7 +170,13 @@ def combine_by_iaa_month(by_iaa_results:, by_issuer_results:, by_partner_results
(issuer_ial1_unique_users = extract(issuer_results, :unique_users, ial: 1)),
(issuer_ial2_unique_users = extract(issuer_results, :unique_users, ial: 2)),
issuer_ial1_unique_users + issuer_ial2_unique_users,
extract(issuer_results, :new_unique_users, ial: 2),
issuer_profile_age_results[:partner_ial2_new_unique_users_year1] || 0,
issuer_profile_age_results[:partner_ial2_new_unique_users_year2] || 0,
issuer_profile_age_results[:partner_ial2_new_unique_users_year3] || 0,
issuer_profile_age_results[:partner_ial2_new_unique_users_year4] || 0,
issuer_profile_age_results[:partner_ial2_new_unique_users_year5] || 0,
issuer_profile_age_results[:partner_ial2_new_unique_users_year_greater_than_5] || 0,
issuer_profile_age_results[:partner_ial2_new_unique_users_year_unknown] || 0,
]
end
end
Expand Down
150 changes: 102 additions & 48 deletions spec/jobs/reports/combined_invoice_supplement_report_v2_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
context 'with data' do
let(:user1) { create(:user) }
let(:user2) { create(:user) }
let(:user3) { create(:user) }

before do
iaa_order1.integrations << build_integration(
Expand Down Expand Up @@ -124,21 +125,23 @@
issuer: iaa2_sp1.issuer,
requested_at: inside_iaa2,
returned_at: inside_iaa2,
profile_verified_at: '2019-01-01 00:00:00',
billable: true,
)

# 1 unique user in month 1 at IAA 2 sp 2 @ IAL 2 with profile age 2
create(
:sp_return_log,
user_id: user2.id,
ial: 2,
issuer: iaa2_sp2.issuer,
requested_at: inside_iaa2,
returned_at: inside_iaa2,
profile_verified_at: '2020-01-01 00:00:00',
billable: true,
)

# 2 unique user in month 1 at IAA 2 sp 2 @ IAL 2 with profile age 2
[user2, user3].each do |user|
create(
:sp_return_log,
user_id: user.id,
ial: 2,
issuer: iaa2_sp2.issuer,
requested_at: inside_iaa2,
returned_at: inside_iaa2,
profile_verified_at: '2019-01-01 00:00:00',
billable: true,
)
end
end

it 'generates a report by iaa + order number and issuer and year month' do
Expand Down Expand Up @@ -177,44 +180,95 @@
expect(row['issuer_ial1_unique_users'].to_i).to eq(1)
expect(row['issuer_ial2_unique_users'].to_i).to eq(0)
expect(row['issuer_ial1_plus_2_unique_users'].to_i).to eq(1)
expect(row['issuer_ial2_new_unique_users'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year1'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year2'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year3'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year4'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year5'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year_greater_than_5'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year_unknown'].to_i).to eq(0)
end

aggregate_failures do
row = csv.find { |r| r['issuer'] == iaa2_sp1.issuer }

expect(row['iaa_order_number']).to eq('gtc5678-0002')
expect(row['partner']).to eq(partner_account2.requesting_agency)
expect(row['iaa_start_date']).to eq('2020-09-01')
expect(row['iaa_end_date']).to eq('2021-08-30')

expect(row['issuer']).to eq(iaa2_sp1.issuer)
expect(row['friendly_name']).to eq(iaa2_sp1.friendly_name)

expect(row['year_month']).to eq('202009')
expect(row['year_month_readable']).to eq('September 2020')

expect(row['iaa_ial1_unique_users'].to_i).to eq(0)
expect(row['iaa_ial2_unique_users'].to_i).to eq(3)
expect(row['iaa_ial1_plus_2_unique_users'].to_i).to eq(3)
expect(row['partner_ial2_new_unique_users_year1'].to_i).to eq(1)
expect(row['partner_ial2_new_unique_users_year2'].to_i).to eq(2)
expect(row['partner_ial2_new_unique_users_year3'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year4'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year5'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year_greater_than_5'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year_unknown'].to_i).to eq(0)

expect(row['issuer_ial1_total_auth_count'].to_i).to eq(0)
expect(row['issuer_ial2_total_auth_count'].to_i).to eq(1)
expect(row['issuer_ial1_plus_2_total_auth_count'].to_i).to eq(1)

expect(row['issuer_ial1_unique_users'].to_i).to eq(0)
expect(row['issuer_ial2_unique_users'].to_i).to eq(1)
expect(row['issuer_ial1_plus_2_unique_users'].to_i).to eq(1)
expect(row['issuer_ial2_new_unique_users_year1'].to_i).to eq(1)
expect(row['issuer_ial2_new_unique_users_year2'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year3'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year4'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year5'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year_greater_than_5'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year_unknown'].to_i).to eq(0)
end

[iaa2_sp1, iaa2_sp2].each do |sp|
aggregate_failures do
row = csv.find { |r| r['issuer'] == sp.issuer }

expect(row['iaa_order_number']).to eq('gtc5678-0002')
expect(row['partner']).to eq(partner_account2.requesting_agency)
expect(row['iaa_start_date']).to eq('2020-09-01')
expect(row['iaa_end_date']).to eq('2021-08-30')

expect(row['issuer']).to eq(sp.issuer)
expect(row['friendly_name']).to eq(sp.friendly_name)

expect(row['year_month']).to eq('202009')
expect(row['year_month_readable']).to eq('September 2020')

expect(row['iaa_ial1_unique_users'].to_i).to eq(0)
expect(row['iaa_ial2_unique_users'].to_i).to eq(2)
expect(row['iaa_ial1_plus_2_unique_users'].to_i).to eq(2)
expect(row['partner_ial2_new_unique_users_year1'].to_i).to eq(1)
expect(row['partner_ial2_new_unique_users_year2'].to_i).to eq(1)
expect(row['partner_ial2_new_unique_users_year3'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year4'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year5'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year_greater_than_5'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year_unknown'].to_i).to eq(0)

expect(row['issuer_ial1_total_auth_count'].to_i).to eq(0)
expect(row['issuer_ial2_total_auth_count'].to_i).to eq(1)
expect(row['issuer_ial1_plus_2_total_auth_count'].to_i).to eq(1)

expect(row['issuer_ial1_unique_users'].to_i).to eq(0)
expect(row['issuer_ial2_unique_users'].to_i).to eq(1)
expect(row['issuer_ial1_plus_2_unique_users'].to_i).to eq(1)
expect(row['issuer_ial2_new_unique_users'].to_i).to eq(1)
end
aggregate_failures do
row = csv.find { |r| r['issuer'] == iaa2_sp2.issuer }

expect(row['iaa_order_number']).to eq('gtc5678-0002')
expect(row['partner']).to eq(partner_account2.requesting_agency)
expect(row['iaa_start_date']).to eq('2020-09-01')
expect(row['iaa_end_date']).to eq('2021-08-30')

expect(row['issuer']).to eq(iaa2_sp2.issuer)
expect(row['friendly_name']).to eq(iaa2_sp2.friendly_name)

expect(row['year_month']).to eq('202009')
expect(row['year_month_readable']).to eq('September 2020')

expect(row['iaa_ial1_unique_users'].to_i).to eq(0)
expect(row['iaa_ial2_unique_users'].to_i).to eq(3)
expect(row['iaa_ial1_plus_2_unique_users'].to_i).to eq(3)
expect(row['partner_ial2_new_unique_users_year1'].to_i).to eq(1)
expect(row['partner_ial2_new_unique_users_year2'].to_i).to eq(2)
expect(row['partner_ial2_new_unique_users_year3'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year4'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year5'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year_greater_than_5'].to_i).to eq(0)
expect(row['partner_ial2_new_unique_users_year_unknown'].to_i).to eq(0)

expect(row['issuer_ial1_total_auth_count'].to_i).to eq(0)
expect(row['issuer_ial2_total_auth_count'].to_i).to eq(2)
expect(row['issuer_ial1_plus_2_total_auth_count'].to_i).to eq(2)

expect(row['issuer_ial1_unique_users'].to_i).to eq(0)
expect(row['issuer_ial2_unique_users'].to_i).to eq(2)
expect(row['issuer_ial1_plus_2_unique_users'].to_i).to eq(2)
expect(row['issuer_ial2_new_unique_users_year1'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year2'].to_i).to eq(2)
expect(row['issuer_ial2_new_unique_users_year3'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year4'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year5'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year_greater_than_5'].to_i).to eq(0)
expect(row['issuer_ial2_new_unique_users_year_unknown'].to_i).to eq(0)
end
end
end
Expand Down