diff --git a/app/controllers/idv/welcome_controller.rb b/app/controllers/idv/welcome_controller.rb index 75907f3e93a..d25415fbca5 100644 --- a/app/controllers/idv/welcome_controller.rb +++ b/app/controllers/idv/welcome_controller.rb @@ -7,6 +7,7 @@ class WelcomeController < ApplicationController include StepIndicatorConcern before_action :confirm_not_rate_limited + before_action :cancel_previous_in_person_enrollments, only: :show def show idv_session.proofing_started_at ||= Time.zone.now.iso8601 @@ -23,7 +24,6 @@ def update analytics.idv_doc_auth_welcome_submitted(**analytics_arguments) create_document_capture_session - cancel_previous_in_person_enrollments idv_session.welcome_visited = true @@ -61,7 +61,6 @@ def create_document_capture_session end def cancel_previous_in_person_enrollments - return unless IdentityConfig.store.in_person_proofing_enabled UspsInPersonProofing::EnrollmentHelper.cancel_establishing_and_in_progress_enrollments( current_user, ) diff --git a/spec/controllers/idv/welcome_controller_spec.rb b/spec/controllers/idv/welcome_controller_spec.rb index e7ac6c6183b..793e1f6092a 100644 --- a/spec/controllers/idv/welcome_controller_spec.rb +++ b/spec/controllers/idv/welcome_controller_spec.rb @@ -28,6 +28,41 @@ :check_for_mail_only_outage, ) end + + it 'includes cancelling previous in person enrollments' do + expect(subject).to have_actions( + :before, + :cancel_previous_in_person_enrollments, + ) + end + + context 'with previous establishing and pending in-person enrollments' do + before do + allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) + end + + let!(:establishing_enrollment) { create(:in_person_enrollment, :establishing, user: user) } + let(:password_reset_profile) { create(:profile, :password_reset, user: user) } + let!(:pending_enrollment) do + create(:in_person_enrollment, :pending, user: user, profile: password_reset_profile) + end + let(:fraud_password_reset_profile) { create(:profile, :password_reset, user: user) } + let!(:fraud_review_enrollment) do + create( + :in_person_enrollment, :in_fraud_review, user: user, profile: fraud_password_reset_profile + ) + end + + it 'cancels all previous establishing, pending, and in_fraud_review enrollments' do + put :show + + expect(establishing_enrollment.reload.status).to eq(InPersonEnrollment::STATUS_CANCELLED) + expect(pending_enrollment.reload.status).to eq(InPersonEnrollment::STATUS_CANCELLED) + expect(fraud_review_enrollment.reload.status).to eq(InPersonEnrollment::STATUS_CANCELLED) + expect(user.establishing_in_person_enrollment).to be_blank + expect(user.pending_in_person_enrollment).to be_blank + end + end end describe '#show' do @@ -105,6 +140,22 @@ expect(response).to redirect_to(idv_please_call_url) end + + context 'has pending in-person enrollment' do + before do + allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) + end + + it 'redirects to ready to verify' do + profile = create(:profile, :in_person_verification_pending, user:) + + stub_sign_in(profile.user) + + get :show + + expect(response).to redirect_to(idv_in_person_ready_to_verify_url) + end + end end describe '#update' do @@ -133,33 +184,5 @@ expect { put :update } .to change { subject.idv_session.document_capture_session_uuid }.from(nil) end - - context 'with previous establishing and pending in-person enrollments' do - let!(:establishing_enrollment) { create(:in_person_enrollment, :establishing, user: user) } - let(:password_reset_profile) { create(:profile, :password_reset, user: user) } - let!(:pending_enrollment) do - create(:in_person_enrollment, :pending, user: user, profile: password_reset_profile) - end - let(:fraud_password_reset_profile) { create(:profile, :password_reset, user: user) } - let!(:fraud_review_enrollment) do - create( - :in_person_enrollment, :in_fraud_review, user: user, profile: fraud_password_reset_profile - ) - end - - before do - allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) - end - - it 'cancels all previous establishing, pending, and in_fraud_review enrollments' do - put :update - - expect(establishing_enrollment.reload.status).to eq(InPersonEnrollment::STATUS_CANCELLED) - expect(pending_enrollment.reload.status).to eq(InPersonEnrollment::STATUS_CANCELLED) - expect(fraud_review_enrollment.reload.status).to eq(InPersonEnrollment::STATUS_CANCELLED) - expect(user.establishing_in_person_enrollment).to be_blank - expect(user.pending_in_person_enrollment).to be_blank - end - end end end