diff --git a/app/services/idv/steps/in_person/state_id_step.rb b/app/services/idv/steps/in_person/state_id_step.rb index 2bece07396f..28eb78b758d 100644 --- a/app/services/idv/steps/in_person/state_id_step.rb +++ b/app/services/idv/steps/in_person/state_id_step.rb @@ -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] + pii_from_user[:zipcode] = flow_params[:state_id_zipcode] + mark_step_complete(:address) + end end def extra_view_variables diff --git a/spec/features/idv/in_person_spec.rb b/spec/features/idv/in_person_spec.rb index 76c4f85a5ac..fb395e3ed3c 100644 --- a/spec/features/idv/in_person_spec.rb +++ b/spec/features/idv/in_person_spec.rb @@ -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 diff --git a/spec/features/idv/steps/in_person/verify_step_spec.rb b/spec/features/idv/steps/in_person/verify_step_spec.rb index d72e72aa289..0894b3144fe 100644 --- a/spec/features/idv/steps/in_person/verify_step_spec.rb +++ b/spec/features/idv/steps/in_person/verify_step_spec.rb @@ -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) diff --git a/spec/services/idv/steps/in_person/state_id_step_spec.rb b/spec/services/idv/steps/in_person/state_id_step_spec.rb index 894e4d6d8d0..a61e36e2d26 100644 --- a/spec/services/idv/steps/in_person/state_id_step_spec.rb +++ b/spec/services/idv/steps/in_person/state_id_step_spec.rb @@ -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( @@ -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 @@ -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 @@ -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 + 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