diff --git a/app/controllers/idv/agreement_controller.rb b/app/controllers/idv/agreement_controller.rb index 5f0eb826325..2d9aa2de24f 100644 --- a/app/controllers/idv/agreement_controller.rb +++ b/app/controllers/idv/agreement_controller.rb @@ -18,7 +18,7 @@ def show end def update - skip_to_capture if params[:skip_upload] + skip_to_capture if params[:skip_hybrid_handoff] || params[:skip_upload] result = Idv::ConsentForm.new.submit(consent_form_params) diff --git a/app/controllers/idv/getting_started_controller.rb b/app/controllers/idv/getting_started_controller.rb index ccaba1b1de8..586505504bf 100644 --- a/app/controllers/idv/getting_started_controller.rb +++ b/app/controllers/idv/getting_started_controller.rb @@ -21,7 +21,7 @@ def show def update flow_session[:skip_upload_step] = true unless FeatureManagement.idv_allow_hybrid_flow? - skip_to_capture if params[:skip_upload] + skip_to_capture if params[:skip_hybrid_handoff] || params[:skip_upload] result = Idv::ConsentForm.new.submit(consent_form_params) diff --git a/app/javascript/packs/document-capture-welcome.ts b/app/javascript/packs/document-capture-welcome.ts index 1f397de04a2..1d07dc59ed2 100644 --- a/app/javascript/packs/document-capture-welcome.ts +++ b/app/javascript/packs/document-capture-welcome.ts @@ -2,8 +2,17 @@ import { isCameraCapableMobile } from '@18f/identity-device'; if (isCameraCapableMobile()) { const form = document.querySelector('.js-consent-continue-form')!; + + // Tell the backend that we're on a device that can take its own pictures, so we don't need + // to show the user the hybrid handoff screen. const input = document.createElement('input'); input.type = 'hidden'; - input.name = 'skip_upload'; + input.name = 'skip_hybrid_handoff'; form.appendChild(input); + + // TEMP: Send skip_upload as well to account for 50/50 state during deploy + const compatibilityInput = document.createElement('input'); + compatibilityInput.type = 'hidden'; + compatibilityInput.name = 'skip_upload'; + form.appendChild(compatibilityInput); } diff --git a/spec/controllers/idv/agreement_controller_spec.rb b/spec/controllers/idv/agreement_controller_spec.rb index 36b498a5ff2..bbbbccf142e 100644 --- a/spec/controllers/idv/agreement_controller_spec.rb +++ b/spec/controllers/idv/agreement_controller_spec.rb @@ -97,10 +97,85 @@ }.merge(ab_test_args) end + let(:skip_upload) { nil } + + let(:skip_hybrid_handoff) { nil } + + let(:params) do + { + doc_auth: { + ial2_consent_given: 1, + }, + skip_hybrid_handoff: skip_hybrid_handoff, + skip_upload: skip_upload, + }.compact + end + it 'sends analytics_submitted event with consent given' do - put :update, params: { doc_auth: { ial2_consent_given: 1 } } + put :update, params: params expect(@analytics).to have_logged_event(analytics_name, analytics_args) end + + it 'does not set flow_path' do + expect do + put :update, params: params + end.not_to change { + subject.idv_session.flow_path + }.from(nil) + end + + it 'redirects to hybrid handoff' do + put :update, params: params + expect(response).to redirect_to(idv_hybrid_handoff_url) + end + + context 'skip_upload present in params' do + let(:skip_upload) { '' } + it 'sets flow_path to standard' do + expect do + put :update, params: params + end.to change { + subject.idv_session.flow_path + }.from(nil).to('standard') + end + + it 'sets flow_session[:skip_upload_step] to true' do + expect do + put :update, params: params + end.to change { + subject.flow_session[:skip_upload_step] + }.from(nil).to(true) + end + + it 'redirects to hybrid handoff' do + put :update, params: params + expect(response).to redirect_to(idv_hybrid_handoff_url) + end + end + + context 'skip_hybrid_handoff present in params' do + let(:skip_hybrid_handoff) { '' } + it 'sets flow_path to standard' do + expect do + put :update, params: params + end.to change { + subject.idv_session.flow_path + }.from(nil).to('standard') + end + + it 'sets flow_session[:skip_upload_step] to true' do + expect do + put :update, params: params + end.to change { + subject.flow_session[:skip_upload_step] + }.from(nil).to(true) + end + + it 'redirects to hybrid handoff' do + put :update, params: params + expect(response).to redirect_to(idv_hybrid_handoff_url) + end + end end end diff --git a/spec/controllers/idv/getting_started_controller_spec.rb b/spec/controllers/idv/getting_started_controller_spec.rb index 8464710356f..feea8da19fe 100644 --- a/spec/controllers/idv/getting_started_controller_spec.rb +++ b/spec/controllers/idv/getting_started_controller_spec.rb @@ -104,14 +104,28 @@ }.merge(ab_test_args) end + let(:skip_upload) { nil } + + let(:skip_hybrid_handoff) { nil } + + let(:params) do + { + doc_auth: { + ial2_consent_given: 1, + }, + skip_hybrid_handoff: skip_hybrid_handoff, + skip_upload: skip_upload, + }.compact + end + it 'sends analytics_submitted event with consent given' do - put :update, params: { doc_auth: { ial2_consent_given: 1 } } + put :update, params: params expect(@analytics).to have_logged_event(analytics_name, analytics_args) end it 'creates a document capture session' do - expect { put :update, params: { doc_auth: { ial2_consent_given: 1 } } }. + expect { put :update, params: params }. to change { subject.user_session['idv/doc_auth'][:document_capture_session_uuid] }.from(nil) end @@ -123,11 +137,72 @@ end it 'cancels all previous establishing enrollments' do - put :update, params: { doc_auth: { ial2_consent_given: 1 } } + put :update, params: params expect(enrollment.reload.status).to eq('cancelled') expect(user.establishing_in_person_enrollment).to be_blank end end + + it 'does not set flow_path' do + expect do + put :update, params: params + end.not_to change { + subject.idv_session.flow_path + }.from(nil) + end + + it 'redirects to hybrid handoff' do + put :update, params: params + expect(response).to redirect_to(idv_hybrid_handoff_url) + end + + context 'skip_upload present in params' do + let(:skip_upload) { '' } + it 'sets flow_path to standard' do + expect do + put :update, params: params + end.to change { + subject.idv_session.flow_path + }.from(nil).to('standard') + end + + it 'sets flow_session[:skip_upload_step] to true' do + expect do + put :update, params: params + end.to change { + subject.flow_session[:skip_upload_step] + }.from(nil).to(true) + end + + it 'redirects to hybrid handoff' do + put :update, params: params + expect(response).to redirect_to(idv_hybrid_handoff_url) + end + end + + context 'skip_hybrid_handoff present in params' do + let(:skip_hybrid_handoff) { '' } + it 'sets flow_path to standard' do + expect do + put :update, params: params + end.to change { + subject.idv_session.flow_path + }.from(nil).to('standard') + end + + it 'sets flow_session[:skip_upload_step] to true' do + expect do + put :update, params: params + end.to change { + subject.flow_session[:skip_upload_step] + }.from(nil).to(true) + end + + it 'redirects to hybrid handoff' do + put :update, params: params + expect(response).to redirect_to(idv_hybrid_handoff_url) + end + end end end