diff --git a/app/controllers/concerns/idv_step_concern.rb b/app/controllers/concerns/idv_step_concern.rb index 0dfa2373e13..7838fcd8a0b 100644 --- a/app/controllers/concerns/idv_step_concern.rb +++ b/app/controllers/concerns/idv_step_concern.rb @@ -64,17 +64,32 @@ def confirm_hybrid_handoff_needed if params[:redo] idv_session.redo_document_capture = true end - # If we previously skipped hybrid handoff, keep doing that. # If hybrid flow is unavailable, skip it. # But don't store that we skipped it in idv_session, in case it is back to # available when the user tries to redo document capture. if idv_session.skip_hybrid_handoff? || !FeatureManagement.idv_allow_hybrid_flow? idv_session.flow_path = 'standard' - redirect_to vendor_document_capture_url + + if in_person_proofing_route_enabled? + redirect_to idv_how_to_verify_url + elsif idv_session.passport_allowed + redirect_to idv_choose_id_type_url + else + redirect_to vendor_document_capture_url + end end end + def in_person_proofing_route_enabled? + IdentityConfig.store.in_person_proofing_enabled && + IdentityConfig.store.in_person_proofing_opt_in_enabled && + IdentityConfig.store.in_person_doc_auth_button_enabled && + Idv::InPersonConfig.enabled_for_issuer?( + decorated_sp_session.sp_issuer, + ) + end + def vendor_document_capture_url case document_capture_session.doc_auth_vendor when Idp::Constants::Vendors::SOCURE, diff --git a/app/controllers/idv/agreement_controller.rb b/app/controllers/idv/agreement_controller.rb index 6638c3ea708..4f1dd25ffbc 100644 --- a/app/controllers/idv/agreement_controller.rb +++ b/app/controllers/idv/agreement_controller.rb @@ -41,22 +41,10 @@ def update if result.success? idv_session.idv_consent_given_at = Time.zone.now + idv_session.opted_in_to_in_person_proofing = false + idv_session.skip_doc_auth_from_how_to_verify = false - if params[:skip_hybrid_handoff] - if in_person_proofing_route_enabled? - redirect_to idv_how_to_verify_url - elsif idv_session.passport_allowed - idv_session.opted_in_to_in_person_proofing = false - idv_session.skip_doc_auth_from_how_to_verify = false - redirect_to idv_choose_id_type_url - else - redirect_to idv_how_to_verify_url - end - else - idv_session.opted_in_to_in_person_proofing = false - idv_session.skip_doc_auth_from_how_to_verify = false - redirect_to idv_hybrid_handoff_url - end + redirect_to idv_hybrid_handoff_url else render :show end @@ -85,15 +73,6 @@ def analytics_arguments }.merge(ab_test_analytics_buckets) end - def in_person_proofing_route_enabled? - IdentityConfig.store.in_person_proofing_enabled && - IdentityConfig.store.in_person_proofing_opt_in_enabled && - IdentityConfig.store.in_person_doc_auth_button_enabled && - Idv::InPersonConfig.enabled_for_issuer?( - decorated_sp_session.sp_issuer, - ) - end - def skip_to_capture idv_session.flow_path = 'standard' diff --git a/app/controllers/idv/how_to_verify_controller.rb b/app/controllers/idv/how_to_verify_controller.rb index 867d1d00dc5..1e236b0759e 100644 --- a/app/controllers/idv/how_to_verify_controller.rb +++ b/app/controllers/idv/how_to_verify_controller.rb @@ -63,7 +63,7 @@ def self.step_info Idv::StepInfo.new( key: :how_to_verify, controller: self, - next_steps: [:choose_id_type, :hybrid_handoff, :document_capture], + next_steps: [:choose_id_type, :document_capture], preconditions: ->(idv_session:, user:) do self.enabled? && idv_session.idv_consent_given? && diff --git a/spec/controllers/concerns/idv_step_concern_spec.rb b/spec/controllers/concerns/idv_step_concern_spec.rb index fe472b1794c..8c6958b3b92 100644 --- a/spec/controllers/concerns/idv_step_concern_spec.rb +++ b/spec/controllers/concerns/idv_step_concern_spec.rb @@ -75,16 +75,65 @@ def show context 'previously skipped hybrid handoff' do before do idv_session.skip_hybrid_handoff = true - get :show end it 'sets flow_path to standard' do + get :show + expect(idv_session.flow_path).to eql('standard') end it 'redirects to document capture' do + get :show + expect(response).to redirect_to(idv_document_capture_url) end + + context 'when IPP proofing route is enabled' do + before do + allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) + allow(IdentityConfig.store).to receive(:in_person_proofing_opt_in_enabled) + .and_return(true) + allow(IdentityConfig.store).to receive(:in_person_doc_auth_button_enabled) + .and_return(true) + allow(Idv::InPersonConfig).to receive(:enabled_for_issuer?).and_return(true) + end + + it 'redirects to how to verify' do + get :show + + expect(response).to redirect_to(idv_how_to_verify_url) + end + end + + context 'when passport is allowed' do + before do + idv_session.passport_allowed = true + end + + it 'redirects to choose id type' do + get :show + + expect(response).to redirect_to(idv_choose_id_type_url) + end + + context 'when IPP proofing route is enabled' do + before do + allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) + allow(IdentityConfig.store).to receive(:in_person_proofing_opt_in_enabled) + .and_return(true) + allow(IdentityConfig.store).to receive(:in_person_doc_auth_button_enabled) + .and_return(true) + allow(Idv::InPersonConfig).to receive(:enabled_for_issuer?).and_return(true) + end + + it 'redirects to how to verify' do + get :show + + expect(response).to redirect_to(idv_how_to_verify_url) + end + end + end end context 'hybrid flow not available' do diff --git a/spec/controllers/idv/agreement_controller_spec.rb b/spec/controllers/idv/agreement_controller_spec.rb index b61499d5cae..573b4c0a494 100644 --- a/spec/controllers/idv/agreement_controller_spec.rb +++ b/spec/controllers/idv/agreement_controller_spec.rb @@ -194,10 +194,10 @@ }.from(nil).to(true) end - it 'redirects to how to verify' do + it 'redirects to hybrid handoff' do put :update, params: params - expect(response).to redirect_to(idv_how_to_verify_url) + expect(response).to redirect_to(idv_hybrid_handoff_url) end it 'sets an idv_consent_given_at timestamp' do