diff --git a/app/controllers/idv/in_person/state_id_controller.rb b/app/controllers/idv/in_person/state_id_controller.rb index abcd09cf430..dc70b8e02aa 100644 --- a/app/controllers/idv/in_person/state_id_controller.rb +++ b/app/controllers/idv/in_person/state_id_controller.rb @@ -22,16 +22,17 @@ def update pii_from_user = flow_session[:pii_from_user] initial_state_of_same_address_as_id = pii_from_user[:same_address_as_id] - Idv::StateIdForm::ATTRIBUTES.each do |attr| - pii_from_user[attr] = flow_params[attr] - end - form_result = form.submit(flow_params) - analytics.idv_in_person_proofing_state_id_submitted( - **analytics_arguments.merge(**form_result.to_h), - ) + form_result = form.submit(flow_params) if form_result.success? + Idv::StateIdForm::ATTRIBUTES.each do |attr| + pii_from_user[attr] = flow_params[attr] + end + + analytics.idv_in_person_proofing_state_id_submitted( + **analytics_arguments.merge(**form_result.to_h), + ) # Accept Date of Birth from both memorable date and input date components formatted_dob = MemorableDateComponent.extract_date_param flow_params&.[](:dob) pii_from_user[:dob] = formatted_dob if formatted_dob @@ -130,7 +131,7 @@ def copy_state_id_address_to_residential_address(pii_from_user) end def updating_state_id? - pii_from_user.has_key?(:first_name) + user_session.dig(:idv, :ssn).present? end def parsed_dob diff --git a/spec/controllers/idv/in_person/state_id_controller_spec.rb b/spec/controllers/idv/in_person/state_id_controller_spec.rb index b952d38c9e2..4c985736cb2 100644 --- a/spec/controllers/idv/in_person/state_id_controller_spec.rb +++ b/spec/controllers/idv/in_person/state_id_controller_spec.rb @@ -132,6 +132,21 @@ let(:identity_doc_address_state) { InPersonHelper::GOOD_IDENTITY_DOC_ADDRESS_STATE } let(:identity_doc_zipcode) { InPersonHelper::GOOD_IDENTITY_DOC_ZIPCODE } context 'with values submitted' do + let(:invalid_params) do + { state_id: { + first_name: 'S@ndy!', + last_name:, + same_address_as_id: 'true', # value on submission + identity_doc_address1:, + identity_doc_address2:, + identity_doc_city:, + state_id_jurisdiction:, + state_id_number:, + identity_doc_address_state:, + identity_doc_zipcode:, + dob:, + } } + end let(:params) do { state_id: { first_name:, @@ -172,6 +187,22 @@ ).with(analytics_name, analytics_args) end + it 'renders show when validation errors are present when first visiting page' do + put :update, params: invalid_params + + expect(subject.idv_session.ssn).to eq(nil) + expect(subject.extra_view_variables[:updating_state_id]).to eq(false) + expect(response).to render_template :show + end + + it 'renders show when validation errors are present when re-visiting page' do + subject.idv_session.ssn = '123-45-6789' + put :update, params: invalid_params + + expect(subject.extra_view_variables[:updating_state_id]).to eq(true) + expect(response).to render_template :show + end + it 'invalidates future steps, but does not clear ssn' do subject.idv_session.ssn = '123-45-6789' expect(subject).to receive(:clear_future_steps_from!).and_call_original