Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 8 additions & 2 deletions app/forms/idv/api_image_upload_form.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ def submit

if client_response.success?
doc_pii_response = validate_pii_from_doc(client_response)
if doc_pii_response.success? && passport_submittal

if doc_pii_response.success? && passport_requested? && passport_submittal
mrz_response = validate_mrz(client_response)
end
end
Expand Down Expand Up @@ -185,7 +186,7 @@ def post_images_to_client
def document_type
return nil if document_capture_session.nil?

@document_type ||= document_capture_session.passport_requested? \
@document_type ||= passport_requested? \
? 'Passport' : 'DriversLicense'
end

Expand Down Expand Up @@ -289,6 +290,7 @@ def determine_response(form_response:, client_response:, doc_pii_response:, mrz_
# doc_pii validation failed
return doc_pii_response if doc_pii_response.present? && !doc_pii_response.success?

# mrz validation failed
return mrz_response if mrz_response.present? && !mrz_response.success?

client_response
Expand Down Expand Up @@ -507,6 +509,10 @@ def user_uuid
document_capture_session&.user&.uuid
end

def passport_requested?
!!document_capture_session&.passport_requested?
end

def rate_limiter
@rate_limiter ||= RateLimiter.new(
user: document_capture_session.user,
Expand Down
25 changes: 25 additions & 0 deletions spec/forms/idv/api_image_upload_form_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
let(:front_image) { DocAuthImageFixtures.document_front_image_multipart }
let(:back_image) { DocAuthImageFixtures.document_back_image_multipart }
let(:passport_image) { nil }
let(:passport_requested) { false }
let(:selfie_image) { nil }
let(:liveness_checking_required) { false }
let(:front_image_file_name) { 'front.jpg' }
Expand Down Expand Up @@ -89,6 +90,8 @@
before do
allow(IdentityConfig.store).to receive(:doc_escrow_enabled).and_return doc_escrow_enabled
allow(writer).to receive(:write).and_return result
allow_any_instance_of(DocumentCaptureSession).to receive(:passport_requested?)
.and_return(passport_requested)
end

describe '#valid?' do
Expand Down Expand Up @@ -899,6 +902,7 @@
)
end
let(:response) { form.submit }
let(:passport_requested) { true }

before do
allow_any_instance_of(described_class)
Expand All @@ -919,6 +923,7 @@
},
)
end
let(:document_type) { 'Passport' }

before do
allow_any_instance_of(DocAuth::Mock::DosPassportApiClient)
Expand Down Expand Up @@ -955,6 +960,7 @@

context 'Passport MRZ validation succeeds' do
let(:passport_image) { DocAuthImageFixtures.passport_passed_yaml }
let(:document_type) { 'Passport' }

let(:successful_passport_mrz_response) do
DocAuth::Response.new(
Expand Down Expand Up @@ -1019,6 +1025,25 @@
end
end

context 'User submits passport but passport is not requested' do
let(:passport_requested) { false }
let(:passport_image) { DocAuthImageFixtures.passport_passed_yaml }

it 'does not do MRZ validation' do
expect_any_instance_of(DocAuth::Mock::DosPassportApiClient).to_not receive(:fetch)

response
end

it 'does not call the MRZ analytics event' do
response

expect(fake_analytics).to_not have_logged_event(
:idv_dos_passport_verification,
)
end
end

context 'Passport doc auth succeeds but PII validation fails' do
let(:passport_image) { DocAuthImageFixtures.passport_passed_yaml }
let(:successful_doc_auth_response) do
Expand Down