diff --git a/app/jobs/get_usps_proofing_results_job.rb b/app/jobs/get_usps_proofing_results_job.rb index 56835044cf1..f2f34376301 100644 --- a/app/jobs/get_usps_proofing_results_job.rb +++ b/app/jobs/get_usps_proofing_results_job.rb @@ -19,6 +19,15 @@ class GetUspsProofingResultsJob < ApplicationJob discard_on GoodJob::ActiveJobExtensions::Concurrency::ConcurrencyExceededError + def email_analytics_attributes(enrollment) + { + timestamp: Time.zone.now, + user_id: enrollment.user_id, + service_provider: enrollment.issuer, + delay_time_seconds: mail_delivery_params[:wait], + } + end + def enrollment_analytics_attributes(enrollment, complete:) { enrollment_code: enrollment.enrollment_code, @@ -220,8 +229,16 @@ def handle_failed_status(enrollment, response) enrollment.update(status: :failed) if response['fraudSuspected'] send_failed_fraud_email(enrollment.user, enrollment) + analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_email_initiated( + **email_analytics_attributes(enrollment), + email_type: 'Failed fraud suspected', + ) else send_failed_email(enrollment.user, enrollment) + analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_email_initiated( + **email_analytics_attributes(enrollment), + email_type: 'Failed', + ) end end @@ -234,6 +251,10 @@ def handle_successful_status_update(enrollment, response) passed: true, reason: 'Successful status update', ) + analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_email_initiated( + **email_analytics_attributes(enrollment), + email_type: 'Success', + ) enrollment.profile.activate enrollment.update(status: :passed) send_verified_email(enrollment.user, enrollment) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index 1ec5126caea..3f55617516c 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -2766,6 +2766,19 @@ def idv_in_person_usps_proofing_results_job_enrollment_updated( ) end + # Tracks emails that are initiated during GetUspsProofingResultsJob + # @param [String] email_type success, failed or failed fraud + def idv_in_person_usps_proofing_results_job_email_initiated( + email_type:, + **extra + ) + track_event( + 'GetUspsProofingResultsJob: Success or failure email initiated', + email_type: email_type, + **extra, + ) + end + # Tracks users visiting the recovery options page def account_reset_recovery_options_visit track_event('Account Reset: Recovery Options Visited') diff --git a/spec/jobs/get_usps_proofing_results_job_spec.rb b/spec/jobs/get_usps_proofing_results_job_spec.rb index 0cc4aa41af9..7341b51cf92 100644 --- a/spec/jobs/get_usps_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_proofing_results_job_spec.rb @@ -38,6 +38,24 @@ ) end + context 'email_analytics_attributes' do + before(:each) do + stub_request_passed_proofing_results + end + it 'logs message with email analytics attributes' do + freeze_time do + job.perform(Time.zone.now) + expect(job_analytics).to have_logged_event( + 'GetUspsProofingResultsJob: Success or failure email initiated', + timestamp: Time.zone.now, + user_id: pending_enrollment.user_id, + service_provider: pending_enrollment.issuer, + delay_time_seconds: 3600, + ) + end + end + end + it 'updates the status of the enrollment and profile appropriately' do freeze_time do pending_enrollment.update( @@ -407,6 +425,10 @@ 'GetUspsProofingResultsJob: Enrollment status updated', reason: 'Successful status update', ) + expect(job_analytics).to have_logged_event( + 'GetUspsProofingResultsJob: Success or failure email initiated', + email_type: 'Success', + ) end end @@ -429,6 +451,36 @@ expect(job_analytics).to have_logged_event( 'GetUspsProofingResultsJob: Enrollment status updated', ) + expect(job_analytics).to have_logged_event( + 'GetUspsProofingResultsJob: Success or failure email initiated', + email_type: 'Failed', + ) + end + end + + context 'when an enrollment fails and fraud is suspected' do + before(:each) do + stub_request_failed_suspected_fraud_proofing_results + end + + it_behaves_like( + 'enrollment with a status update', + passed: false, + status: 'failed', + response_json: UspsInPersonProofing::Mock::Fixtures. + request_failed_suspected_fraud_proofing_results_response, + ) + + it 'logs fraud failure details' do + job.perform(Time.zone.now) + + expect(job_analytics).to have_logged_event( + 'GetUspsProofingResultsJob: Enrollment status updated', + ) + expect(job_analytics).to have_logged_event( + 'GetUspsProofingResultsJob: Success or failure email initiated', + email_type: 'Failed fraud suspected', + ) end end