From f8a77b4d57a72bda3235ddb720b4d777bd22ccbd Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Wed, 15 Mar 2023 11:10:43 -0700 Subject: [PATCH 1/3] Add profile_active column to duplicate SSN reporting (LG-9191) changelog: Internal, Reporting, Add report for duplicate SSNs --- app/jobs/reports/duplicate_ssn_report.rb | 2 ++ spec/jobs/reports/duplicate_ssn_report_spec.rb | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/jobs/reports/duplicate_ssn_report.rb b/app/jobs/reports/duplicate_ssn_report.rb index e689e8800a4..675ae30384e 100644 --- a/app/jobs/reports/duplicate_ssn_report.rb +++ b/app/jobs/reports/duplicate_ssn_report.rb @@ -52,6 +52,7 @@ def report_body uuid account_created_at identity_verified_at + profile_active ssn_fingerprint count_ssn_fingerprint ] @@ -65,6 +66,7 @@ def report_body profile.user.uuid, profile.user.created_at.in_time_zone('UTC').iso8601, profile.activated_at.in_time_zone('UTC').iso8601, + profile.active, profile.ssn_signature, ssn_count, ] diff --git a/spec/jobs/reports/duplicate_ssn_report_spec.rb b/spec/jobs/reports/duplicate_ssn_report_spec.rb index ed1885a0072..d902eab367e 100644 --- a/spec/jobs/reports/duplicate_ssn_report_spec.rb +++ b/spec/jobs/reports/duplicate_ssn_report_spec.rb @@ -51,7 +51,6 @@ 2.times.map do create( :profile, - :active, ssn_signature: ssn_fingerprint2, activated_at: report_date - 10.days, ).tap(&:reload) @@ -84,6 +83,7 @@ def expect_row_matches_profile(row:, profile:) expect(row['uuid']).to eq(profile.user.uuid) expect(Time.zone.parse(row['account_created_at']).to_i).to eq(profile.user.created_at.to_i) expect(Time.zone.parse(row['identity_verified_at']).to_i).to eq(profile.activated_at.to_i) + expect(row['profile_active']).to eq(profile.active.to_s) expect(row['ssn_fingerprint']).to eq(ssn_fingerprint2) expect(row['count_ssn_fingerprint']).to eq('3') end From 2197e617651667621e9327fad659e731b63a144c Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Wed, 15 Mar 2023 11:17:46 -0700 Subject: [PATCH 2/3] Add count_active_ssn_fingerprint column too --- app/jobs/reports/duplicate_ssn_report.rb | 11 ++++++++++- spec/jobs/reports/duplicate_ssn_report_spec.rb | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/jobs/reports/duplicate_ssn_report.rb b/app/jobs/reports/duplicate_ssn_report.rb index 675ae30384e..ad0d8dab024 100644 --- a/app/jobs/reports/duplicate_ssn_report.rb +++ b/app/jobs/reports/duplicate_ssn_report.rb @@ -44,7 +44,13 @@ def report_body profiles_connected_by_ssn.sort_by!(&:id).reverse! - count_by_ssn = profiles_connected_by_ssn.group_by(&:ssn_signature).transform_values(&:count) + count_by_ssn = profiles_connected_by_ssn. + group_by(&:ssn_signature). + transform_values(&:count) + count_by_ssn_active = profiles_connected_by_ssn. + select(&:active?). + group_by(&:ssn_signature). + transform_values(&:count) CSV.generate do |csv| csv << %w[ @@ -55,10 +61,12 @@ def report_body profile_active ssn_fingerprint count_ssn_fingerprint + count_active_ssn_fingerprint ] profiles_connected_by_ssn.each do |profile| ssn_count = count_by_ssn[profile.ssn_signature] + ssn_count_active = count_by_ssn_active[profile.ssn_signature] next if ssn_count < 2 csv << [ @@ -69,6 +77,7 @@ def report_body profile.active, profile.ssn_signature, ssn_count, + ssn_count_active, ] end end diff --git a/spec/jobs/reports/duplicate_ssn_report_spec.rb b/spec/jobs/reports/duplicate_ssn_report_spec.rb index d902eab367e..70a04326190 100644 --- a/spec/jobs/reports/duplicate_ssn_report_spec.rb +++ b/spec/jobs/reports/duplicate_ssn_report_spec.rb @@ -86,6 +86,7 @@ def expect_row_matches_profile(row:, profile:) expect(row['profile_active']).to eq(profile.active.to_s) expect(row['ssn_fingerprint']).to eq(ssn_fingerprint2) expect(row['count_ssn_fingerprint']).to eq('3') + expect(row['count_active_ssn_fingerprint']).to eq('1') end end end From b0568948e73f40334fa00d7fdf7cd1b2394e312f Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Wed, 15 Mar 2023 12:00:12 -0700 Subject: [PATCH 3/3] Handle nil activated_at values --- app/jobs/reports/duplicate_ssn_report.rb | 2 +- spec/jobs/reports/duplicate_ssn_report_spec.rb | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/jobs/reports/duplicate_ssn_report.rb b/app/jobs/reports/duplicate_ssn_report.rb index ad0d8dab024..42e3ef7a629 100644 --- a/app/jobs/reports/duplicate_ssn_report.rb +++ b/app/jobs/reports/duplicate_ssn_report.rb @@ -73,7 +73,7 @@ def report_body todays_profile_ids.include?(profile.id), profile.user.uuid, profile.user.created_at.in_time_zone('UTC').iso8601, - profile.activated_at.in_time_zone('UTC').iso8601, + profile.activated_at&.in_time_zone('UTC')&.iso8601, profile.active, profile.ssn_signature, ssn_count, diff --git a/spec/jobs/reports/duplicate_ssn_report_spec.rb b/spec/jobs/reports/duplicate_ssn_report_spec.rb index 70a04326190..afe816a4442 100644 --- a/spec/jobs/reports/duplicate_ssn_report_spec.rb +++ b/spec/jobs/reports/duplicate_ssn_report_spec.rb @@ -48,13 +48,20 @@ end let!(:fingerprint2_previous_profiles) do - 2.times.map do + [ create( :profile, + active: false, ssn_signature: ssn_fingerprint2, activated_at: report_date - 10.days, - ).tap(&:reload) - end + ), + create( + :profile, + active: false, + ssn_signature: ssn_fingerprint2, + activated_at: nil, + ), + ].map(&:reload) end it 'creates csv with corresponding data', aggregate_failures: true do @@ -82,7 +89,9 @@ def expect_row_matches_profile(row:, profile:) expect(row).to be expect(row['uuid']).to eq(profile.user.uuid) expect(Time.zone.parse(row['account_created_at']).to_i).to eq(profile.user.created_at.to_i) - expect(Time.zone.parse(row['identity_verified_at']).to_i).to eq(profile.activated_at.to_i) + if profile.activated_at + expect(Time.zone.parse(row['identity_verified_at']).to_i).to eq(profile.activated_at.to_i) + end expect(row['profile_active']).to eq(profile.active.to_s) expect(row['ssn_fingerprint']).to eq(ssn_fingerprint2) expect(row['count_ssn_fingerprint']).to eq('3')