From 21526718b9de0b179b2a8b1ad0102c2fbeb88e29 Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Fri, 2 May 2025 14:49:59 -0600 Subject: [PATCH 1/4] Add doc_type on enrollment for passport --- app/controllers/idv/in_person/passport_controller.rb | 8 ++++++++ app/models/in_person_enrollment.rb | 9 +++++++++ config/routes.rb | 1 + 3 files changed, 18 insertions(+) diff --git a/app/controllers/idv/in_person/passport_controller.rb b/app/controllers/idv/in_person/passport_controller.rb index 0b3f045d49e..1c5733f5b01 100644 --- a/app/controllers/idv/in_person/passport_controller.rb +++ b/app/controllers/idv/in_person/passport_controller.rb @@ -13,6 +13,10 @@ def show analytics.idv_in_person_proofing_passport_visited(**analytics_arguments) end + def update + enrollment.update!(document_type: :passport_book) + end + def extra_view_variables { form:, @@ -48,6 +52,10 @@ def analytics_arguments .merge(extra_analytics_properties) end + def enrollment + current_user.establishing_in_person_enrollment + end + def initialize_pii_from_user user_session['idv/in_person'] ||= {} user_session['idv/in_person']['pii_from_user'] ||= { uuid: current_user.uuid } diff --git a/app/models/in_person_enrollment.rb b/app/models/in_person_enrollment.rb index ea81229c386..2810531858d 100644 --- a/app/models/in_person_enrollment.rb +++ b/app/models/in_person_enrollment.rb @@ -33,6 +33,15 @@ class InPersonEnrollment < ApplicationRecord STATUS_IN_FRAUD_REVIEW.to_sym => 6, } + DOCUMENT_TYPE_STATE_ID = 'state_id' + DOCUMENT_TYPE_PASSPORT_BOOK = 'passport_book' + + # This will always be nil in the Verify-by-Mail (GPO) flow. + enum :document_type, { + DOCUMENT_TYPE_STATE_ID.to_sym => 0, + DOCUMENT_TYPE_PASSPORT_BOOK.to_sym => 1, + } + validate :profile_belongs_to_user before_save(:on_status_updated, if: :will_save_change_to_status?) diff --git a/config/routes.rb b/config/routes.rb index a6ced018ae3..2af9e98daa9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -445,6 +445,7 @@ get '/in_person/choose_id_type' => 'in_person/choose_id_type#show' put '/in_person/choose_id_type' => 'in_person/choose_id_type#update' get '/in_person/passport' => 'in_person/passport#show' + put '/in_person/passport' => 'in_person/passport#update' get '/in_person/ready_to_verify' => 'in_person/ready_to_verify#show', as: :in_person_ready_to_verify post '/in_person/usps_locations' => 'in_person/usps_locations#index' From a99c7e1a7731e5bac8734b9f11d36fdd8a504b5d Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Tue, 6 May 2025 10:52:06 -0600 Subject: [PATCH 2/4] Passport controller specs and trait --- .../idv/in_person/passport_controller_spec.rb | 32 ++++++++++++++++++- spec/factories/in_person_enrollments.rb | 4 +++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/spec/controllers/idv/in_person/passport_controller_spec.rb b/spec/controllers/idv/in_person/passport_controller_spec.rb index 99e3ea5b579..54cf5308b3f 100644 --- a/spec/controllers/idv/in_person/passport_controller_spec.rb +++ b/spec/controllers/idv/in_person/passport_controller_spec.rb @@ -8,7 +8,7 @@ create(:document_capture_session, user:, passport_status: 'requested') end let(:idv_session) { subject.idv_session } - let(:enrollment) { InPersonEnrollment.new } + let(:enrollment) { create(:in_person_enrollment, :establishing, user: user) } before do stub_sign_in(user) @@ -71,6 +71,7 @@ it 'renders the passport form' do expect(response).to render_template 'idv/in_person/passport/show' + expect(enrollment.document_type).to eq(nil) end it 'logs the idv_in_person_proofing_passport_visited event' do @@ -97,4 +98,33 @@ end end end + + describe '#update' do + context 'when in person passports are allowed' do + before do + allow(idv_session).to receive(:in_person_passports_allowed?).and_return(true) + end + + let(:analytics_arguments) do + { + step: 'passport', + analytics_id: 'In Person Proofing', + skip_hybrid_handoff: false, + } + end + + before do + subject.idv_session.opted_in_to_in_person_proofing = + analytics_arguments[:opted_in_to_in_person_proofing] + subject.idv_session.skip_hybrid_handoff = analytics_arguments[:skip_hybrid_handoff] + end + + it 'sets the enrollment document type' do + expect(enrollment.document_type).to eq(nil) + put :update + + expect(enrollment.document_type).to eq(InPersonEnrollment::DOCUMENT_TYPE_PASSPORT_BOOK) + end + end + end end diff --git a/spec/factories/in_person_enrollments.rb b/spec/factories/in_person_enrollments.rb index f8de766945b..705e1ae4b59 100644 --- a/spec/factories/in_person_enrollments.rb +++ b/spec/factories/in_person_enrollments.rb @@ -76,5 +76,9 @@ trait :state_id do document_type { :state_id } end + + trait :passport_book do + document_type { :passport_book } + end end end From 08cc65edbc11682814097fe926bbfbc14f1ca8b1 Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Tue, 6 May 2025 10:54:16 -0600 Subject: [PATCH 3/4] changelog: Upcoming Features, In-person proofing, Set document_type on InPersonEnrollment for Passports From 485a15ccf35395bb3c72d03f8c794a49243ba451 Mon Sep 17 00:00:00 2001 From: gina-yamada Date: Wed, 7 May 2025 08:36:40 -0600 Subject: [PATCH 4/4] Delete dup routes for IPP passports --- config/routes.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 404078b3725..60d8b49976d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -444,8 +444,6 @@ put '/in_person' => 'in_person#update' get '/in_person/choose_id_type' => 'in_person/choose_id_type#show' put '/in_person/choose_id_type' => 'in_person/choose_id_type#update' - get '/in_person/passport' => 'in_person/passport#show' - put '/in_person/passport' => 'in_person/passport#update' get '/in_person/ready_to_verify' => 'in_person/ready_to_verify#show', as: :in_person_ready_to_verify post '/in_person/usps_locations' => 'in_person/usps_locations#index'