Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
18c786c
end_to_end_idv_spec small refactor
soniaconnolly Nov 13, 2023
2edaf78
Start allowing Ssn to go back to DocumentCapture
soniaconnolly Nov 13, 2023
15dcc25
Split end_to_end and back button specs
soniaconnolly Nov 13, 2023
2b9ac4c
Allow back button starting from VerifyInfo
soniaconnolly Nov 14, 2023
1d688ed
Remove before action from SsnController that prevents back from Verif…
soniaconnolly Nov 14, 2023
ca69c6c
Move #confirm_ssn_step_complete into InPerson::VerifyInfoController
soniaconnolly Nov 14, 2023
6383eed
Use FlowPolicy for AddressController (and SsnController before_action…
soniaconnolly Nov 14, 2023
1cbade8
Merge remote-tracking branch 'origin/main' into sonia-lg-11461-back-f…
soniaconnolly Nov 15, 2023
6bf6130
Merge remote-tracking branch 'origin/main' into sonia-lg-11461-back-f…
soniaconnolly Nov 15, 2023
cc369f3
Add undo_step to ssn - verify_info controllers
soniaconnolly Nov 15, 2023
55d58c7
Merge remote-tracking branch 'origin/main' into sonia-lg-11461-back-f…
soniaconnolly Nov 17, 2023
012d422
clear_invalid_steps! now undoes future steps
solipet Nov 17, 2023
6728ee0
changelog
soniaconnolly Nov 17, 2023
cc21cba
Fix specs
soniaconnolly Nov 17, 2023
7fdde49
Clear more idv_session attributes
soniaconnolly Nov 17, 2023
f09ff68
Add more flow policy specs for ssn to verify_info
soniaconnolly Nov 17, 2023
8745da3
Do not clear redo_document_capture in verify_info
soniaconnolly Nov 17, 2023
93670e0
Add more idv_session fields to flow_session spec for undo_future_step…
soniaconnolly Nov 17, 2023
429ba65
Add confirm_verify_info_needed before_action to AddressController
soniaconnolly Nov 17, 2023
d45b7c0
Update LinkSent before_actions and specs
soniaconnolly Nov 17, 2023
f540afa
address next_steps includes :verify_info
solipet Nov 17, 2023
9e06ba3
rename clear_invalid_steps! to clear_future_invalid_steps!
solipet Nov 17, 2023
72a8617
rename clear_future_invalid_steps! to clear_future_steps!
solipet Nov 17, 2023
d744fc1
Merge remote-tracking branch 'origin/main' into sonia-lg-11461-back-f…
soniaconnolly Nov 20, 2023
f90c2c8
Merge remote-tracking branch 'origin/main' into sonia-lg-11461-back-f…
soniaconnolly Nov 22, 2023
7e2d400
Merge remote-tracking branch 'origin/main' into sonia-lg-11461-back-f…
soniaconnolly Nov 25, 2023
01bd620
Merge remote-tracking branch 'origin/main' into sonia-lg-11461-back-f…
soniaconnolly Nov 27, 2023
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
31 changes: 3 additions & 28 deletions app/controllers/concerns/idv_step_concern.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,6 @@ def flow_path
def confirm_hybrid_handoff_needed
if params[:redo]
idv_session.redo_document_capture = true
elsif idv_session.document_capture_complete?
redirect_to idv_ssn_url
return
end

# If we previously skipped hybrid handoff, keep doing that.
Expand All @@ -70,29 +67,6 @@ def confirm_hybrid_handoff_needed

private

def confirm_document_capture_not_complete
return unless idv_session.document_capture_complete?

redirect_to idv_ssn_url
end

def confirm_ssn_step_complete
return if pii.present? && idv_session.ssn.present?
redirect_to prev_url
end

def confirm_document_capture_complete
return if idv_session.pii_from_doc.present?

if flow_path == 'standard'
redirect_to idv_document_capture_url
elsif flow_path == 'hybrid'
redirect_to idv_link_sent_url
else # no flow_path
redirect_to idv_hybrid_handoff_path
end
end

def confirm_verify_info_step_complete
return if idv_session.verify_info_step_complete?

Expand Down Expand Up @@ -151,10 +125,11 @@ def confirm_step_allowed

def url_for_latest_step
step_info = flow_policy.info_for_latest_step

url_for(controller: step_info.controller, action: step_info.action)
end

def clear_invalid_steps!
flow_policy.undo_steps_from_controller!(controller: self.class)
def clear_future_steps!
flow_policy.undo_future_steps_from_controller!(controller: self.class)
end
end
14 changes: 13 additions & 1 deletion app/controllers/idv/address_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ class AddressController < ApplicationController
include IdvStepConcern

before_action :confirm_not_rate_limited_after_doc_auth
before_action :confirm_document_capture_complete
before_action :confirm_step_allowed
before_action :confirm_verify_info_step_needed

def new
analytics.idv_address_visit
Expand All @@ -12,6 +13,7 @@ def new
end

def update
clear_future_steps!
form_result = idv_form.submit(profile_params)
analytics.idv_address_submitted(**form_result.to_h)
capture_address_edited(form_result)
Expand All @@ -22,6 +24,16 @@ def update
end
end

def self.step_info
Idv::StepInfo.new(
key: :address,
controller: controller_name,
next_steps: [:verify_info],
preconditions: ->(idv_session:, user:) { idv_session.document_capture_complete? },
undo_step: ->(idv_session:, user:) {},
)
end

private

def idv_form
Expand Down
9 changes: 6 additions & 3 deletions app/controllers/idv/agreement_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class AgreementController < ApplicationController

before_action :confirm_not_rate_limited
before_action :confirm_step_allowed
before_action :confirm_document_capture_not_complete
before_action :confirm_verify_info_step_needed

def show
analytics.idv_doc_auth_agreement_visited(**analytics_arguments)
Expand All @@ -21,7 +21,7 @@ def show
end

def update
clear_invalid_steps!
clear_future_steps!
skip_to_capture if params[:skip_hybrid_handoff]

result = Idv::ConsentForm.new.submit(consent_form_params)
Expand Down Expand Up @@ -49,7 +49,10 @@ def self.step_info
controller: controller_name,
next_steps: [:hybrid_handoff, :document_capture, :phone_question, :how_to_verify],
preconditions: ->(idv_session:, user:) { idv_session.welcome_visited },
undo_step: ->(idv_session:, user:) { idv_session.idv_consent_given = nil },
undo_step: ->(idv_session:, user:) do
idv_session.idv_consent_given = nil
idv_session.skip_hybrid_handoff = nil
end,
)
end

Expand Down
23 changes: 5 additions & 18 deletions app/controllers/idv/document_capture_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ class DocumentCaptureController < ApplicationController

before_action :confirm_not_rate_limited, except: [:update]
before_action :confirm_step_allowed
before_action :confirm_hybrid_handoff_complete
before_action :confirm_document_capture_needed
before_action :confirm_verify_info_step_needed
before_action :override_csp_to_allow_acuant

def show
Expand All @@ -22,7 +21,7 @@ def show
end

def update
clear_invalid_steps!
clear_future_steps!
idv_session.redo_document_capture = nil # done with this redo
# Not used in standard flow, here for data consistency with hybrid flow.
document_capture_session.confirm_ocr
Expand Down Expand Up @@ -59,31 +58,19 @@ def self.step_info
Idv::StepInfo.new(
key: :document_capture,
controller: controller_name,
next_steps: [:success], # [:ssn],
next_steps: [:ssn], # :ipp_state_id
preconditions: ->(idv_session:, user:) { idv_session.flow_path == 'standard' },
undo_step: ->(idv_session:, user:) do
idv_session.pii_from_doc = nil
idv_session.invalidate_in_person_pii_from_user!
idv_session.had_barcode_attention_error = nil
idv_session.had_barcode_read_failure = nil
end,
)
end

private

def confirm_hybrid_handoff_complete
return if idv_session.flow_path.present?

redirect_to idv_hybrid_handoff_url
end

def confirm_document_capture_needed
return if idv_session.redo_document_capture

return if idv_session.pii_from_doc.blank? && !idv_session.verify_info_step_complete?

redirect_to idv_ssn_url
end

def cancel_establishing_in_person_enrollments
UspsInPersonProofing::EnrollmentHelper.
cancel_stale_establishing_enrollments_for_user(current_user)
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/idv/getting_started_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ class GettingStartedController < ApplicationController
include IdvStepConcern

before_action :confirm_not_rate_limited
before_action :confirm_document_capture_not_complete
before_action :confirm_verify_info_step_needed

def show
analytics.idv_doc_auth_getting_started_visited(**analytics_arguments)
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 @@ -13,7 +13,7 @@ def show
end

def update
clear_invalid_steps!
clear_future_steps!
result = Idv::HowToVerifyForm.new.submit(how_to_verify_form_params)

analytics.idv_doc_auth_how_to_verify_submitted(
Expand Down
7 changes: 5 additions & 2 deletions app/controllers/idv/hybrid_handoff_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def show
end

def update
clear_invalid_steps!
clear_future_steps!
irs_attempts_api_tracker.idv_document_upload_method_selected(
upload_method: params[:type],
)
Expand All @@ -42,7 +42,10 @@ def self.step_info
controller: controller_name,
next_steps: [:link_sent, :document_capture],
preconditions: ->(idv_session:, user:) { idv_session.idv_consent_given },
undo_step: ->(idv_session:, user:) { idv_session.flow_path = nil },
undo_step: ->(idv_session:, user:) do
idv_session.flow_path = nil
idv_session.phone_for_mobile_flow = nil
end,
)
end

Expand Down
5 changes: 5 additions & 0 deletions app/controllers/idv/in_person/verify_info_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ def analytics_arguments
}.merge(ab_test_analytics_buckets).
merge(**extra_analytics_properties)
end

def confirm_ssn_step_complete
return if pii.present? && idv_session.ssn.present?
redirect_to prev_url
end
end
end
end
27 changes: 5 additions & 22 deletions app/controllers/idv/link_sent_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ class LinkSentController < ApplicationController

before_action :confirm_not_rate_limited
before_action :confirm_step_allowed
before_action :confirm_hybrid_handoff_complete
before_action :confirm_document_capture_needed
before_action :confirm_verify_info_step_needed

def show
analytics.idv_doc_auth_link_sent_visited(**analytics_arguments)
Expand All @@ -20,7 +19,7 @@ def show
end

def update
clear_invalid_steps!
clear_future_steps!
analytics.idv_doc_auth_link_sent_submitted(**analytics_arguments)

return render_document_capture_cancelled if document_capture_session&.cancelled_at
Expand All @@ -45,35 +44,19 @@ def self.step_info
Idv::StepInfo.new(
key: :link_sent,
controller: controller_name,
next_steps: [:success], # [:ssn],
next_steps: [:ssn],
preconditions: ->(idv_session:, user:) { idv_session.flow_path == 'hybrid' },
undo_step: ->(idv_session:, user:) do
idv_session.pii_from_doc = nil
idv_session.invalidate_in_person_pii_from_user!
idv_session.had_barcode_attention_error = nil
idv_session.had_barcode_read_failure = nil
end,
)
end

private

def confirm_hybrid_handoff_complete
return if idv_session.flow_path == 'hybrid'

if idv_session.flow_path == 'standard'
redirect_to idv_document_capture_url
else
redirect_to idv_hybrid_handoff_url
end
end

def confirm_document_capture_needed
return if idv_session.redo_document_capture

return if idv_session.pii_from_doc.blank? && !idv_session.verify_info_step_complete?

redirect_to idv_ssn_url
end

def analytics_arguments
{
step: 'link_sent',
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/idv/phone_question_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ def show
end

def phone_with_camera
clear_invalid_steps!
clear_future_steps!
idv_session.phone_with_camera = true
analytics.idv_doc_auth_phone_question_submitted(**analytics_arguments)

redirect_to idv_hybrid_handoff_url
end

def phone_without_camera
clear_invalid_steps!
clear_future_steps!
idv_session.flow_path = 'standard'
idv_session.phone_with_camera = false
analytics.idv_doc_auth_phone_question_submitted(**analytics_arguments)
Expand Down
24 changes: 15 additions & 9 deletions app/controllers/idv/ssn_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ class SsnController < ApplicationController
include ThreatMetrixConcern

before_action :confirm_not_rate_limited_after_doc_auth
before_action :confirm_step_allowed
before_action :confirm_verify_info_step_needed
before_action :confirm_document_capture_complete
before_action :confirm_repeat_ssn, only: :show
before_action :override_csp_for_threat_metrix

attr_reader :ssn_presenter
Expand All @@ -34,6 +33,7 @@ def show
end

def update
clear_future_steps!
ssn_form = Idv::SsnFormatForm.new(idv_session.ssn)
form_response = ssn_form.submit(params.require(:doc_auth).permit(:ssn))
@ssn_presenter = Idv::SsnPresenter.new(
Expand All @@ -58,15 +58,21 @@ def update
end
end

private

def confirm_repeat_ssn
return if !idv_session.ssn
return if request.referer == idv_verify_info_url

redirect_to idv_verify_info_url
def self.step_info
Idv::StepInfo.new(
key: :ssn,
controller: controller_name,
next_steps: [:verify_info],
preconditions: ->(idv_session:, user:) { idv_session.document_capture_complete? },
undo_step: ->(idv_session:, user:) do
idv_session.ssn = nil
idv_session.threatmetrix_session_id = nil
end,
)
end

private

def next_url
if idv_session.pii_from_doc[:state] == 'PR' && !ssn_presenter.updating_ssn?
idv_address_url
Expand Down
19 changes: 18 additions & 1 deletion app/controllers/idv/verify_info_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ class VerifyInfoController < ApplicationController
include Steps::ThreatMetrixStepHelper

before_action :confirm_not_rate_limited_after_doc_auth, except: [:show]
before_action :confirm_ssn_step_complete
before_action :confirm_step_allowed
before_action :confirm_verify_info_step_needed

def show
@step_indicator_steps = step_indicator_steps
@ssn = idv_session.ssn
@pii = pii

analytics.idv_doc_auth_verify_visited(**analytics_arguments)
Funnel::DocAuth::RegisterStep.new(current_user.id, sp_session[:issuer]).
Expand All @@ -22,6 +23,7 @@ def show
end

def update
clear_future_steps!
success = shared_update

if success
Expand All @@ -35,6 +37,21 @@ def update
end
end

def self.step_info
Idv::StepInfo.new(
key: :verify_info,
controller: controller_name,
next_steps: [:success], # [:phone],
preconditions: ->(idv_session:, user:) do
idv_session.ssn && idv_session.document_capture_complete?
end,
undo_step: ->(idv_session:, user:) do
idv_session.resolution_successful = nil
idv_session.address_edited = nil
end,
)
end

private

def flow_param; end
Expand Down
Loading