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