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
80 changes: 43 additions & 37 deletions app/jobs/get_usps_proofing_results_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -224,14 +224,12 @@ def handle_unsupported_status(enrollment, response)
def handle_unsupported_id_type(enrollment, response)
proofed_at = parse_usps_timestamp(response['transactionEndDateTime'])
enrollment_outcomes[:enrollments_failed] += 1
analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_enrollment_updated(
**enrollment_analytics_attributes(enrollment, complete: true),
**response_analytics_attributes(response),
passed: false,
primary_id_type: response['primaryIdType'],
log_enrollment_updated_analytics(
enrollment: enrollment,
enrollment_passed: false,
enrollment_completed: true,
response: response,
reason: 'Unsupported ID type',
job_name: self.class.name,
tmx_status: enrollment.profile&.tmx_status,
)
enrollment.update(
status: :failed,
Expand Down Expand Up @@ -262,13 +260,12 @@ def handle_incomplete_status_update(enrollment, response_message)

def handle_expired_status_update(enrollment, response, response_message)
enrollment_outcomes[:enrollments_expired] += 1
analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_enrollment_updated(
**enrollment_analytics_attributes(enrollment, complete: true),
**response_analytics_attributes(response[:body]),
passed: false,
log_enrollment_updated_analytics(
enrollment: enrollment,
enrollment_passed: false,
enrollment_completed: true,
response: response[:body],
reason: 'Enrollment has expired',
job_name: self.class.name,
tmx_status: enrollment.profile&.tmx_status,
)
enrollment.update(
status: :expired,
Expand Down Expand Up @@ -341,13 +338,12 @@ def handle_unexpected_response(enrollment, response_message, reason:, cancel: tr
def handle_failed_status(enrollment, response)
proofed_at = parse_usps_timestamp(response['transactionEndDateTime'])
enrollment_outcomes[:enrollments_failed] += 1
analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_enrollment_updated(
**enrollment_analytics_attributes(enrollment, complete: true),
**response_analytics_attributes(response),
passed: false,
log_enrollment_updated_analytics(
enrollment: enrollment,
enrollment_passed: false,
enrollment_completed: true,
response: response,
reason: 'Failed status',
job_name: self.class.name,
tmx_status: enrollment.profile&.tmx_status,
)

enrollment.update(
Expand Down Expand Up @@ -378,13 +374,12 @@ def handle_failed_status(enrollment, response)
def handle_successful_status_update(enrollment, response)
proofed_at = parse_usps_timestamp(response['transactionEndDateTime'])
enrollment_outcomes[:enrollments_passed] += 1
analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_enrollment_updated(
**enrollment_analytics_attributes(enrollment, complete: true),
**response_analytics_attributes(response),
passed: true,
log_enrollment_updated_analytics(
enrollment: enrollment,
enrollment_passed: true,
enrollment_completed: true,
response: response,
reason: 'Successful status update',
job_name: self.class.name,
tmx_status: enrollment.profile&.tmx_status,
)
enrollment.update(
status: :passed,
Expand All @@ -409,13 +404,12 @@ def handle_successful_status_update(enrollment, response)
def handle_passed_with_fraud_review_pending(enrollment, response)
proofed_at = parse_usps_timestamp(response['transactionEndDateTime'])
enrollment_outcomes[:enrollments_passed] += 1
analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_enrollment_updated(
**enrollment_analytics_attributes(enrollment, complete: true),
**response_analytics_attributes(response),
passed: true,
log_enrollment_updated_analytics(
enrollment: enrollment,
enrollment_passed: true,
enrollment_completed: true,
response: response,
reason: 'Passed with fraud pending',
job_name: self.class.name,
tmx_status: enrollment.profile&.tmx_status,
)
enrollment.update(
status: :passed,
Expand All @@ -435,13 +429,12 @@ def handle_passed_with_fraud_review_pending(enrollment, response)
def handle_unsupported_secondary_id(enrollment, response)
proofed_at = parse_usps_timestamp(response['transactionEndDateTime'])
enrollment_outcomes[:enrollments_failed] += 1
analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_enrollment_updated(
**enrollment_analytics_attributes(enrollment, complete: true),
**response_analytics_attributes(response),
passed: false,
log_enrollment_updated_analytics(
enrollment: enrollment,
enrollment_passed: false,
enrollment_completed: true,
response: response,
reason: 'Provided secondary proof of address',
job_name: self.class.name,
tmx_status: enrollment.profile&.tmx_status,
)
enrollment.update(
status: :failed,
Expand Down Expand Up @@ -617,6 +610,19 @@ def response_analytics_attributes(response)
}
end

def log_enrollment_updated_analytics(enrollment:, enrollment_passed:, enrollment_completed:,
response:, reason:)
analytics(user: enrollment.user).idv_in_person_usps_proofing_results_job_enrollment_updated(
**enrollment_analytics_attributes(enrollment, complete: enrollment_completed),
**response_analytics_attributes(response),
passed: enrollment_passed,
reason: reason,
job_name: self.class.name,
tmx_status: enrollment.profile&.tmx_status,
enhanced_ipp: enrollment.enhanced_ipp?,
)
end

def parse_usps_timestamp(usps_timestamp)
return unless usps_timestamp
# Parse timestamps eg 12/17/2020 033855 => Thu, 17 Dec 2020 03:38:55 -0600
Expand Down
17 changes: 15 additions & 2 deletions spec/jobs/get_usps_proofing_results_job_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
RSpec.shared_examples 'enrollment_with_a_status_update' do |passed:,
email_type:,
enrollment_status:,
response_json:|
response_json:,
enhanced_ipp_enrollment: false|

it 'logs a message with common attributes' do
it 'logs an enrollment status update analytics event' do
date_far_from_daylight_savings_changes = Time.zone.parse('2023-11-30T10:00:00Z')
travel_to date_far_from_daylight_savings_changes do
pending_enrollment.update(
Expand Down Expand Up @@ -45,6 +46,7 @@
transaction_start_date_time: anything,
job_name: 'GetUspsProofingResultsJob',
tmx_status: :threatmetrix_pass,
enhanced_ipp: enhanced_ipp_enrollment,
)
end
end
Expand Down Expand Up @@ -689,6 +691,7 @@
reason: 'Successful status update',
passed: true,
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: false,
),
)
expect(job_analytics).to have_logged_event(
Expand Down Expand Up @@ -732,6 +735,7 @@
passed: false,
reason: 'Failed status',
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: false,
),
)
expect(job_analytics).to have_logged_event(
Expand Down Expand Up @@ -776,6 +780,7 @@
passed: false,
reason: 'Failed status',
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: false,
),
)
expect(job_analytics).to have_logged_event(
Expand Down Expand Up @@ -819,6 +824,7 @@
passed: false,
reason: 'Unsupported ID type',
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: false,
),
)

Expand Down Expand Up @@ -859,6 +865,7 @@
transaction_end_date_time: nil,
transaction_start_date_time: nil,
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: false,
),
)
end
Expand Down Expand Up @@ -912,6 +919,7 @@
passed: false,
reason: 'Enrollment has expired',
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: false,
),
)

Expand Down Expand Up @@ -1306,6 +1314,7 @@
passed: true,
reason: 'Passed with fraud pending',
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: false,
),
)
end
Expand Down Expand Up @@ -1397,6 +1406,7 @@
passed: false,
reason: 'Provided secondary proof of address',
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: false,
),
)
end
Expand Down Expand Up @@ -1530,6 +1540,7 @@
enrollment_status: InPersonEnrollment::STATUS_PASSED,
response_json: UspsInPersonProofing::Mock::Fixtures.
request_passed_proofing_unsupported_id_results_response,
enhanced_ipp_enrollment: true,
)

it 'invokes the SendProofingNotificationJob and logs details about the success' do
Expand All @@ -1552,6 +1563,7 @@
reason: 'Successful status update',
passed: true,
job_name: 'GetUspsProofingResultsJob',
enhanced_ipp: true,
),
)
expect(job_analytics).to have_logged_event(
Expand All @@ -1578,6 +1590,7 @@
enrollment_status: InPersonEnrollment::STATUS_PASSED,
response_json: UspsInPersonProofing::Mock::Fixtures.
request_passed_proofing_secondary_id_type_results_response_ial_2,
enhanced_ipp_enrollment: true,
)
end
end
Expand Down