Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions app/controllers/concerns/idv_step_concern.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
27 changes: 3 additions & 24 deletions app/controllers/idv/agreement_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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'

Expand Down
2 changes: 1 addition & 1 deletion app/controllers/idv/how_to_verify_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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? &&
Expand Down
51 changes: 50 additions & 1 deletion spec/controllers/concerns/idv_step_concern_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Comment on lines +120 to +135
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

If, instead, you had a sub-context with passport allowed under IPP is enabled, you would only have one repeated before action.

end
end

context 'hybrid flow not available' do
Expand Down
4 changes: 2 additions & 2 deletions spec/controllers/idv/agreement_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down