diff --git a/app/services/usps_in_person_proofing/response/request_enroll_response.rb b/app/services/usps_in_person_proofing/response/request_enroll_response.rb index 44f17c8242d..a6468c25d0f 100644 --- a/app/services/usps_in_person_proofing/response/request_enroll_response.rb +++ b/app/services/usps_in_person_proofing/response/request_enroll_response.rb @@ -15,7 +15,7 @@ def initialize(body) def parse_response unless body.is_a?(Hash) - raise StandardError.new("Expected a hash but got a #{body.class.class_name}") + raise StandardError.new("Expected a hash but got a #{body.class.name}") end unless body['enrollmentCode'] diff --git a/spec/controllers/idv/review_controller_spec.rb b/spec/controllers/idv/review_controller_spec.rb index 45e051ba7d1..8e714d7a63f 100644 --- a/spec/controllers/idv/review_controller_spec.rb +++ b/spec/controllers/idv/review_controller_spec.rb @@ -495,6 +495,26 @@ def show end end + context 'when the USPS response is not a hash' do + let(:stub_usps_response) do + stub_request_enroll_non_hash_response + end + + it 'logs an error message' do + put :create, params: { user: { password: ControllerHelper::VALID_PASSWORD } } + + expect(@analytics).to have_logged_event( + 'USPS IPPaaS enrollment failed', + context: 'authentication', + enrollment_id: enrollment.id, + exception_class: 'UspsInPersonProofing::Exception::RequestEnrollException', + exception_message: 'Expected a hash but got a NilClass', + original_exception_class: 'StandardError', + reason: 'Request exception', + ) + end + end + context 'when the USPS response is missing an enrollment code' do let(:stub_usps_response) do stub_request_enroll_invalid_response diff --git a/spec/support/usps_ipp_helper.rb b/spec/support/usps_ipp_helper.rb index 7efe53ab0aa..df12caf71d6 100644 --- a/spec/support/usps_ipp_helper.rb +++ b/spec/support/usps_ipp_helper.rb @@ -93,6 +93,14 @@ def stub_request_enroll_invalid_response ) end + def stub_request_enroll_non_hash_response + stub_request(:post, %r{/ivs-ippaas-api/IPPRest/resources/rest/optInIPPApplicant}).to_return( + status: 200, + body: nil, + headers: { 'content-type' => 'application/json' }, + ) + end + def stub_request_expired_proofing_results stub_request(:post, %r{/ivs-ippaas-api/IPPRest/resources/rest/getProofingResults}).to_return( **request_expired_proofing_results_args,