Skip to content
Merged
12 changes: 10 additions & 2 deletions app/services/idv/steps/in_person/state_id_step.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,21 @@ def self.analytics_submitted_event
end

def call
pii_from_user = flow_session[:pii_from_user]
Idv::StateIdForm::ATTRIBUTES.each do |attr|
flow_session[:pii_from_user][attr] = flow_params[attr]
end

# Accept Date of Birth from both memorable date and input date components
formatted_dob = MemorableDateComponent.extract_date_param flow_params&.[](:dob)
flow_session[:pii_from_user][:dob] = formatted_dob if formatted_dob
pii_from_user[:dob] = formatted_dob if formatted_dob
if capture_secondary_id_enabled? && pii_from_user[:same_address_as_id] == 'true'
pii_from_user[:address1] = flow_params[:state_id_address1]
pii_from_user[:address2] = flow_params[:state_id_address2]
pii_from_user[:city] = flow_params[:state_id_city]
pii_from_user[:state] = flow_params[:state_id_state]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉

pii_from_user[:zipcode] = flow_params[:state_id_zipcode]
mark_step_complete(:address)
end
end

def extra_view_variables
Expand Down
37 changes: 37 additions & 0 deletions spec/features/idv/in_person_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -651,4 +651,41 @@
it_behaves_like 'captures address with state id'
end
end

context 'in_person_capture_secondary_id_enabled feature flag enabled and same address as id',
allow_browser_log: true do
let(:user) { user_with_2fa }

before(:each) do
allow(IdentityConfig.store).to receive(:in_person_capture_secondary_id_enabled).
and_return(true)

sign_in_and_2fa_user(user)
begin_in_person_proofing(user)
complete_location_step(user)
complete_prepare_step(user)
end

it 'skips the address page' do
complete_state_id_step(user, same_address_as_id: true, double_address_verification: true)
# skip address step
complete_ssn_step(user)
# Ensure the page submitted successfully
expect(page).to have_content(
t('idv.form.ssn_label_html'),
)
end

it 'can redo the address page form' do
complete_state_id_step(user, same_address_as_id: true, double_address_verification: true)
# skip address step
complete_ssn_step(user)
# click update address button on the verify page
click_button t('idv.buttons.change_address_label')
expect(page).to have_content(t('in_person_proofing.headings.update_address'))
fill_out_address_form_ok(double_address_verification: true, same_address_as_id: true)
click_button t('forms.buttons.submit.update')
expect(page).to have_content(t('headings.verify'))
end
end
end
4 changes: 0 additions & 4 deletions spec/features/idv/steps/in_person/verify_step_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -149,10 +149,6 @@
user, same_address_as_id: same_address_as_id,
double_address_verification: double_address_verification
)
fill_out_address_form_ok(
same_address_as_id: same_address_as_id,
double_address_verification: double_address_verification,
)
click_idv_continue
complete_ssn_step(user)

Expand Down
81 changes: 78 additions & 3 deletions spec/services/idv/steps/in_person/state_id_step_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
let(:submitted_values) { {} }
let(:params) { ActionController::Parameters.new({ state_id: submitted_values }) }
let(:user) { build(:user) }
let(:capture_secondary_id_enabled) { false }
let(:enrollment) { InPersonEnrollment.new(capture_secondary_id_enabled:) }
let(:service_provider) { create(:service_provider) }
let(:controller) do
instance_double(
Expand All @@ -27,18 +29,25 @@
let(:first_name) { 'Natalya' }
let(:last_name) { 'Rostova' }
let(:dob) { '1980-01-01' }
let(:state_id_jurisdiction) { 'Nevada' }
let(:state_id_state) { 'Nevada' }
let(:state_id_number) { 'ABC123234' }
let(:submitted_values) do
{
first_name: first_name,
last_name: last_name,
dob: dob,
state_id_jurisdiction: state_id_jurisdiction,
state_id_state: state_id_state,
state_id_number: state_id_number,
}
end

before do
allow(IdentityConfig.store).to receive(:in_person_capture_secondary_id_enabled).
and_return(false)
allow(user).to receive(:establishing_in_person_enrollment).
and_return(enrollment)
end

it 'sets values in flow session' do
Idv::StateIdForm::ATTRIBUTES.each do |attr|
expect(flow.flow_session[:pii_from_user]).to_not have_key attr
Expand All @@ -50,7 +59,7 @@
expect(pii_from_user[:first_name]).to eq first_name
expect(pii_from_user[:last_name]).to eq last_name
expect(pii_from_user[:dob]).to eq dob
expect(pii_from_user[:state_id_jurisdiction]).to eq state_id_jurisdiction
expect(pii_from_user[:state_id_state]).to eq state_id_state
expect(pii_from_user[:state_id_number]).to eq state_id_number
end

Expand Down Expand Up @@ -150,4 +159,70 @@
end
end
end

describe 'skip address step?' do
let(:pii_from_user) { flow.flow_session[:pii_from_user] }
let(:params) { ActionController::Parameters.new({ state_id: submitted_values }) }
let(:capture_secondary_id_enabled) { true }
let(:enrollment) { InPersonEnrollment.new(capture_secondary_id_enabled:) }
let(:dob) { '1980-01-01' }
let(:state_id_state) { 'Nevada' }
let(:state_id_city) { 'Twin Peaks' }
let(:state_id_address1) { '123 Sesame Street' }
let(:state_id_address2) { 'Apt. #C' }
let(:state_id_zipcode) { '90001' }
let(:same_address_as_id) { 'true' }
let(:submitted_values) do
{
dob: dob,
state_id_state: state_id_state,
state_id_city: state_id_city,
state_id_address1: state_id_address1,
state_id_address2: state_id_address2,
state_id_zipcode: state_id_zipcode,
same_address_as_id: same_address_as_id,
}
end

before(:each) do
allow(step).to receive(:current_user).
and_return(user)
allow(user).to receive(:establishing_in_person_enrollment).
and_return(enrollment)
end

context 'same address as id' do
it 'marks the address step as complete' do
step.call

address_step = flow.flow_session[Idv::Steps::InPerson::AddressStep.name]
expect(address_step).to eq true
end

it 'adds state id values to address values in pii' do
step.call

pii_from_user = flow.flow_session[:pii_from_user]
expect(pii_from_user[:address1]).to eq state_id_address1
expect(pii_from_user[:address2]).to eq state_id_address2
expect(pii_from_user[:city]).to eq state_id_city
expect(pii_from_user[:state]).to eq state_id_state
expect(pii_from_user[:zipcode]).to eq state_id_zipcode
end
end

context 'different address from id' do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clear testing, nice! 👏🏻

let(:same_address_as_id) { 'false' }
it 'does not add state id values to address values in pii' do
step.call

pii_from_user = flow.flow_session[:pii_from_user]
expect(pii_from_user[:address1]).to_not eq state_id_address1
expect(pii_from_user[:address2]).to_not eq state_id_address2
expect(pii_from_user[:city]).to_not eq state_id_city
expect(pii_from_user[:state]).to_not eq state_id_state
expect(pii_from_user[:zipcode]).to_not eq state_id_zipcode
end
end
end
end