diff --git a/app/jobs/reports/daily_dropoffs_report.rb b/app/jobs/reports/daily_dropoffs_report.rb index 52fa0dd03c9..101f7848a37 100644 --- a/app/jobs/reports/daily_dropoffs_report.rb +++ b/app/jobs/reports/daily_dropoffs_report.rb @@ -4,6 +4,20 @@ module Reports class DailyDropoffsReport < BaseReport REPORT_NAME = 'daily-dropoffs-report' + STEPS = %w[ + welcome + agreement + capture_document + cap_doc_submit + ssn + verify_info + verify_submit + phone + encrypt + personal_key + verified + ].freeze + include GoodJob::ActiveJobExtensions::Concurrency good_job_control_concurrency_with( @@ -50,7 +64,7 @@ def report_body agency start finish - ] + Db::DocAuthLog::DropOffRatesHelper::STEPS + ] + STEPS query_results.each do |sp_result| csv << [ @@ -60,7 +74,7 @@ def report_body sp_result['agency'], start.iso8601, finish.iso8601, - *Db::DocAuthLog::DropOffRatesHelper::STEPS.map { |step| sp_result[step].to_i }, + *STEPS.map { |step| sp_result[step].to_i }, ] end end diff --git a/app/jobs/reports/doc_auth_drop_off_rates_per_sprint_report.rb b/app/jobs/reports/doc_auth_drop_off_rates_per_sprint_report.rb deleted file mode 100644 index 9f60736b64c..00000000000 --- a/app/jobs/reports/doc_auth_drop_off_rates_per_sprint_report.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'identity/hostdata' - -module Reports - class DocAuthDropOffRatesPerSprintReport < BaseReport - REPORT_NAME = 'doc-auth-drop-offs-per-sprint-report'.freeze - FIRST_SPRINT_DATE = '10-10-2019'.freeze - - include GoodJob::ActiveJobExtensions::Concurrency - - good_job_control_concurrency_with( - total_limit: 1, - key: -> { "#{REPORT_NAME}-#{arguments.first}" }, - ) - - def perform(_date) - ret = generate_report - save_report(REPORT_NAME, ret.join, extension: 'txt') - end - - private - - def generate_report - date = Date.strptime(FIRST_SPRINT_DATE, '%m-%d-%Y') - ret = [] - today_date = Time.zone.today - generate_sprints(ret, date, today_date) - ret - end - - def generate_sprints(ret, date, today_date) - while date < today_date - transaction_with_timeout do - start = date - finish = date.next_day(14) - ret << Db::DocAuthLog::BlanketDropOffRatesAllSpsInRange.new. - call('Sprint', fmt(start), fmt(finish)) - date = finish - end - end - end - - def fmt(date) - date.strftime('%m-%d-%Y') - end - end -end diff --git a/app/jobs/reports/doc_auth_drop_off_rates_report.rb b/app/jobs/reports/doc_auth_drop_off_rates_report.rb deleted file mode 100644 index 5b43d713e22..00000000000 --- a/app/jobs/reports/doc_auth_drop_off_rates_report.rb +++ /dev/null @@ -1,132 +0,0 @@ -require 'identity/hostdata' - -module Reports - class DocAuthDropOffRatesReport < BaseReport - REPORT_NAME = 'doc-auth-drop-off-rates-report'.freeze - - include GoodJob::ActiveJobExtensions::Concurrency - - good_job_control_concurrency_with( - total_limit: 1, - key: -> { "#{REPORT_NAME}-#{arguments.first}" }, - ) - - def perform(_date) - ret = generate_report - save_report(REPORT_NAME, ret.join, extension: 'txt') - end - - private - - def generate_report - ret = [] - transaction_with_timeout do - generate_blanket_report_all_sps(ret) - generate_blanket_reports_per_sp(ret) - generate_overall_report_all_sps(ret) - generate_overall_reports_per_sp(ret) - end - ret - end - - def generate_blanket_reports_per_sp(ret) - ServiceProvider.where(ial: 2).each do |sp| - generate_blanket_report_per_sp(sp, ret) - end - end - - def generate_overall_reports_per_sp(ret) - ServiceProvider.where(ial: 2).each do |sp| - generate_overall_report_per_sp(sp, ret) - end - end - - def generate_blanket_report_per_sp(sp, ret) - blanket_drop_off_rates_per_sp_all_time(ret, sp) - blanket_drop_off_rates_per_sp_last_30_days(ret, sp) - blanket_drop_off_rates_per_sp_last_24_hours(ret, sp) - end - - def generate_overall_report_per_sp(sp, ret) - overall_drop_off_rates_per_sp_all_time(ret, sp) - overall_drop_off_rates_per_sp_last_30_days(ret, sp) - overall_drop_off_rates_per_sp_last_24_hours(ret, sp) - end - - def generate_blanket_report_all_sps(ret) - blanket_drop_off_rates_all_sps_all_time(ret) - blanket_drop_off_rates_all_sps_last_30_days(ret) - blanket_drop_off_rates_all_sps_last_24_hours(ret) - end - - def generate_overall_report_all_sps(ret) - overall_drop_off_rates_all_sps_all_time(ret) - overall_drop_off_rates_all_sps_last_30_days(ret) - overall_drop_off_rates_all_sps_last_24_hours(ret) - end - - def overall_drop_off_rates_all_sps_all_time(ret) - ret << Db::DocAuthLog::OverallDropOffRatesAllSpsAllTime.new. - call('Overall drop off rates for all SPs all time') - end - - def overall_drop_off_rates_all_sps_last_24_hours(ret) - ret << Db::DocAuthLog::OverallDropOffRatesAllSpsInRange.new. - call('Overall drop off rates for all SPs last 24 hours', Date.yesterday, today) - end - - def overall_drop_off_rates_all_sps_last_30_days(ret) - ret << Db::DocAuthLog::OverallDropOffRatesAllSpsInRange.new. - call('Overall drop off rates for all SPs last 30 days', today - 30.days, today) - end - - def blanket_drop_off_rates_all_sps_all_time(ret) - ret << Db::DocAuthLog::BlanketDropOffRatesAllSpsAllTime.new. - call('Blanket drop off rates for all SPs all time') - end - - def blanket_drop_off_rates_all_sps_last_24_hours(ret) - ret << Db::DocAuthLog::BlanketDropOffRatesAllSpsInRange.new. - call('Blanket drop off rates for all SPs last 24 hours', Date.yesterday, today) - end - - def blanket_drop_off_rates_all_sps_last_30_days(ret) - ret << Db::DocAuthLog::BlanketDropOffRatesAllSpsInRange.new. - call('Blanket drop off rates for all SPs last 30 days', today - 30.days, today) - end - - def blanket_drop_off_rates_per_sp_all_time(ret, sp) - ret << Db::DocAuthLog::BlanketDropOffRatesPerSpAllTime.new. - call('Blanket drop off rates per SP all time', sp.issuer) - end - - def blanket_drop_off_rates_per_sp_last_24_hours(ret, sp) - ret << Db::DocAuthLog::BlanketDropOffRatesPerSpInRange.new. - call('Blanket drop off rates last 24 hours', sp.issuer, Date.yesterday, today) - end - - def blanket_drop_off_rates_per_sp_last_30_days(ret, sp) - ret << Db::DocAuthLog::BlanketDropOffRatesPerSpInRange.new. - call('Blanket drop off rates last 30 days', sp.issuer, today - 30.days, today) - end - - def overall_drop_off_rates_per_sp_all_time(ret, sp) - ret << Db::DocAuthLog::OverallDropOffRatesPerSpAllTime.new. - call('Overall drop off rates per SP all time', sp.issuer) - end - - def overall_drop_off_rates_per_sp_last_24_hours(ret, sp) - ret << Db::DocAuthLog::OverallDropOffRatesPerSpInRange.new. - call('Overall drop off rates last 24 hours', sp.issuer, Date.yesterday, today) - end - - def overall_drop_off_rates_per_sp_last_30_days(ret, sp) - ret << Db::DocAuthLog::OverallDropOffRatesPerSpInRange.new. - call('Overall drop off rates last 30 days', sp.issuer, today - 30.days, today) - end - - def today - @today ||= Date.current - end - end -end diff --git a/app/jobs/reports/doc_auth_funnel_report.rb b/app/jobs/reports/doc_auth_funnel_report.rb deleted file mode 100644 index ac6b81d9b3e..00000000000 --- a/app/jobs/reports/doc_auth_funnel_report.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'identity/hostdata' - -module Reports - class DocAuthFunnelReport < BaseReport - REPORT_NAME = 'doc-auth-funnel-report'.freeze - - include GoodJob::ActiveJobExtensions::Concurrency - - good_job_control_concurrency_with( - total_limit: 1, - key: -> { "#{REPORT_NAME}-#{arguments.first}" }, - ) - - def perform(_date) - report = transaction_with_timeout do - Db::DocAuthLog::DocAuthFunnelSummaryStats.new.call - end - save_report(REPORT_NAME, report.to_json, extension: 'json') - end - end -end diff --git a/app/jobs/reports/omb_fitara_report.rb b/app/jobs/reports/omb_fitara_report.rb deleted file mode 100644 index 93f06eca58b..00000000000 --- a/app/jobs/reports/omb_fitara_report.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'identity/hostdata' - -module Reports - class OmbFitaraReport < BaseReport - OLDEST_TIMESTAMP = '2016-01-01 00:00:00'.freeze - MOST_RECENT_MONTHS_COUNT = 2 - REPORT_NAME = 'omb-fitara-report'.freeze - - include GoodJob::ActiveJobExtensions::Concurrency - - good_job_control_concurrency_with( - total_limit: 1, - key: -> { "#{REPORT_NAME}-#{arguments.first}" }, - ) - - def perform(_date) - results = transaction_with_timeout do - report_hash - end - save_report(REPORT_NAME, results.to_json, extension: 'json') - end - - private - - def report_hash - month, year = current_month - counts = [] - MOST_RECENT_MONTHS_COUNT.times do - counts << { month: "#{year}#{format('%02d', month)}", count: count_for_month(month, year) } - month, year = previous_month(month, year) - end - { counts: counts } - end - - def count_for_month(month, year) - month, year = next_month(month, year) - finish = "#{year}-#{month}-01 00:00:00" - Funnel::Registration::RangeRegisteredCount.call(OLDEST_TIMESTAMP, finish) - end - - def current_month - today = Time.zone.today - [today.strftime('%m').to_i, today.strftime('%Y').to_i] - end - - def next_month(month, year) - month += 1 - if month > 12 - month = 1 - year += 1 - end - [month, year] - end - - def previous_month(month, year) - month -= 1 - if month.zero? - month = 12 - year -= 1 - end - [month, year] - end - end -end diff --git a/app/jobs/reports/sp_active_users_over_period_of_performance_report.rb b/app/jobs/reports/sp_active_users_over_period_of_performance_report.rb deleted file mode 100644 index dc3294034b8..00000000000 --- a/app/jobs/reports/sp_active_users_over_period_of_performance_report.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'identity/hostdata' - -module Reports - class SpActiveUsersOverPeriodOfPerformanceReport < BaseReport - REPORT_NAME = 'sp-active-users-over-period-of-performance-report'.freeze - - include GoodJob::ActiveJobExtensions::Concurrency - - good_job_control_concurrency_with( - total_limit: 1, - key: -> { "#{REPORT_NAME}-#{arguments.first}" }, - ) - - def perform(_date) - results = transaction_with_timeout do - Db::Identity::SpActiveUserCountsWithinIaaWindow.call - end - save_report(REPORT_NAME, results.to_json, extension: 'json') - end - end -end diff --git a/app/jobs/reports/sp_cost_report.rb b/app/jobs/reports/sp_cost_report.rb deleted file mode 100644 index 63d906e786a..00000000000 --- a/app/jobs/reports/sp_cost_report.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'identity/hostdata' - -module Reports - class SpCostReport < BaseReport - REPORT_NAME = 'sp-cost-report'.freeze - - include GoodJob::ActiveJobExtensions::Concurrency - - good_job_control_concurrency_with( - total_limit: 1, - key: -> { "#{REPORT_NAME}-#{arguments.first}" }, - ) - - def perform(_date) - results = transaction_with_timeout do - Db::SpCost::SpCostSummary.call(first_of_this_month, end_of_today) - end - save_report(REPORT_NAME, results.to_json, extension: 'json') - end - end -end diff --git a/app/jobs/reports/total_sp_cost_report.rb b/app/jobs/reports/total_sp_cost_report.rb deleted file mode 100644 index dc171ce7529..00000000000 --- a/app/jobs/reports/total_sp_cost_report.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'identity/hostdata' - -module Reports - class TotalSpCostReport < BaseReport - REPORT_NAME = 'total-sp-cost-report'.freeze - - include GoodJob::ActiveJobExtensions::Concurrency - - good_job_control_concurrency_with( - total_limit: 1, - key: -> { "#{REPORT_NAME}-#{arguments.first}" }, - ) - - def perform(_date) - auth_counts = transaction_with_timeout do - Db::SpCost::TotalSpCostSummary.call(first_of_this_month, end_of_today) - end - save_report(REPORT_NAME, auth_counts.to_json, extension: 'json') - end - end -end diff --git a/app/models/doc_auth_log.rb b/app/models/doc_auth_log.rb index 032b9c09e8f..b79991975bc 100644 --- a/app/models/doc_auth_log.rb +++ b/app/models/doc_auth_log.rb @@ -6,8 +6,4 @@ class DocAuthLog < ApplicationRecord foreign_key: 'issuer', primary_key: 'issuer' # rubocop:enable Rails/InverseOf - - def self.verified_users_count - Profile.where.not(verified_at: nil).count - end end diff --git a/app/services/db/doc_auth_log/blanket_drop_off_rates_all_sps_all_time.rb b/app/services/db/doc_auth_log/blanket_drop_off_rates_all_sps_all_time.rb deleted file mode 100644 index 25d3bde407f..00000000000 --- a/app/services/db/doc_auth_log/blanket_drop_off_rates_all_sps_all_time.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Db - module DocAuthLog - class BlanketDropOffRatesAllSpsAllTime - include DropOffRatesHelper - - def call(title) - drop_off_rates(title: title) - end - - private - - def verified_user_counts_query - <<~SQL - #{select_count_from_profiles_where_verified_and_active} - SQL - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} - SQL - end - end - end -end diff --git a/app/services/db/doc_auth_log/blanket_drop_off_rates_all_sps_in_range.rb b/app/services/db/doc_auth_log/blanket_drop_off_rates_all_sps_in_range.rb deleted file mode 100644 index 7ad6eece1ff..00000000000 --- a/app/services/db/doc_auth_log/blanket_drop_off_rates_all_sps_in_range.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Db - module DocAuthLog - class BlanketDropOffRatesAllSpsInRange - include DropOffRatesHelper - - def call(title, start, finish) - drop_off_rates(title: title, start: start, finish: finish) - end - - private - - def verified_user_counts_query - <<~SQL - #{select_count_from_profiles_where_verified_and_active} - and user_id in (select user_id from doc_auth_logs where #{start} <= welcome_view_at and welcome_view_at < #{finish}) - SQL - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} where #{start} <= welcome_view_at and welcome_view_at < #{finish} - SQL - end - end - end -end diff --git a/app/services/db/doc_auth_log/blanket_drop_off_rates_per_sp_all_time.rb b/app/services/db/doc_auth_log/blanket_drop_off_rates_per_sp_all_time.rb deleted file mode 100644 index 69b15bc4351..00000000000 --- a/app/services/db/doc_auth_log/blanket_drop_off_rates_per_sp_all_time.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Db - module DocAuthLog - class BlanketDropOffRatesPerSpAllTime - include DropOffRatesHelper - - def call(title, issuer) - drop_off_rates(title: title, issuer: issuer, start: oldest_ial2_date, finish: Date.tomorrow) - end - - private - - def verified_user_counts_query - <<~SQL - select count(*) from identities - where ial>=2 and service_provider = '#{@issuer}' and - user_id in (select user_id from profiles) - SQL - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} where issuer='#{@issuer}' - SQL - end - end - end -end diff --git a/app/services/db/doc_auth_log/blanket_drop_off_rates_per_sp_in_range.rb b/app/services/db/doc_auth_log/blanket_drop_off_rates_per_sp_in_range.rb deleted file mode 100644 index 4d7b2898d18..00000000000 --- a/app/services/db/doc_auth_log/blanket_drop_off_rates_per_sp_in_range.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Db - module DocAuthLog - class BlanketDropOffRatesPerSpInRange - include DropOffRatesHelper - - def call(title, issuer, start, finish) - drop_off_rates(title: title, issuer: issuer, start: start, finish: finish) - end - - private - - def verified_user_counts_query - <<~SQL - select count(*) from identities - where ial>=2 and service_provider = '#{@issuer}' and #{start} <= created_at and created_at < #{finish} - and user_id in (select user_id from profiles) - SQL - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} where #{start} <= welcome_view_at and welcome_view_at < #{finish} and issuer='#{@issuer}' - SQL - end - end - end -end diff --git a/app/services/db/doc_auth_log/doc_auth_funnel_summary_stats.rb b/app/services/db/doc_auth_log/doc_auth_funnel_summary_stats.rb deleted file mode 100644 index b6f55ca5049..00000000000 --- a/app/services/db/doc_auth_log/doc_auth_funnel_summary_stats.rb +++ /dev/null @@ -1,59 +0,0 @@ -module Db - module DocAuthLog - class DocAuthFunnelSummaryStats - SKIP_FIELDS = - %w[id user_id created_at updated_at no_sp_session_started_at issuer - last_document_error state aamva].freeze - - def call - total_count = ::DocAuthLog.count - return {} if total_count.zero? - convert_percentages(total_count) - results['total_verified_users_count'] = ::DocAuthLog.verified_users_count - results['total_verify_attempted_users_count'] = total_count - results - end - - private - - def convert_percentages(total_count) - results.each do |key, value| - multiplier = key.end_with?('_percent') ? 100.0 : 1.0 - results[key] = (value * multiplier / total_count).round(2) - end - end - - def results - @results ||= execute_funnel_sql - end - - def execute_funnel_sql - sep = '' - ::DocAuthLog.new.attributes.keys.each do |attribute| - next unless append_sql(sql_a, attribute, sep) - sep = ',' - end - sql_a << ' FROM doc_auth_logs' - ActiveRecord::Base.connection.execute(sql_a.join)[0] - end - - def append_sql(sql_a, attribute, sep) - return if SKIP_FIELDS.index(attribute) - sql_a << aggregate_sql(attribute, sep) - true - end - - def sql_a - @sql_a ||= ['SELECT '] - end - - def aggregate_sql(attribute, sep) - if attribute.end_with?('_at') - "#{sep}count(#{attribute}) AS #{attribute[0..-3]}percent" - else - "#{sep}sum(#{attribute}) AS #{attribute}_average" - end - end - end - end -end diff --git a/app/services/db/doc_auth_log/drop_off_rates_helper.rb b/app/services/db/doc_auth_log/drop_off_rates_helper.rb deleted file mode 100644 index d57daac0321..00000000000 --- a/app/services/db/doc_auth_log/drop_off_rates_helper.rb +++ /dev/null @@ -1,146 +0,0 @@ -module Db - module DocAuthLog - module DropOffRatesHelper - STEPS = %w[ - welcome - agreement - capture_document - cap_doc_submit - ssn - verify_info - verify_submit - phone - encrypt - personal_key - verified - ].freeze - - private - - attr_reader :start, :finish, :issuer, :results - - def drop_off_rates(title:, issuer: nil, start: nil, finish: nil) - @title = title - @issuer = issuer - @start = ActiveRecord::Base.connection.quote(start) if start - @finish = ActiveRecord::Base.connection.quote(finish) if finish - generate_report - end - - def select_count_from_profiles_where_verified_and_active - <<~SQL - select count(*) - from profiles - where verified_at is not null and active=true - SQL - end - - def select_counts_from_doc_auth_logs - <<~SQL - select count(welcome_view_at) as welcome, count(agreement_view_at) as agreement, count(upload_view_at) as upload_option, - count(COALESCE(back_image_view_at,mobile_back_image_view_at,capture_mobile_back_image_view_at,present_cac_view_at,document_capture_view_at)) as capture_document, - count(COALESCE(case when document_capture_submit_count>0 then 1 else null end, - case when back_image_submit_count>0 then 1 else null end, - case when capture_mobile_back_image_submit_count>0 then 1 else null end, - case when mobile_back_image_submit_count>0 then 1 else null end)) as cap_doc_submit, - count(COALESCE(ssn_view_at,enter_info_view_at)) as ssn, - count(verify_view_at) as verify_info, - count(COALESCE(case when verify_submit_count>0 then 1 else null end)) as verify_submit, - count(verify_phone_view_at) as phone, - count(encrypt_view_at) as encrypt, - count(verified_view_at) as personal_key - from doc_auth_logs - SQL - end - - def images_submitted - predicates = [ - 'back_image_submit_count>0', - 'mobile_back_image_submit_count>0', - 'capture_mobile_back_image_submit_count>0', - ].join(' or ') - - "(#{predicates})" - end - - def images_or_piv_cac_submitted - "(#{images_submitted} OR #{piv_cac_submitted})" - end - - def piv_cac_submitted - predicates = [ - 'present_cac_submit_count>0', - ].join(' or ') - - "(#{predicates})" - end - - def oldest_ial2_date - '01/01/2019' - end - - def initialize_results - @results = [] - @results << @title + (issuer ? ", issuer: #{issuer}" : '') + "\n" - @results << "#{start} <= date user starts doc auth < #{finish}\n\n" if start || finish - end - - def generate_report - initialize_results - rates = drop_offs_in_range - verified_profiles = verified_profiles_in_range - rates['verified'] = verified_profiles[0]['count'] - results << format("%20s %6s %3s %3s\n", 'step', 'users', '%users', 'dropoff') - print_report(rates) - end - - def verified_profiles_in_range - ActiveRecord::Base.connection.execute(verified_user_counts_query) - end - - def drop_offs_in_range - rates = ActiveRecord::Base.connection.execute(drop_offs_query) - rates[0] - end - - def verified_profiles_count_for_issuer - query = <<~SQL - select count(*) from identities where service_provider = '#{issuer}' and - user_id in (select user_id from profiles) - SQL - ActiveRecord::Base.connection.execute(query) - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} - where #{start} <= welcome_view_at and welcome_view_at < #{finish} and issuer='#{issuer}' - SQL - end - - def print_report(rates) - STEPS.each_with_index do |step, index| - percent_left = calc_percent_left(rates, step, STEPS[0]) - dropoff = calc_dropoff(rates, STEPS[index + 1], step) - results << format("%20s %6d %5d%% %6d%%\n", step, rates[step], percent_left, dropoff) - end - results << "\n\n" - results.join - end - - def calc_percent_left(rec, step, total) - return 100 unless step && total - total = rec[total] - return 100 if total.zero? - ((rec[step] / total.to_f) * 100.0).round - end - - def calc_dropoff(rec, step, total) - return 0 unless step && total - total = rec[total] - return 0 if total.zero? - ((1 - (rec[step] / total.to_f)) * 100.0).round - end - end - end -end diff --git a/app/services/db/doc_auth_log/overall_drop_off_rates_all_sps_all_time.rb b/app/services/db/doc_auth_log/overall_drop_off_rates_all_sps_all_time.rb deleted file mode 100644 index 98e544abbcb..00000000000 --- a/app/services/db/doc_auth_log/overall_drop_off_rates_all_sps_all_time.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Db - module DocAuthLog - class OverallDropOffRatesAllSpsAllTime - include DropOffRatesHelper - - def call(title) - drop_off_rates(title: title) - end - - private - - def verified_user_counts_query - <<~SQL - #{select_count_from_profiles_where_verified_and_active} - and user_id in (select user_id from doc_auth_logs where #{images_or_piv_cac_submitted}) - SQL - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} - where #{images_or_piv_cac_submitted} - SQL - end - end - end -end diff --git a/app/services/db/doc_auth_log/overall_drop_off_rates_all_sps_in_range.rb b/app/services/db/doc_auth_log/overall_drop_off_rates_all_sps_in_range.rb deleted file mode 100644 index 7ecdefd4cf6..00000000000 --- a/app/services/db/doc_auth_log/overall_drop_off_rates_all_sps_in_range.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Db - module DocAuthLog - class OverallDropOffRatesAllSpsInRange - include DropOffRatesHelper - - def call(title, start, finish) - drop_off_rates(title: title, start: start, finish: finish) - end - - private - - def verified_user_counts_query - <<~SQL - #{select_count_from_profiles_where_verified_and_active} - and user_id in (select user_id from doc_auth_logs where #{start} <= welcome_view_at and welcome_view_at < #{finish} and #{images_or_piv_cac_submitted}) - SQL - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} - where #{start} <= welcome_view_at and welcome_view_at < #{finish} and #{images_or_piv_cac_submitted} - SQL - end - end - end -end diff --git a/app/services/db/doc_auth_log/overall_drop_off_rates_per_sp_all_time.rb b/app/services/db/doc_auth_log/overall_drop_off_rates_per_sp_all_time.rb deleted file mode 100644 index 119ed5f5d08..00000000000 --- a/app/services/db/doc_auth_log/overall_drop_off_rates_per_sp_all_time.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Db - module DocAuthLog - class OverallDropOffRatesPerSpAllTime - include DropOffRatesHelper - - def call(title, issuer) - drop_off_rates(title: title, issuer: issuer) - end - - private - - def verified_user_counts_query - <<~SQL - select count(*) from identities - where service_provider='#{issuer}' and ial>=2 - and user_id in (select user_id from doc_auth_logs where #{images_or_piv_cac_submitted}) - and user_id in (select user_id from profiles) - SQL - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} - where issuer='#{issuer}' and #{images_or_piv_cac_submitted} - SQL - end - end - end -end diff --git a/app/services/db/doc_auth_log/overall_drop_off_rates_per_sp_in_range.rb b/app/services/db/doc_auth_log/overall_drop_off_rates_per_sp_in_range.rb deleted file mode 100644 index c549dc618b6..00000000000 --- a/app/services/db/doc_auth_log/overall_drop_off_rates_per_sp_in_range.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Db - module DocAuthLog - class OverallDropOffRatesPerSpInRange - include DropOffRatesHelper - - def call(title, issuer, start, finish) - drop_off_rates(title: title, issuer: issuer, start: start, finish: finish) - end - - private - - def verified_user_counts_query - <<~SQL - select count(*) from identities - where service_provider='#{issuer}' and ial>=2 - and user_id in (select user_id from doc_auth_logs where #{start} <= welcome_view_at and welcome_view_at < #{finish} and #{images_or_piv_cac_submitted}) - and user_id in (select user_id from profiles) - SQL - end - - def drop_offs_query - <<~SQL - #{select_counts_from_doc_auth_logs} - where issuer='#{issuer}' and #{start} <= welcome_view_at and welcome_view_at < #{finish} - and ((#{images_or_piv_cac_submitted}) OR (#{piv_cac_submitted})) - SQL - end - end - end -end diff --git a/app/services/db/identity/sp_active_user_counts_within_iaa_window.rb b/app/services/db/identity/sp_active_user_counts_within_iaa_window.rb deleted file mode 100644 index ec00be51f01..00000000000 --- a/app/services/db/identity/sp_active_user_counts_within_iaa_window.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Db - module Identity - # Similar to SpActiveUserCounts, but it limits dates to within active IAA windows - class SpActiveUserCountsWithinIaaWindow - def self.call - sql = <<~SQL - SELECT - service_providers.issuer - , MAX(service_providers.app_id) AS app_id - , MAX(service_providers.iaa) AS iaa - , MIN(service_providers.iaa_start_date) AS iaa_start_date - , MAX(service_providers.iaa_end_date) AS iaa_end_date - , SUM( - CASE - WHEN identities.last_ial1_authenticated_at >= service_providers.iaa_start_date THEN 1 - ELSE 0 - END - ) AS total_ial1_active - , SUM( - CASE - WHEN identities.last_ial2_authenticated_at >= service_providers.iaa_start_date THEN 1 - ELSE 0 - END - ) AS total_ial2_active - FROM service_providers - INNER JOIN identities ON identities.service_provider = service_providers.issuer - WHERE - ( - identities.last_ial1_authenticated_at >= service_providers.iaa_start_date - OR identities.last_ial2_authenticated_at >= service_providers.iaa_start_date - ) - GROUP BY service_providers.issuer - ORDER BY service_providers.issuer ASC - SQL - - ActiveRecord::Base.connection.execute(sql) - end - end - end -end diff --git a/app/services/db/sp_cost/sp_cost_summary.rb b/app/services/db/sp_cost/sp_cost_summary.rb deleted file mode 100644 index a5bd73b4799..00000000000 --- a/app/services/db/sp_cost/sp_cost_summary.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Db - module SpCost - class SpCostSummary - def self.call(start, finish) - params = { - start: ActiveRecord::Base.connection.quote(start), - finish: ActiveRecord::Base.connection.quote(finish), - } - - sql = format(<<~SQL, params) - SELECT sp_costs.issuer,sp_costs.ial,cost_type,MAX(app_id) AS app_id,COUNT(*) - FROM sp_costs, service_providers - WHERE %{start} <= sp_costs.created_at and sp_costs.created_at <= %{finish} AND - sp_costs.issuer = service_providers.issuer - GROUP BY sp_costs.issuer,sp_costs.ial,cost_type ORDER BY issuer,ial,cost_type - SQL - ActiveRecord::Base.connection.execute(sql) - end - end - end -end diff --git a/app/services/db/sp_cost/total_sp_cost_summary.rb b/app/services/db/sp_cost/total_sp_cost_summary.rb deleted file mode 100644 index 92dd418596b..00000000000 --- a/app/services/db/sp_cost/total_sp_cost_summary.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Db - module SpCost - class TotalSpCostSummary - def self.call(start, finish) - params = { - start: ActiveRecord::Base.connection.quote(start), - finish: ActiveRecord::Base.connection.quote(finish), - } - - sql = format(<<~SQL, params) - SELECT cost_type,COUNT(*) - FROM sp_costs - WHERE %{start} <= created_at and created_at <= %{finish} - GROUP BY cost_type ORDER BY cost_type - SQL - ActiveRecord::Base.connection.execute(sql) - end - end - end -end diff --git a/app/services/funnel/registration/range_registered_count.rb b/app/services/funnel/registration/range_registered_count.rb deleted file mode 100644 index 8336235ecbf..00000000000 --- a/app/services/funnel/registration/range_registered_count.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Funnel - module Registration - class RangeRegisteredCount - def self.call(start, finish) - RegistrationLog.where('? < registered_at AND registered_at < ?', start, finish).count - end - end - end -end diff --git a/config/initializers/job_configurations.rb b/config/initializers/job_configurations.rb index febb221d85f..6e27918a9a5 100644 --- a/config/initializers/job_configurations.rb +++ b/config/initializers/job_configurations.rb @@ -22,12 +22,6 @@ cron: cron_5m, args: -> { [Time.zone.now] }, }, - # Send OMB Fitara report to s3 - omb_fitara_report: { - class: 'Reports::OmbFitaraReport', - cron: cron_24h, - args: -> { [Time.zone.today] }, - }, # Send Agency User Counts Report to S3 agency_user_counts: { class: 'Reports::AgencyUserCountsReport', @@ -52,30 +46,12 @@ cron: cron_24h, args: -> { [Time.zone.today] }, }, - # Send Doc Auth Funnel Report to S3 - doc_auth_funnel_report: { - class: 'Reports::DocAuthFunnelReport', - cron: cron_24h, - args: -> { [Time.zone.today] }, - }, # Proofing Costs Report to S3 proofing_costs: { class: 'Reports::ProofingCostsReport', cron: cron_24h, args: -> { [Time.zone.today] }, }, - # Doc auth drop off rates per sprint to S3 - doc_auth_dropoff_per_sprint: { - class: 'Reports::DocAuthDropOffRatesPerSprintReport', - cron: cron_24h, - args: -> { [Time.zone.today] }, - }, - # SP Costs Report to S3 - sp_costs: { - class: 'Reports::SpCostReport', - cron: cron_24h, - args: -> { [Time.zone.today] }, - }, # Agency Invoice Supplement Report to S3 sp_invoice_supplement_by_iaa: { class: 'Reports::AgencyInvoiceIaaSupplementReport', @@ -99,12 +75,6 @@ cron: cron_24h, args: -> { [Time.zone.today] }, }, - # Total SP Costs Report to S3 - total_sp_costs: { - class: 'Reports::TotalSpCostReport', - cron: cron_24h, - args: -> { [Time.zone.today] }, - }, # Total IAL2 Costs Report to S3 total_ial2_costs: { class: 'Reports::TotalIal2CostsReport', @@ -117,18 +87,6 @@ cron: cron_24h, args: -> { [Time.zone.today] }, }, - # SP Active Users Report to S3 - sp_active_users_period_pf_performance: { - class: 'Reports::SpActiveUsersOverPeriodOfPerformanceReport', - cron: cron_24h, - args: -> { [Time.zone.today] }, - }, - # Doc auth drop off rates report - doc_auth_dropoff_rates: { - class: 'Reports::DocAuthDropOffRatesReport', - cron: cron_24h, - args: -> { [Time.zone.today] }, - }, # Send deleted user accounts to S3 deleted_user_accounts: { class: 'Reports::DeletedUserAccountsReport', diff --git a/spec/features/reports/doc_auth_drop_off_rates_per_sprint_report_spec.rb b/spec/features/reports/doc_auth_drop_off_rates_per_sprint_report_spec.rb deleted file mode 100644 index 852498a7834..00000000000 --- a/spec/features/reports/doc_auth_drop_off_rates_per_sprint_report_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'rails_helper' - -feature 'Doc auth drop offs per sprint report' do - it 'does not throw an error' do - expect(Reports::DocAuthDropOffRatesPerSprintReport.new.perform(Time.zone.today)).to be_present - end -end diff --git a/spec/features/reports/doc_auth_drop_off_rates_report_spec.rb b/spec/features/reports/doc_auth_drop_off_rates_report_spec.rb deleted file mode 100644 index 22e4af809c9..00000000000 --- a/spec/features/reports/doc_auth_drop_off_rates_report_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'rails_helper' - -feature 'Doc auth drop off rates report' do - it 'does not throw an error' do - expect(Reports::DocAuthDropOffRatesReport.new.perform(Time.zone.today)).to be_present - end - - it 'has all the steps in the funnel report in the left most column and justified' do - report = Reports::DocAuthDropOffRatesReport.new.perform(Time.zone.today) - Db::DocAuthLog::DropOffRatesHelper::STEPS.each do |step| - expect(report.include?(format("\n%20s", step))).to be true - end - end -end diff --git a/spec/features/reports/doc_auth_funnel_report_spec.rb b/spec/features/reports/doc_auth_funnel_report_spec.rb deleted file mode 100644 index b69b77c7ad6..00000000000 --- a/spec/features/reports/doc_auth_funnel_report_spec.rb +++ /dev/null @@ -1,139 +0,0 @@ -require 'rails_helper' - -feature 'Doc Auth Funnel report' do - include IdvStepHelper - include DocAuthHelper - - let(:subject) { Db::DocAuthLog::DocAuthFunnelSummaryStats } - let(:user) { create(:user, :signed_up) } - let(:user2) { create(:user, :signed_up) } - let(:issuer) { 'foo' } - let(:summary1) do - { - 'total_verified_users_count' => 0, - 'total_verify_attempted_users_count' => 1, - } - end - let(:summary2) do - { - 'total_verified_users_count' => 0, - 'total_verify_attempted_users_count' => 2, - } - end - let(:verify_funnel) do - { - 'back_image_error_count_average' => 0.0, - 'back_image_submit_count_average' => 0.0, - 'back_image_view_count_average' => 0.0, - 'back_image_view_percent' => 0.0, - 'capture_complete_view_count_average' => 0.0, - 'capture_complete_view_percent' => 0.0, - 'capture_mobile_back_image_view_count_average' => 0.0, - 'capture_mobile_back_image_view_percent' => 0.0, - 'capture_mobile_back_image_error_count_average' => 0.0, - 'capture_mobile_back_image_submit_count_average' => 0.0, - 'choose_method_view_count_average' => 0.0, - 'choose_method_view_percent' => 0.0, - 'document_capture_error_count_average' => 0.0, - 'document_capture_submit_count_average' => 1.0, - 'document_capture_view_count_average' => 1.0, - 'document_capture_view_percent' => 100.0, - 'email_sent_view_count_average' => 0.0, - 'email_sent_view_percent' => 0.0, - 'encrypt_view_count_average' => 0.0, - 'encrypt_view_percent' => 0.0, - 'enter_info_view_count_average' => 0.0, - 'enter_info_view_percent' => 0.0, - 'front_image_error_count_average' => 0.0, - 'front_image_submit_count_average' => 0.0, - 'front_image_view_count_average' => 0.0, - 'front_image_view_percent' => 0.0, - 'link_sent_view_count_average' => 0.0, - 'link_sent_view_percent' => 0.0, - 'mobile_back_image_view_count_average' => 0.0, - 'mobile_back_image_view_percent' => 0.0, - 'mobile_back_image_error_count_average' => 0.0, - 'mobile_back_image_submit_count_average' => 0.0, - 'mobile_front_image_view_count_average' => 0.0, - 'mobile_front_image_view_percent' => 0.0, - 'mobile_front_image_error_count_average' => 0.0, - 'mobile_front_image_submit_count_average' => 0.0, - 'present_cac_error_count_average' => 0.0, - 'present_cac_submit_count_average' => 0.0, - 'present_cac_view_count_average' => 0.0, - 'present_cac_view_percent' => 0.0, - 'selfie_error_count_average' => 0.0, - 'selfie_submit_count_average' => 0.0, - 'selfie_view_count_average' => 0.0, - 'selfie_view_percent' => 0.0, - 'send_link_view_count_average' => 0.0, - 'send_link_view_percent' => 0.0, - 'ssn_view_count_average' => 1.0, - 'ssn_view_percent' => 100.0, - 'success_view_count_average' => 0.0, - 'success_view_percent' => 0.0, - 'upload_view_count_average' => 1.0, - 'upload_view_percent' => 100.0, - 'usps_address_view_count_average' => 0.0, - 'usps_address_view_percent' => 0.0, - 'usps_letter_sent_submit_count_average' => 0.0, - 'usps_letter_sent_error_count_average' => 0.0, - 'verified_view_count_average' => 0.0, - 'verified_view_percent' => 0.0, - 'verify_error_count_average' => 0.0, - # Bug: We're currently double-counting these views (LG-6538) - 'verify_phone_view_count_average' => 2.0, - 'verify_phone_view_percent' => 100.0, - 'verify_submit_count_average' => 1.0, - 'verify_view_count_average' => 1.0, - 'verify_view_percent' => 100.0, - 'welcome_view_count_average' => 1.0, - 'welcome_view_percent' => 100.0, - 'agreement_view_count_average' => 1.0, - 'agreement_view_percent' => 100.0, - 'verify_phone_submit_count_average' => 0.0, - 'verify_phone_submit_percent' => 0.0, - 'document_capture_submit_percent' => 100.0, - 'verify_submit_percent' => 100.0, - 'back_image_submit_percent' => 0.0, - 'capture_mobile_back_image_submit_percent' => 0.0, - 'mobile_back_image_submit_percent' => 0.0, - } - end - - it 'works for no records' do - expect(subject.new.call).to eq({}) - end - - it 'works for one flow', js: true do - sign_in_and_2fa_user(user) - complete_all_doc_auth_steps - - expect(subject.new.call).to eq(verify_funnel.merge(summary1)) - - Funnel::DocAuth::ResetSteps.call(user.id) - expect(subject.new.call).to_not eq(verify_funnel.merge(summary1)) - end - - it 'works for two flows', js: true do - sign_in_and_2fa_user(user) - complete_all_doc_auth_steps - sign_in_and_2fa_user(user2) - complete_all_doc_auth_steps - - expect(subject.new.call).to eq(verify_funnel.merge(summary2)) - end - - it 'does not create a doc_auth_log entry without a welcome first' do - Funnel::DocAuth::RegisterStep.new(user.id, issuer).call('upload', :view, true) - - expect(DocAuthLog.count).to eq(0) - end - - it 'does create a doc_auth_log entry when a welcome is first' do - Funnel::DocAuth::RegisterStep.new(user.id, issuer).call('welcome', :view, true) - Funnel::DocAuth::RegisterStep.new(user.id, issuer).call('upload', :view, true) - - expect(DocAuthLog.count).to eq(1) - end -end diff --git a/spec/features/reports/omb_fitara_report_spec.rb b/spec/features/reports/omb_fitara_report_spec.rb deleted file mode 100644 index 742e3538208..00000000000 --- a/spec/features/reports/omb_fitara_report_spec.rb +++ /dev/null @@ -1,49 +0,0 @@ -require 'rails_helper' - -feature 'OMB Fitara compliance officer runs report' do - it 'works in july' do - travel_to(Date.new(2019, 7, 2)) do - visit sign_up_email_path - sign_up_and_2fa_ial1_user - - results = '{"counts":[{"month":"201907","count":1},{"month":"201906","count":0}]}' - expect(Reports::OmbFitaraReport.new.perform(Time.zone.today)).to eq(results) - end - end - - it 'works in december' do - travel_to(Date.new(2019, 12, 2)) do - visit sign_up_email_path - sign_up_and_2fa_ial1_user - - results = '{"counts":[{"month":"201912","count":1},{"month":"201911","count":0}]}' - expect(Reports::OmbFitaraReport.new.perform(Time.zone.today)).to eq(results) - end - end - - it 'works in january' do - travel_to(Date.new(2019, 1, 2)) do - visit sign_up_email_path - sign_up_and_2fa_ial1_user - - results = '{"counts":[{"month":"201901","count":1},{"month":"201812","count":0}]}' - expect(Reports::OmbFitaraReport.new.perform(Time.zone.today)).to eq(results) - end - end - - describe '.generate_s3_paths' do - let(:report_name) { 'omb-fitara-report' } - - it 'generates paths with date or latest prefix' do - expect(Identity::Hostdata).to receive(:env).and_return('ci') - - travel_to(Date.new(2018, 1, 2)) do - expect(Reports::OmbFitaraReport.new.send(:generate_s3_paths, report_name, 'json')). - to eq( - ['ci/omb-fitara-report/latest.omb-fitara-report.json', - 'ci/omb-fitara-report/2018/2018-01-02.omb-fitara-report.json'], - ) - end - end - end -end diff --git a/spec/jobs/reports/sp_active_users_over_period_of_performance_report_spec.rb b/spec/jobs/reports/sp_active_users_over_period_of_performance_report_spec.rb deleted file mode 100644 index ad36992ce09..00000000000 --- a/spec/jobs/reports/sp_active_users_over_period_of_performance_report_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'rails_helper' - -describe Reports::SpActiveUsersOverPeriodOfPerformanceReport do - subject { described_class.new } - - let(:issuer) { 'foo' } - let(:issuer2) { 'foo2' } - let(:app_id) { 'app' } - - it 'is empty' do - expect(subject.perform(Time.zone.today)).to eq('[]') - end - - it 'returns total active user counts per sp broken down by ial1 and ial2' do - now = Time.zone.now - service_provider = ServiceProvider.create( - issuer: issuer, - friendly_name: issuer, - app_id: app_id, - iaa_start_date: now - 6.months, - iaa_end_date: now + 6.months, - ) - ServiceProviderIdentity.create( - user_id: 1, service_provider: issuer, uuid: 'foo1', - last_ial1_authenticated_at: now, last_ial2_authenticated_at: now - ) - ServiceProviderIdentity.create( - user_id: 2, service_provider: issuer, uuid: 'foo2', - last_ial1_authenticated_at: now - ) - ServiceProviderIdentity.create( - user_id: 3, service_provider: issuer, uuid: 'foo3', - last_ial2_authenticated_at: now - ) - ServiceProviderIdentity.create( - user_id: 4, service_provider: issuer, uuid: 'foo4', - last_ial2_authenticated_at: now - ) - - result = subject.perform(Time.zone.today) - - expect(JSON.parse(result, symbolize_names: true)).to eq( - [{ - issuer: issuer, - app_id: app_id, - iaa: service_provider.iaa, - total_ial1_active: 2, - total_ial2_active: 3, - iaa_start_date: service_provider.iaa_start_date.to_s, - iaa_end_date: service_provider.iaa_end_date.to_s, - }], - ) - end - - describe '#good_job_concurrency_key' do - let(:date) { Time.zone.today } - - it 'is the job name and the date' do - job = described_class.new(date) - expect(job.good_job_concurrency_key). - to eq("#{described_class::REPORT_NAME}-#{date}") - end - end -end diff --git a/spec/jobs/reports/sp_cost_report_spec.rb b/spec/jobs/reports/sp_cost_report_spec.rb deleted file mode 100644 index bc301c94bb3..00000000000 --- a/spec/jobs/reports/sp_cost_report_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'rails_helper' - -describe Reports::SpCostReport do - subject { described_class.new } - - let(:issuer1) { 'issuer1' } - let(:app_id1) { 'app_id1' } - let(:issuer2) { 'issuer2' } - let(:app_id2) { 'app_id2' } - - it 'is empty' do - expect(subject.perform(Time.zone.today)).to eq('[]') - end - - it 'totals the cost per sp' do - ::SpCost.create(issuer: issuer1, ial: 1, agency_id: 2, cost_type: 'foo') - ::SpCost.create(issuer: issuer1, ial: 1, agency_id: 2, cost_type: 'foo') - ::SpCost.create(issuer: issuer2, ial: 2, agency_id: 3, cost_type: 'bar') - ServiceProvider.create(issuer: issuer1, friendly_name: issuer1, app_id: app_id1) - ServiceProvider.create(issuer: issuer2, friendly_name: issuer2, app_id: app_id2) - expect(JSON.parse(subject.perform(Time.zone.today))).to eq( - [{ - 'issuer' => 'issuer1', - 'ial' => 1, - 'app_id' => app_id1, - 'cost_type' => 'foo', - 'count' => 2, - }, - { - 'issuer' => 'issuer2', - 'ial' => 2, - 'app_id' => app_id2, - 'cost_type' => 'bar', - 'count' => 1, - }], - ) - end - - describe '#good_job_concurrency_key' do - let(:date) { Time.zone.today } - - it 'is the job name and the date' do - job = described_class.new(date) - expect(job.good_job_concurrency_key). - to eq("#{described_class::REPORT_NAME}-#{date}") - end - end -end diff --git a/spec/jobs/reports/total_sp_cost_report_spec.rb b/spec/jobs/reports/total_sp_cost_report_spec.rb deleted file mode 100644 index 60b0a3c5a5e..00000000000 --- a/spec/jobs/reports/total_sp_cost_report_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'rails_helper' - -describe Reports::TotalSpCostReport do - subject { described_class.new } - - let(:issuer1) { 'issuer1' } - let(:issuer2) { 'issuer2' } - - it 'is empty' do - expect(subject.perform(Time.zone.today)).to eq('[]') - end - - it 'totals the cost per sp' do - ::SpCost.create(issuer: '', ial: 1, agency_id: 0, cost_type: 'foo') - ::SpCost.create(issuer: issuer1, ial: 1, agency_id: 2, cost_type: 'foo') - ::SpCost.create(issuer: issuer1, ial: 1, agency_id: 2, cost_type: 'foo') - ::SpCost.create(issuer: issuer2, ial: 2, agency_id: 3, cost_type: 'bar') - expect(JSON.parse(subject.perform(Time.zone.today))).to eq( - [{ - 'cost_type' => 'bar', - 'count' => 1, - }, - { - 'cost_type' => 'foo', - 'count' => 3, - }], - ) - end - - describe '#good_job_concurrency_key' do - let(:date) { Time.zone.today } - - it 'is the job name and the date' do - job = described_class.new(date) - expect(job.good_job_concurrency_key). - to eq("#{described_class::REPORT_NAME}-#{date}") - end - end -end diff --git a/spec/services/db/identity/sp_active_user_counts_within_iaa_window_spec.rb b/spec/services/db/identity/sp_active_user_counts_within_iaa_window_spec.rb deleted file mode 100644 index 6c9d515e364..00000000000 --- a/spec/services/db/identity/sp_active_user_counts_within_iaa_window_spec.rb +++ /dev/null @@ -1,118 +0,0 @@ -require 'rails_helper' - -describe Db::Identity::SpActiveUserCountsWithinIaaWindow do - subject { described_class } - - it 'is empty' do - expect(subject.call.ntuples).to eq(0) - end - - context 'with data' do - let(:service_provider_no_start_end) do - create( - :service_provider, - issuer: 'issuer1', - iaa_start_date: nil, - iaa_end_date: nil, - ) - end - - let(:service_provider_april_to_april) do - create( - :service_provider, - issuer: 'issuer2', - iaa: 'iaa_abcdef', - iaa_start_date: Date.new(2021, 4, 1), - iaa_end_date: Date.new(2022, 4, 1), - ) - end - - let(:service_provider_september_to_september) do - create( - :service_provider, - issuer: 'issuer3', - iaa_start_date: Date.new(2021, 9, 1), - iaa_end_date: Date.new(2022, 9, 1), - ) - end - - let(:inside_april_to_april) { Date.new(2021, 5, 1) } - let(:inside_september_to_september) { Date.new(2021, 10, 1) } - let(:outside_iaas) { Date.new(2020, 1, 1) } - - before do - # SP without start/end dates, one IAL 1 login (skipped) - create( - :service_provider_identity, - service_provider_record: service_provider_no_start_end, - last_ial1_authenticated_at: inside_april_to_april, - ) - - # April-April SP - # one IAL1 login within IAA window - create( - :service_provider_identity, - service_provider_record: service_provider_april_to_april, - last_ial1_authenticated_at: inside_april_to_april, - ) - # one IAL1 login outside IAA window (skipped) - create( - :service_provider_identity, - service_provider_record: service_provider_april_to_april, - last_ial1_authenticated_at: outside_iaas, - ) - - # September-September SP - # has two IAL1 logins within IAA window - 2.times do - create( - :service_provider_identity, - service_provider_record: service_provider_september_to_september, - last_ial1_authenticated_at: inside_september_to_september, - ) - end - # has two IAL2 logins within IAA window - 3.times do - create( - :service_provider_identity, - service_provider_record: service_provider_september_to_september, - last_ial2_authenticated_at: inside_september_to_september, - ) - end - # has one IAL2 login outside IAA window (skipped) - create( - :service_provider_identity, - service_provider_record: service_provider_september_to_september, - last_ial2_authenticated_at: outside_iaas, - ) - end - - it 'returns active user counts by SP with the IAA start/end, counted by IAL1 level' do - result = subject.call - - expect(result.ntuples).to eq(2) - - april = result.first - expect(april.symbolize_keys).to eq( - issuer: service_provider_april_to_april.issuer, - app_id: service_provider_april_to_april.app_id, - iaa: service_provider_april_to_april.iaa, - total_ial1_active: 1, - total_ial2_active: 0, - iaa_start_date: service_provider_april_to_april.iaa_start_date.to_s, - iaa_end_date: service_provider_april_to_april.iaa_end_date.to_s, - ) - - september = result.to_a.last - expect(september.symbolize_keys).to eq( - issuer: service_provider_september_to_september.issuer, - app_id: service_provider_september_to_september.app_id, - iaa: service_provider_september_to_september.iaa, - total_ial1_active: 2, - total_ial2_active: 3, - iaa_start_date: service_provider_september_to_september.iaa_start_date.to_s, - iaa_end_date: service_provider_september_to_september.iaa_end_date.to_s, - ) - end - end -end diff --git a/spec/services/funnel/registration/range_registered_count_spec.rb b/spec/services/funnel/registration/range_registered_count_spec.rb deleted file mode 100644 index 271fb357b69..00000000000 --- a/spec/services/funnel/registration/range_registered_count_spec.rb +++ /dev/null @@ -1,58 +0,0 @@ -require 'rails_helper' - -describe Funnel::Registration::RangeRegisteredCount do - let(:analytics) { FakeAnalytics.new } - subject { described_class } - - let(:start) { '2019-01-01 00:00:00' } - let(:finish) { '2019-12-31 23:59:50' } - - it 'returns 0 when there are no records' do - expect(subject.call(start, finish)).to eq(0) - end - - it 'returns 1 when the record is mid range' do - register_user(2019, 6, 1) - - expect(subject.call(start, finish)).to eq(1) - end - - it 'returns 1 when the record is in same month is upper range' do - register_user(2019, 12, 30) - - expect(subject.call(start, finish)).to eq(1) - end - - it 'returns 1 when the record is in same month is lower range' do - register_user(2019, 1, 2) - - expect(subject.call(start, finish)).to eq(1) - end - - it 'returns 0 when the record is lower than lower range' do - register_user(2018, 12, 31) - - expect(subject.call(start, finish)).to eq(0) - end - - it 'returns 0 when the record is higher than higher range' do - register_user(2020, 1, 2) - - expect(subject.call(start, finish)).to eq(0) - end - - it 'returns 2 when 2 records are in range' do - register_user(2019, 1, 2) - register_user(2019, 12, 30) - - expect(subject.call(start, finish)).to eq(2) - end - - def register_user(year, month, day) - travel_to Date.new(year, month, day) do - user = create(:user) - user_id = user.id - Funnel::Registration::AddMfa.call(user_id, 'backup_codes', analytics) - end - end -end