diff --git a/app/services/proofing/aamva/applicant.rb b/app/services/proofing/aamva/applicant.rb index db8ca90ccef..d521a6cd384 100644 --- a/app/services/proofing/aamva/applicant.rb +++ b/app/services/proofing/aamva/applicant.rb @@ -11,6 +11,11 @@ def self.from_proofer_applicant(applicant) last_name: applicant[:last_name], dob: format_dob(applicant[:dob]), state_id_data: format_state_id_data(applicant), + address1: applicant[:address1], + address2: applicant[:address2], + city: applicant[:city], + state: applicant[:state], + zipcode: applicant[:zipcode]&.slice(0..4), ) end diff --git a/app/services/proofing/aamva/request/templates/verify.xml.erb b/app/services/proofing/aamva/request/templates/verify.xml.erb index 2d6740e135a..c9ab21d99b6 100644 --- a/app/services/proofing/aamva/request/templates/verify.xml.erb +++ b/app/services/proofing/aamva/request/templates/verify.xml.erb @@ -25,6 +25,12 @@ + + + + + + diff --git a/app/services/proofing/aamva/request/verification_request.rb b/app/services/proofing/aamva/request/verification_request.rb index 3154e1745bf..99132c7856c 100644 --- a/app/services/proofing/aamva/request/verification_request.rb +++ b/app/services/proofing/aamva/request/verification_request.rb @@ -60,9 +60,36 @@ def add_user_provided_data_to_body user_provided_data_map.each do |xpath, data| REXML::XPath.first(document, xpath).add_text(data) end + add_street_address_line_2_to_rexml_document(document) if applicant.address2.present? @body = document.to_s end + def add_street_address_line_2_to_rexml_document(document) + old_address_node = document.delete_element('//ns1:Address') + new_address_node = old_address_node.clone + old_address_node.children.each do |child_node| + next unless child_node.node_type == :element + + new_element = child_node.clone + new_element.add_text(child_node.text) + new_address_node.add_element(new_element) + + if child_node.name == 'AddressDeliveryPointText' + new_address_node.add_element(address_line_2_element) + end + end + REXML::XPath.first( + document, + '//ns:verifyDriverLicenseDataRequest', + ).add_element(new_address_node) + end + + def address_line_2_element + element = REXML::Element.new('ns2:AddressDeliveryPointText') + element.add_text(applicant.address2) + element + end + def build_request_body renderer = ERB.new(request_body_template) @body = renderer.result(binding) @@ -106,6 +133,10 @@ def user_provided_data_map '//ns2:PersonGivenName' => applicant.first_name, '//ns2:PersonSurName' => applicant.last_name, '//ns1:PersonBirthDate' => applicant.dob, + '//ns2:AddressDeliveryPointText' => applicant.address1, + '//ns2:LocationCityName' => applicant.city, + '//ns2:LocationStateUsPostalServiceCode' => applicant.state, + '//ns2:LocationPostalCode' => applicant.zipcode, } end diff --git a/app/services/proofing/aamva/response/verification_response.rb b/app/services/proofing/aamva/response/verification_response.rb index 315855591ee..62938086233 100644 --- a/app/services/proofing/aamva/response/verification_response.rb +++ b/app/services/proofing/aamva/response/verification_response.rb @@ -11,6 +11,11 @@ class VerificationResponse 'PersonBirthDateMatchIndicator' => :dob, 'PersonLastNameExactMatchIndicator' => :last_name, 'PersonFirstNameExactMatchIndicator' => :first_name, + 'AddressLine1MatchIndicator' => :address1, + 'AddressLine2MatchIndicator' => :address2, + 'AddressCityMatchIndicator' => :city, + 'AddressStateCodeMatchIndicator' => :state, + 'AddressZIP5MatchIndicator' => :zipcode, }.freeze REQUIRED_VERIFICATION_ATTRIBUTES = %i[ diff --git a/spec/fixtures/proofing/aamva/requests/verification_request.xml b/spec/fixtures/proofing/aamva/requests/verification_request.xml index fcfa0155aa3..3e6068d01db 100644 --- a/spec/fixtures/proofing/aamva/requests/verification_request.xml +++ b/spec/fixtures/proofing/aamva/requests/verification_request.xml @@ -25,6 +25,12 @@ Testy McTesterson + + 123 Sunnyside way + Sterling + VA + 20176 + diff --git a/spec/fixtures/proofing/aamva/responses/verification_response.xml b/spec/fixtures/proofing/aamva/responses/verification_response.xml index cc797798d14..9cbf1ecc2ff 100644 --- a/spec/fixtures/proofing/aamva/responses/verification_response.xml +++ b/spec/fixtures/proofing/aamva/responses/verification_response.xml @@ -16,4 +16,8 @@ true true true + true + true + true + true diff --git a/spec/fixtures/proofing/aamva/responses/verification_response_namespaced_success.xml b/spec/fixtures/proofing/aamva/responses/verification_response_namespaced_success.xml index 6a67cedf76b..19d08f8624e 100644 --- a/spec/fixtures/proofing/aamva/responses/verification_response_namespaced_success.xml +++ b/spec/fixtures/proofing/aamva/responses/verification_response_namespaced_success.xml @@ -19,8 +19,11 @@ true true true + true + true + true + true - diff --git a/spec/services/proofing/aamva/proofing_spec.rb b/spec/services/proofing/aamva/proofing_spec.rb index 9a0f27a18c1..cd7ed626a22 100644 --- a/spec/services/proofing/aamva/proofing_spec.rb +++ b/spec/services/proofing/aamva/proofing_spec.rb @@ -69,7 +69,7 @@ subject.aamva_proof(state_id_data, result) expect(result.failed?).to eq(true) - expect(result.errors).to eq(dob: ['UNVERIFIED']) + expect(result.errors).to include(dob: ['UNVERIFIED']) end end @@ -82,7 +82,7 @@ subject.aamva_proof(state_id_data, result) expect(result.failed?).to eq(true) - expect(result.errors).to eq(dob: ['MISSING']) + expect(result.errors).to include(dob: ['MISSING']) end end end diff --git a/spec/services/proofing/aamva/request/verification_request_spec.rb b/spec/services/proofing/aamva/request/verification_request_spec.rb index 1f72d0809df..b9a9136cd65 100644 --- a/spec/services/proofing/aamva/request/verification_request_spec.rb +++ b/spec/services/proofing/aamva/request/verification_request_spec.rb @@ -7,6 +7,10 @@ first_name: 'Testy', last_name: 'McTesterson', dob: '10/29/1942', + address1: '123 Sunnyside way', + city: 'Sterling', + state: 'VA', + zipcode: '20176-1234', ) applicant.state_id_data.merge!( state_id_number: '123456789', @@ -39,6 +43,35 @@ expect(subject.body).to_not include('') expect(subject.body).to include('<foo></bar>') end + + it 'includes an address line 2 if one is present' do + applicant.address2 = 'Apt 1' + + document = REXML::Document.new(subject.body) + address_node = REXML::XPath.first(document, '//ns:verifyDriverLicenseDataRequest/ns1:Address') + + address_node_element_names = address_node.elements.map(&:name) + address_node_element_values = address_node.elements.map(&:text) + + expect(address_node_element_names).to eq( + [ + 'AddressDeliveryPointText', + 'AddressDeliveryPointText', + 'LocationCityName', + 'LocationStateUsPostalServiceCode', + 'LocationPostalCode', + ], + ) + expect(address_node_element_values).to eq( + [ + applicant.address1, + applicant.address2, + applicant.city, + applicant.state, + applicant.zipcode, + ], + ) + end end describe '#headers' do diff --git a/spec/services/proofing/aamva/response/verification_response_spec.rb b/spec/services/proofing/aamva/response/verification_response_spec.rb index a80757ef96b..2914a81357e 100644 --- a/spec/services/proofing/aamva/response/verification_response_spec.rb +++ b/spec/services/proofing/aamva/response/verification_response_spec.rb @@ -18,6 +18,11 @@ dob: true, last_name: true, first_name: true, + address1: true, + address2: nil, + city: true, + state: true, + zipcode: true, } end