From 6a9f86a73993f70b61bdcc9bc55d36a11355f577 Mon Sep 17 00:00:00 2001 From: JackRyan1989 Date: Wed, 5 Apr 2023 14:50:10 -0400 Subject: [PATCH 1/8] round of changes complete --- app/services/idv/actions/redo_address_action.rb | 1 + app/services/idv/steps/in_person/state_id_step.rb | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/services/idv/actions/redo_address_action.rb b/app/services/idv/actions/redo_address_action.rb index ce9b404cc8b..5e2535dde25 100644 --- a/app/services/idv/actions/redo_address_action.rb +++ b/app/services/idv/actions/redo_address_action.rb @@ -6,6 +6,7 @@ def self.analytics_submitted_event end def call + mark_step_incomplete(:address) redirect_to idv_address_url end end 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..d34b7f28f97 100644 --- a/app/services/idv/steps/in_person/state_id_step.rb +++ b/app/services/idv/steps/in_person/state_id_step.rb @@ -16,10 +16,18 @@ def call 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 + + if capture_secondary_id_enabled? && flow_session[:pii_from_user][:same_address_as_id] == 'true' + flow_session[:pii_from_user][:address1] = flow_params[:state_id_address1] + flow_session[:pii_from_user][:address2] = flow_params[:state_id_address2] + flow_session[:pii_from_user][:city] = flow_params[:state_id_city] + flow_session[:pii_from_user][:state] = flow_params[:state_id_jurisdiction] + flow_session[:pii_from_user][:zipcode] = flow_params[:state_id_zipcode] + mark_step_complete(:address) + end end def extra_view_variables From 620f6e256748f79f1f264d8eddc38a93b2927f5d Mon Sep 17 00:00:00 2001 From: JackRyan1989 Date: Thu, 6 Apr 2023 22:09:31 -0400 Subject: [PATCH 2/8] Adding and modifying tests --- .../idv/steps/in_person/state_id_step.rb | 1 - spec/features/idv/in_person_spec.rb | 20 +++++ .../idv/steps/in_person/verify_step_spec.rb | 4 - .../idv/steps/in_person/state_id_step_spec.rb | 75 +++++++++++++++++++ 4 files changed, 95 insertions(+), 5 deletions(-) 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 d34b7f28f97..95a75f6336e 100644 --- a/app/services/idv/steps/in_person/state_id_step.rb +++ b/app/services/idv/steps/in_person/state_id_step.rb @@ -19,7 +19,6 @@ def call # 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 - if capture_secondary_id_enabled? && flow_session[:pii_from_user][:same_address_as_id] == 'true' flow_session[:pii_from_user][:address1] = flow_params[:state_id_address1] flow_session[:pii_from_user][:address2] = flow_params[:state_id_address2] diff --git a/spec/features/idv/in_person_spec.rb b/spec/features/idv/in_person_spec.rb index dd8d37d95c7..8f6fad797ff 100644 --- a/spec/features/idv/in_person_spec.rb +++ b/spec/features/idv/in_person_spec.rb @@ -654,4 +654,24 @@ def it_captures_address_with_state_id end 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 } + + it 'skips the address page' 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) + 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 + 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 a8288f3c411..0b3f242e2f8 100644 --- a/spec/features/idv/steps/in_person/verify_step_spec.rb +++ b/spec/features/idv/steps/in_person/verify_step_spec.rb @@ -145,10 +145,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..b8a5f9878cc 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( @@ -39,6 +41,13 @@ } 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 @@ -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_jurisdiction) { '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_jurisdiction: state_id_jurisdiction, + 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_jurisdiction + 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_jurisdiction + expect(pii_from_user[:zipcode]).to_not eq state_id_zipcode + end + end + end end From 95fa93f3a947824f355f27557108f051a84da9c4 Mon Sep 17 00:00:00 2001 From: JackRyan1989 Date: Thu, 6 Apr 2023 22:12:29 -0400 Subject: [PATCH 3/8] changelog: User-Facing Improvements, In-Person Proofing, Skip address page if same address as ID From fef11f7452cf7091c19c7a7b32755980dc710b09 Mon Sep 17 00:00:00 2001 From: JackRyan1989 Date: Thu, 6 Apr 2023 22:29:39 -0400 Subject: [PATCH 4/8] Linting --- app/services/idv/steps/in_person/state_id_step.rb | 15 ++++++++------- spec/features/idv/in_person_spec.rb | 3 ++- .../idv/steps/in_person/state_id_step_spec.rb | 6 +++--- 3 files changed, 13 insertions(+), 11 deletions(-) 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 95a75f6336e..950c3854108 100644 --- a/app/services/idv/steps/in_person/state_id_step.rb +++ b/app/services/idv/steps/in_person/state_id_step.rb @@ -13,18 +13,19 @@ 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 - if capture_secondary_id_enabled? && flow_session[:pii_from_user][:same_address_as_id] == 'true' - flow_session[:pii_from_user][:address1] = flow_params[:state_id_address1] - flow_session[:pii_from_user][:address2] = flow_params[:state_id_address2] - flow_session[:pii_from_user][:city] = flow_params[:state_id_city] - flow_session[:pii_from_user][:state] = flow_params[:state_id_jurisdiction] - flow_session[:pii_from_user][:zipcode] = flow_params[:state_id_zipcode] + 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_jurisdiction] + pii_from_user[:zipcode] = flow_params[:state_id_zipcode] mark_step_complete(:address) end end diff --git a/spec/features/idv/in_person_spec.rb b/spec/features/idv/in_person_spec.rb index 8f6fad797ff..63e4ed39e81 100644 --- a/spec/features/idv/in_person_spec.rb +++ b/spec/features/idv/in_person_spec.rb @@ -655,7 +655,8 @@ def it_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 + 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 } it 'skips the address page' do 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 b8a5f9878cc..75989eaa2dc 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 @@ -161,8 +161,8 @@ 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(: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' } @@ -180,7 +180,7 @@ 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 + same_address_as_id: same_address_as_id, } end From 0cb5dbb61775cdb2244b831adea5da36fe353b0c Mon Sep 17 00:00:00 2001 From: JackRyan1989 Date: Fri, 7 Apr 2023 14:31:46 -0400 Subject: [PATCH 5/8] update tests and state id spec to change jurisdiction --- .../idv/steps/in_person/state_id_step.rb | 2 +- spec/features/idv/in_person_spec.rb | 18 +++++++++++++++++- .../idv/steps/in_person/state_id_step_spec.rb | 8 ++++---- 3 files changed, 22 insertions(+), 6 deletions(-) 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 950c3854108..28eb78b758d 100644 --- a/app/services/idv/steps/in_person/state_id_step.rb +++ b/app/services/idv/steps/in_person/state_id_step.rb @@ -24,7 +24,7 @@ def call 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_jurisdiction] + pii_from_user[:state] = flow_params[:state_id_state] pii_from_user[:zipcode] = flow_params[:state_id_zipcode] mark_step_complete(:address) end diff --git a/spec/features/idv/in_person_spec.rb b/spec/features/idv/in_person_spec.rb index 3981d585e0f..fb395e3ed3c 100644 --- a/spec/features/idv/in_person_spec.rb +++ b/spec/features/idv/in_person_spec.rb @@ -656,13 +656,17 @@ allow_browser_log: true do let(:user) { user_with_2fa } - it 'skips the address page' do + 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) @@ -671,5 +675,17 @@ 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/services/idv/steps/in_person/state_id_step_spec.rb b/spec/services/idv/steps/in_person/state_id_step_spec.rb index 75989eaa2dc..55925932743 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 @@ -36,7 +36,7 @@ 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 @@ -59,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 @@ -166,7 +166,7 @@ let(:capture_secondary_id_enabled) { true } let(:enrollment) { InPersonEnrollment.new(capture_secondary_id_enabled:) } let(:dob) { '1980-01-01' } - let(:state_id_jurisdiction) { 'Nevada' } + let(:state_id_state) { 'Nevada' } let(:state_id_city) { 'Twin Peaks' } let(:state_id_address1) { '123 Sesame Street' } let(:state_id_address2) { 'Apt. #C' } @@ -175,7 +175,7 @@ let(:submitted_values) do { dob: dob, - state_id_jurisdiction: state_id_jurisdiction, + state_id_state: state_id_state, state_id_city: state_id_city, state_id_address1: state_id_address1, state_id_address2: state_id_address2, From c401e769a8cb40e3e043b9d3c48ff3d6c9fc3965 Mon Sep 17 00:00:00 2001 From: JackRyan1989 Date: Fri, 7 Apr 2023 15:24:08 -0400 Subject: [PATCH 6/8] Missed jurisdiction in test --- spec/services/idv/steps/in_person/state_id_step_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 55925932743..7d03f3171ee 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 @@ -206,7 +206,7 @@ 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_jurisdiction + expect(pii_from_user[:state]).to eq state_id_state expect(pii_from_user[:zipcode]).to eq state_id_zipcode end end @@ -220,7 +220,7 @@ 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_jurisdiction + expect(pii_from_user[:state]).to_not eq state_id_state expect(pii_from_user[:zipcode]).to_not eq state_id_zipcode end end From a2030520ac49d4f4863fa4d245f8b287fc2339bc Mon Sep 17 00:00:00 2001 From: JackRyan1989 Date: Fri, 7 Apr 2023 16:17:30 -0400 Subject: [PATCH 7/8] last jurisdiction --- spec/services/idv/steps/in_person/state_id_step_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7d03f3171ee..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 @@ -29,7 +29,7 @@ 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 { From b2d14097e1ece489e12986af74722c01a55590ca Mon Sep 17 00:00:00 2001 From: JackRyan1989 Date: Fri, 7 Apr 2023 16:54:53 -0400 Subject: [PATCH 8/8] undoing call to mark address incomplete --- app/services/idv/actions/redo_address_action.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/services/idv/actions/redo_address_action.rb b/app/services/idv/actions/redo_address_action.rb index 5e2535dde25..ce9b404cc8b 100644 --- a/app/services/idv/actions/redo_address_action.rb +++ b/app/services/idv/actions/redo_address_action.rb @@ -6,7 +6,6 @@ def self.analytics_submitted_event end def call - mark_step_incomplete(:address) redirect_to idv_address_url end end