diff --git a/app/services/doc_auth/lexis_nexis/responses/true_id_response.rb b/app/services/doc_auth/lexis_nexis/responses/true_id_response.rb index 3c2f92ee622..87ea392b909 100644 --- a/app/services/doc_auth/lexis_nexis/responses/true_id_response.rb +++ b/app/services/doc_auth/lexis_nexis/responses/true_id_response.rb @@ -139,6 +139,7 @@ def create_response_info transaction_status: transaction_status, transaction_reason_code: transaction_reason_code, product_status: product_status, + decision_product_status: decision_product_status, doc_auth_result: doc_auth_result, processed_alerts: alerts, alert_failure_count: alerts[:failed]&.count.to_i, @@ -189,10 +190,18 @@ def product_status true_id_product&.dig(:ProductStatus) end + def decision_product_status + true_id_product_decision&.dig(:ProductStatus) + end + def true_id_product products[:TrueID] if products.present? end + def true_id_product_decision + products[:TrueID_Decision] if products.present? + end + def parsed_alerts return @new_alerts if defined?(@new_alerts) diff --git a/spec/services/doc_auth/lexis_nexis/responses/true_id_response_spec.rb b/spec/services/doc_auth/lexis_nexis/responses/true_id_response_spec.rb index 56e5d4ea0bf..2ce347432ea 100644 --- a/spec/services/doc_auth/lexis_nexis/responses/true_id_response_spec.rb +++ b/spec/services/doc_auth/lexis_nexis/responses/true_id_response_spec.rb @@ -99,6 +99,7 @@ transaction_status: 'passed', transaction_reason_code: 'trueid_pass', product_status: 'pass', + decision_product_status: 'pass', doc_auth_result: 'Passed', processed_alerts: a_hash_including(:failed), address_line2_present: true, @@ -145,6 +146,49 @@ end end + context 'when True_ID response does not contain a decision product status' do + let(:true_id_response_success_2) { JSON.parse(LexisNexisFixtures.true_id_response_success_2) } + describe 'when a True_ID Decision product is not present in the response' do + it 'excludes decision_product_status from logging' do + body_no_decision = true_id_response_success_2.tap do |json| + json['Products'].delete_if { |products| products['ProductType'] == 'TrueID_Decision' } + end.to_json + + decision_product = get_decision_product(true_id_response_success_2) + expect(decision_product).to be_nil + success_response_no_decision = instance_double( + Faraday::Response, status: 200, + body: body_no_decision + ) + response = described_class.new(success_response_no_decision, config) + + expect(response.to_h[:decision_product_status]).to be_nil + end + end + + describe 'when a True_ID_Decision does not contain a status' do + it 'excludes decision_product_status from logging' do + decision_product = get_decision_product(true_id_response_success_2) + body_no_decision_status = decision_product.tap do |json| + json.delete('ProductStatus') + end.to_json + + expect(decision_product['ProductStatus']).to be_nil + success_response_no_decision_status = instance_double( + Faraday::Response, status: 200, + body: body_no_decision_status + ) + response = described_class.new(success_response_no_decision_status, config) + + expect(response.to_h[:decision_product_status]).to be_nil + end + end + + def get_decision_product(resp) + resp['Products'].find { |product| product['ProductType'] == 'TrueID_Decision' } + end + end + context 'when the barcode can not be read' do let(:response) do described_class.new(attention_barcode_read, config) @@ -241,6 +285,7 @@ transaction_status: 'failed', transaction_reason_code: 'failed_true_id', product_status: 'pass', + decision_product_status: 'fail', doc_auth_result: 'Failed', processed_alerts: a_hash_including(:passed, :failed), address_line2_present: false,