From 0ae250844f4211f1fb61c29bb1907a780f3ca6df Mon Sep 17 00:00:00 2001 From: Jonathan Hooper Date: Thu, 14 Dec 2023 15:04:17 -0500 Subject: [PATCH 1/3] Revert "Capitalization: Rename LexisnexisInstantVerify to LexisNexisInstantVerify (#9763)" This reverts commit 8d576541d06a67d4e8e0217b97a89bf651c0f6fa. --- app/controllers/concerns/idv/ab_test_analytics_concern.rb | 2 +- ...s_nexis_instant_verify.rb => lexisnexis_instant_verify.rb} | 2 +- app/services/proofing/resolution/progressive_proofer.rb | 2 +- .../concerns/idv/ab_test_analytics_concern_spec.rb | 4 ++-- ...stant_verify_spec.rb => lexisnexis_instant_verify_spec.rb} | 4 ++-- spec/services/proofing/resolution/progressive_proofer_spec.rb | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) rename app/services/idv/{lexis_nexis_instant_verify.rb => lexisnexis_instant_verify.rb} (97%) rename spec/services/idv/{lexis_nexis_instant_verify_spec.rb => lexisnexis_instant_verify_spec.rb} (95%) diff --git a/app/controllers/concerns/idv/ab_test_analytics_concern.rb b/app/controllers/concerns/idv/ab_test_analytics_concern.rb index afbedba2364..62053809dd3 100644 --- a/app/controllers/concerns/idv/ab_test_analytics_concern.rb +++ b/app/controllers/concerns/idv/ab_test_analytics_concern.rb @@ -9,7 +9,7 @@ def ab_test_analytics_buckets end if defined?(document_capture_session_uuid) - lniv_args = LexisNexisInstantVerify.new(document_capture_session_uuid). + lniv_args = LexisnexisInstantVerify.new(document_capture_session_uuid). workflow_ab_test_analytics_args buckets = buckets.merge(lniv_args) end diff --git a/app/services/idv/lexis_nexis_instant_verify.rb b/app/services/idv/lexisnexis_instant_verify.rb similarity index 97% rename from app/services/idv/lexis_nexis_instant_verify.rb rename to app/services/idv/lexisnexis_instant_verify.rb index 4d814ee659f..f4cf7f07d13 100644 --- a/app/services/idv/lexis_nexis_instant_verify.rb +++ b/app/services/idv/lexisnexis_instant_verify.rb @@ -1,5 +1,5 @@ module Idv - class LexisNexisInstantVerify + class LexisnexisInstantVerify attr_reader :document_capture_session_uuid def initialize(document_capture_session_uuid) diff --git a/app/services/proofing/resolution/progressive_proofer.rb b/app/services/proofing/resolution/progressive_proofer.rb index 6aed174e67c..ec442180088 100644 --- a/app/services/proofing/resolution/progressive_proofer.rb +++ b/app/services/proofing/resolution/progressive_proofer.rb @@ -259,7 +259,7 @@ def resolution_proofer end def lexisnexis_instant_verify_workflow - ab_test_variables = Idv::LexisNexisInstantVerify.new(instant_verify_ab_test_discriminator). + ab_test_variables = Idv::LexisnexisInstantVerify.new(instant_verify_ab_test_discriminator). workflow_ab_testing_variables ab_test_variables[:instant_verify_workflow] end diff --git a/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb b/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb index 0144f341918..6ae07e76105 100644 --- a/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb +++ b/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb @@ -17,13 +17,13 @@ def document_capture_session_uuid let(:acuant_sdk_args) { { as_bucket: :as_value } } let(:instant_verify_sdk_args) { { iv_bucket: :iv_value } } - let(:lniv) { Idv::LexisNexisInstantVerify.new(controller.document_capture_session_uuid) } + let(:lniv) { Idv::LexisnexisInstantVerify.new(controller.document_capture_session_uuid) } before do allow(subject).to receive(:current_user).and_return(user) expect(subject).to receive(:acuant_sdk_ab_test_analytics_args). and_return(acuant_sdk_args) - allow(Idv::LexisNexisInstantVerify).to receive(:new). + allow(Idv::LexisnexisInstantVerify).to receive(:new). and_return(lniv) expect(lniv).to receive(:workflow_ab_test_analytics_args). and_return(instant_verify_sdk_args) diff --git a/spec/services/idv/lexis_nexis_instant_verify_spec.rb b/spec/services/idv/lexisnexis_instant_verify_spec.rb similarity index 95% rename from spec/services/idv/lexis_nexis_instant_verify_spec.rb rename to spec/services/idv/lexisnexis_instant_verify_spec.rb index 2b0e5ff8ce4..660f27c4a82 100644 --- a/spec/services/idv/lexis_nexis_instant_verify_spec.rb +++ b/spec/services/idv/lexisnexis_instant_verify_spec.rb @@ -1,12 +1,12 @@ require 'rails_helper' -RSpec.describe Idv::LexisNexisInstantVerify do +RSpec.describe Idv::LexisnexisInstantVerify do let(:session_uuid) { SecureRandom.uuid } let(:default_workflow) { 'legacy_workflow' } let(:alternate_workflow) { 'equitable_workflow' } let(:ab_testing_enabled) { false } - subject { Idv::LexisNexisInstantVerify.new(session_uuid) } + subject { Idv::LexisnexisInstantVerify.new(session_uuid) } before do allow(IdentityConfig.store). diff --git a/spec/services/proofing/resolution/progressive_proofer_spec.rb b/spec/services/proofing/resolution/progressive_proofer_spec.rb index 337528cfff9..534f77b4e44 100644 --- a/spec/services/proofing/resolution/progressive_proofer_spec.rb +++ b/spec/services/proofing/resolution/progressive_proofer_spec.rb @@ -139,10 +139,10 @@ end it 'uses the selected workflow' do - lniv = Idv::LexisNexisInstantVerify.new(dcs_uuid) + lniv = Idv::LexisnexisInstantVerify.new(dcs_uuid) expect(lniv).to receive(:workflow_ab_testing_variables). and_return(ab_test_variables) - expect(Idv::LexisNexisInstantVerify).to receive(:new). + expect(Idv::LexisnexisInstantVerify).to receive(:new). and_return(lniv) expect(Proofing::LexisNexis::InstantVerify::Proofer).to receive(:new). with(hash_including(instant_verify_workflow: instant_verify_workflow)). From 969189ebaa703d81e14e6a175b8bd0a25adf323c Mon Sep 17 00:00:00 2001 From: Jonathan Hooper Date: Thu, 14 Dec 2023 15:04:27 -0500 Subject: [PATCH 2/3] Revert "LG-11671: Lexisnexis Instant Verify workflow A/B test (#9743)" This reverts commit 4000ef51b80e923e6f9520b4e4804a2d6e1cfbcb. --- .../concerns/idv/ab_test_analytics_concern.rb | 6 - app/jobs/resolution_proofing_job.rb | 14 +- app/services/idv/agent.rb | 1 - app/services/idv/lexisnexis_instant_verify.rb | 34 ----- .../resolution/progressive_proofer.rb | 14 +- config/application.yml.default | 3 - config/initializers/ab_tests.rb | 10 -- lib/identity_config.rb | 3 - .../idv/ab_test_analytics_concern_spec.rb | 21 +-- spec/features/idv/analytics_spec.rb | 142 +++++++++--------- spec/jobs/resolution_proofing_job_spec.rb | 82 +--------- .../idv/lexisnexis_instant_verify_spec.rb | 75 --------- .../resolution/progressive_proofer_spec.rb | 39 +---- 13 files changed, 80 insertions(+), 364 deletions(-) delete mode 100644 app/services/idv/lexisnexis_instant_verify.rb delete mode 100644 spec/services/idv/lexisnexis_instant_verify_spec.rb diff --git a/app/controllers/concerns/idv/ab_test_analytics_concern.rb b/app/controllers/concerns/idv/ab_test_analytics_concern.rb index 62053809dd3..148800f9074 100644 --- a/app/controllers/concerns/idv/ab_test_analytics_concern.rb +++ b/app/controllers/concerns/idv/ab_test_analytics_concern.rb @@ -8,12 +8,6 @@ def ab_test_analytics_buckets buckets[:skip_hybrid_handoff] = idv_session&.skip_hybrid_handoff end - if defined?(document_capture_session_uuid) - lniv_args = LexisnexisInstantVerify.new(document_capture_session_uuid). - workflow_ab_test_analytics_args - buckets = buckets.merge(lniv_args) - end - buckets.merge(acuant_sdk_ab_test_analytics_args) end end diff --git a/app/jobs/resolution_proofing_job.rb b/app/jobs/resolution_proofing_job.rb index 13d355bf9d8..4ae60050cd5 100644 --- a/app/jobs/resolution_proofing_job.rb +++ b/app/jobs/resolution_proofing_job.rb @@ -23,8 +23,7 @@ def perform( ipp_enrollment_in_progress: false, user_id: nil, threatmetrix_session_id: nil, - request_ip: nil, - instant_verify_ab_test_discriminator: nil + request_ip: nil ) timer = JobHelpers::Timer.new @@ -48,7 +47,6 @@ def perform( should_proof_state_id: should_proof_state_id, double_address_verification: double_address_verification, ipp_enrollment_in_progress: ipp_enrollment_in_progress, - instant_verify_ab_test_discriminator: instant_verify_ab_test_discriminator, ) document_capture_session = DocumentCaptureSession.new(result_id: result_id) @@ -76,10 +74,9 @@ def make_vendor_proofing_requests( request_ip:, should_proof_state_id:, double_address_verification:, - ipp_enrollment_in_progress:, - instant_verify_ab_test_discriminator: + ipp_enrollment_in_progress: ) - result = resolution_proofer(instant_verify_ab_test_discriminator).proof( + result = resolution_proofer.proof( applicant_pii: applicant_pii, user_email: user&.confirmed_email_addresses&.first&.email, threatmetrix_session_id: threatmetrix_session_id, @@ -115,9 +112,8 @@ def logger_info_hash(hash) logger.info(hash.to_json) end - def resolution_proofer(instant_verify_ab_test_discriminator) - @resolution_proofer ||= Proofing::Resolution::ProgressiveProofer. - new(instant_verify_ab_test_discriminator) + def resolution_proofer + @resolution_proofer ||= Proofing::Resolution::ProgressiveProofer.new end def add_threatmetrix_proofing_component(user_id, threatmetrix_result) diff --git a/app/services/idv/agent.rb b/app/services/idv/agent.rb index 1bea425d38f..0748b07e5ed 100644 --- a/app/services/idv/agent.rb +++ b/app/services/idv/agent.rb @@ -24,7 +24,6 @@ def proof_resolution( should_proof_state_id: should_proof_state_id, trace_id: trace_id, result_id: document_capture_session.result_id, - instant_verify_ab_test_discriminator: document_capture_session.uuid, user_id: user_id, threatmetrix_session_id: threatmetrix_session_id, request_ip: request_ip, diff --git a/app/services/idv/lexisnexis_instant_verify.rb b/app/services/idv/lexisnexis_instant_verify.rb deleted file mode 100644 index f4cf7f07d13..00000000000 --- a/app/services/idv/lexisnexis_instant_verify.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Idv - class LexisnexisInstantVerify - attr_reader :document_capture_session_uuid - - def initialize(document_capture_session_uuid) - @document_capture_session_uuid = document_capture_session_uuid - end - - def workflow_ab_test_analytics_args - { - lexisnexis_instant_verify_workflow_ab_test_bucket: - AbTests::LEXISNEXIS_INSTANT_VERIFY_WORKFLOW.bucket(document_capture_session_uuid), - } - end - - def workflow_ab_testing_variables - bucket = AbTests::LEXISNEXIS_INSTANT_VERIFY_WORKFLOW.bucket(document_capture_session_uuid) - testing_enabled = IdentityConfig.store.lexisnexis_instant_verify_workflow_ab_testing_enabled - use_alternate_workflow = (bucket == :use_alternate_workflow) - - if use_alternate_workflow - instant_verify_workflow = IdentityConfig.store.lexisnexis_instant_verify_workflow_alternate - else - instant_verify_workflow = IdentityConfig.store.lexisnexis_instant_verify_workflow - end - - { - ab_testing_enabled: testing_enabled, - use_alternate_workflow: use_alternate_workflow, - instant_verify_workflow: instant_verify_workflow, - } - end - end -end diff --git a/app/services/proofing/resolution/progressive_proofer.rb b/app/services/proofing/resolution/progressive_proofer.rb index ec442180088..27fff0f4a3d 100644 --- a/app/services/proofing/resolution/progressive_proofer.rb +++ b/app/services/proofing/resolution/progressive_proofer.rb @@ -6,12 +6,6 @@ module Resolution # 2. The user has only provided one address for their residential and identity document # address or separate residential and identity document addresses class ProgressiveProofer - attr_reader :instant_verify_ab_test_discriminator - - def initialize(instant_verify_ab_test_discriminator = nil) - @instant_verify_ab_test_discriminator = instant_verify_ab_test_discriminator - end - # @param [Hash] applicant_pii keys are symbols and values are strings, confidential user info # @param [Boolean] double_address_verification flag that indicates if user will have # both state id address and current residential address verified. Note this value is here as @@ -246,7 +240,7 @@ def resolution_proofer Proofing::Mock::ResolutionMockClient.new else Proofing::LexisNexis::InstantVerify::Proofer.new( - instant_verify_workflow: lexisnexis_instant_verify_workflow, + instant_verify_workflow: IdentityConfig.store.lexisnexis_instant_verify_workflow, account_id: IdentityConfig.store.lexisnexis_account_id, base_url: IdentityConfig.store.lexisnexis_base_url, username: IdentityConfig.store.lexisnexis_username, @@ -258,12 +252,6 @@ def resolution_proofer end end - def lexisnexis_instant_verify_workflow - ab_test_variables = Idv::LexisnexisInstantVerify.new(instant_verify_ab_test_discriminator). - workflow_ab_testing_variables - ab_test_variables[:instant_verify_workflow] - end - def state_id_proofer @state_id_proofer ||= if IdentityConfig.store.proofer_mock_fallback diff --git a/config/application.yml.default b/config/application.yml.default index 8cfd582b890..0f9af8757b0 100644 --- a/config/application.yml.default +++ b/config/application.yml.default @@ -168,9 +168,6 @@ lexisnexis_phone_finder_timeout: 1.0 lexisnexis_phone_finder_workflow: customers.gsa2.phonefinder.workflow lexisnexis_instant_verify_timeout: 1.0 lexisnexis_instant_verify_workflow: gsa2.chk32.test.wf -lexisnexis_instant_verify_workflow_ab_testing_enabled: false -lexisnexis_instant_verify_workflow_ab_testing_percent: 5 -lexisnexis_instant_verify_workflow_alternate: gsa2.chk14.test.wf # TrueID DocAuth Integration lexisnexis_trueid_account_id: '12345' lexisnexis_trueid_username: test_username diff --git a/config/initializers/ab_tests.rb b/config/initializers/ab_tests.rb index d2e47e5b64d..4df55b07756 100644 --- a/config/initializers/ab_tests.rb +++ b/config/initializers/ab_tests.rb @@ -18,14 +18,4 @@ module AbTests 0, }, ) - - LEXISNEXIS_INSTANT_VERIFY_WORKFLOW = AbTestBucket.new( - experiment_name: 'LexisNexis Instant Verify Workflow', - buckets: { - use_alternate_workflow: - IdentityConfig.store.lexisnexis_instant_verify_workflow_ab_testing_enabled ? - IdentityConfig.store.lexisnexis_instant_verify_workflow_ab_testing_percent : - 0, - }, - ) end diff --git a/lib/identity_config.rb b/lib/identity_config.rb index 792f8f75dd0..975252a7a2d 100644 --- a/lib/identity_config.rb +++ b/lib/identity_config.rb @@ -270,9 +270,6 @@ def self.build_store(config_map) config.add(:lexisnexis_hmac_secret_key, type: :string) config.add(:lexisnexis_instant_verify_timeout, type: :float) config.add(:lexisnexis_instant_verify_workflow, type: :string) - config.add(:lexisnexis_instant_verify_workflow_ab_testing_enabled, type: :boolean) - config.add(:lexisnexis_instant_verify_workflow_ab_testing_percent, type: :integer) - config.add(:lexisnexis_instant_verify_workflow_alternate, type: :string) config.add(:lexisnexis_password, type: :string) config.add(:lexisnexis_phone_finder_timeout, type: :float) config.add(:lexisnexis_phone_finder_workflow, type: :string) diff --git a/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb b/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb index 6ae07e76105..f743d2a87a9 100644 --- a/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb +++ b/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb @@ -9,24 +9,14 @@ describe '#ab_test_analytics_buckets' do controller(ApplicationController) do include Idv::AbTestAnalyticsConcern - - def document_capture_session_uuid - SecureRandom.uuid - end end let(:acuant_sdk_args) { { as_bucket: :as_value } } - let(:instant_verify_sdk_args) { { iv_bucket: :iv_value } } - let(:lniv) { Idv::LexisnexisInstantVerify.new(controller.document_capture_session_uuid) } before do allow(subject).to receive(:current_user).and_return(user) expect(subject).to receive(:acuant_sdk_ab_test_analytics_args). and_return(acuant_sdk_args) - allow(Idv::LexisnexisInstantVerify).to receive(:new). - and_return(lniv) - expect(lniv).to receive(:workflow_ab_test_analytics_args). - and_return(instant_verify_sdk_args) end context 'idv_session is available' do @@ -34,15 +24,10 @@ def document_capture_session_uuid sign_in(user) expect(subject).to receive(:idv_session).once.and_return(idv_session) end - it 'includes acuant_sdk_ab_test_analytics_args' do expect(controller.ab_test_analytics_buckets).to include(acuant_sdk_args) end - it 'includes lexisnexis_instant_verify_sdk_ab_test_analytics_args' do - expect(controller.ab_test_analytics_buckets).to include(instant_verify_sdk_args) - end - it 'includes skip_hybrid_handoff' do idv_session.skip_hybrid_handoff = :shh_value expect(controller.ab_test_analytics_buckets).to include({ skip_hybrid_handoff: :shh_value }) @@ -50,13 +35,9 @@ def document_capture_session_uuid end context 'idv_session is not available' do - it 'still includes acuant_sdk_ab_test_analytics_args' do + it 'still works' do expect(controller.ab_test_analytics_buckets).to include(acuant_sdk_args) end - - it 'still includes lexisnexis_instant_verify_sdk_ab_test_analytics_args' do - expect(controller.ab_test_analytics_buckets).to include(instant_verify_sdk_args) - end end end end diff --git a/spec/features/idv/analytics_spec.rb b/spec/features/idv/analytics_spec.rb index 81d9e6b4e81..61601069877 100644 --- a/spec/features/idv/analytics_spec.rb +++ b/spec/features/idv/analytics_spec.rb @@ -39,28 +39,28 @@ { 'IdV: intro visited' => {}, 'IdV: doc auth welcome visited' => { - step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil }, 'IdV: doc auth welcome submitted' => { - step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil }, 'IdV: doc auth agreement visited' => { - step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default }, 'IdV: consent checkbox toggled' => { checked: true, }, 'IdV: doc auth agreement submitted' => { - success: true, errors: {}, step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + success: true, errors: {}, step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default }, 'IdV: doc auth hybrid handoff visited' => { - step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'IdV: doc auth hybrid handoff submitted' => { - success: true, errors: {}, destination: :document_capture, flow_path: 'standard', step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + success: true, errors: {}, destination: :document_capture, flow_path: 'standard', step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'IdV: doc auth document_capture visited' => { - flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'Frontend: IdV: front image added' => { width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, attempt: 1, flow_path: 'standard', acuant_sdk_upgrade_a_b_testing_enabled: 'false', use_alternate_sdk: anything, acuant_version: anything, acuantCaptureMode: nil, fingerprint: anything, failedImageResubmission: boolean, documentType: nil, dpi: nil, glare: nil, glareScoreThreshold: nil, isAssessedAsBlurry: nil, isAssessedAsGlare: nil, isAssessedAsUnsupported: nil, moire: nil, sharpness: nil, sharpnessScoreThreshold: nil, assessment: nil @@ -75,30 +75,30 @@ success: true, errors: {}, user_id: user.uuid, attempts: 1, remaining_attempts: 3, flow_path: 'standard', attention_with_barcode: false, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), classification_info: {} }, 'IdV: doc auth document_capture submitted' => { - success: true, errors: {}, flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + success: true, errors: {}, flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'IdV: doc auth ssn visited' => { - flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth ssn submitted' => { - success: true, errors: {}, flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + success: true, errors: {}, flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify visited' => { - flow_path: 'standard', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'standard', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify submitted' => { - flow_path: 'standard', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'standard', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify proofing results' => { - success: true, errors: {}, flow_path: 'standard', address_edited: false, address_line2_present: false, analytics_id: 'Doc Auth', ssn_is_unique: true, step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, irs_reproofing: false, skip_hybrid_handoff: nil, + success: true, errors: {}, flow_path: 'standard', address_edited: false, address_line2_present: false, analytics_id: 'Doc Auth', ssn_is_unique: true, step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, irs_reproofing: false, skip_hybrid_handoff: nil, proofing_results: { exception: nil, timed_out: false, threatmetrix_review_status: 'pass', context: { device_profiling_adjudication_reason: 'device_profiling_result_pass', resolution_adjudication_reason: 'pass_resolution_and_state_id', should_proof_state_id: true, stages: { resolution: { success: true, errors: {}, exception: nil, timed_out: false, transaction_id: 'resolution-mock-transaction-id-123', reference: 'aaa-bbb-ccc', can_pass_with_additional_verification: false, attributes_requiring_additional_verification: [], vendor_name: 'ResolutionMock', vendor_workflow: nil }, residential_address: { attributes_requiring_additional_verification: [], can_pass_with_additional_verification: false, errors: {}, exception: nil, reference: '', success: true, timed_out: false, transaction_id: '', vendor_name: 'ResidentialAddressNotRequired', vendor_workflow: nil }, state_id: { success: true, errors: {}, exception: nil, mva_exception: nil, timed_out: false, transaction_id: 'state-id-mock-transaction-id-456', vendor_name: 'StateIdMock', verified_attributes: [], state: 'MT', state_id_jurisdiction: 'ND', state_id_number: '#############' }, threatmetrix: threatmetrix_response } } } }, 'IdV: phone of record visited' => { - acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, + acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass' } }, 'IdV: phone confirmation form' => { - success: true, errors: {}, phone_type: :mobile, types: [:fixed_or_mobile], carrier: 'Test Mobile Carrier', country_code: 'US', area_code: '202', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, otp_delivery_preference: 'sms', + success: true, errors: {}, phone_type: :mobile, types: [:fixed_or_mobile], carrier: 'Test Mobile Carrier', country_code: 'US', area_code: '202', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, otp_delivery_preference: 'sms', proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass' } }, 'IdV: phone confirmation vendor' => { @@ -117,15 +117,15 @@ proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, :idv_enter_password_visited => { - address_verification_method: 'phone', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, + address_verification_method: 'phone', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, :idv_enter_password_submitted => { - success: true, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: false, deactivation_reason: nil, + success: true, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: false, deactivation_reason: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, 'IdV: final resolution' => { - success: true, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: false, deactivation_reason: nil, + success: true, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: false, deactivation_reason: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, 'IdV: personal key visited' => { @@ -147,28 +147,28 @@ { 'IdV: intro visited' => {}, 'IdV: doc auth welcome visited' => { - step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil }, 'IdV: doc auth welcome submitted' => { - step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil }, 'IdV: doc auth agreement visited' => { - step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default }, 'IdV: consent checkbox toggled' => { checked: true, }, 'IdV: doc auth agreement submitted' => { - success: true, errors: {}, step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + success: true, errors: {}, step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default }, 'IdV: doc auth hybrid handoff visited' => { - step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'IdV: doc auth hybrid handoff submitted' => { - success: true, errors: hash_including(message: nil), destination: :link_sent, flow_path: 'hybrid', step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, telephony_response: hash_including(errors: {}, message_id: 'fake-message-id', request_id: 'fake-message-request-id', success: true) + success: true, errors: hash_including(message: nil), destination: :link_sent, flow_path: 'hybrid', step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, telephony_response: hash_including(errors: {}, message_id: 'fake-message-id', request_id: 'fake-message-request-id', success: true) }, 'IdV: doc auth document_capture visited' => { - flow_path: 'hybrid', step: 'document_capture', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'hybrid', step: 'document_capture', acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', irs_reproofing: false }, 'Frontend: IdV: front image added' => { width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, attempt: 1, flow_path: 'hybrid', acuant_sdk_upgrade_a_b_testing_enabled: 'false', use_alternate_sdk: anything, acuant_version: anything, acuantCaptureMode: nil, fingerprint: anything, failedImageResubmission: boolean, documentType: nil, dpi: nil, glare: nil, glareScoreThreshold: nil, isAssessedAsBlurry: nil, isAssessedAsGlare: nil, isAssessedAsUnsupported: nil, moire: nil, sharpness: nil, sharpnessScoreThreshold: nil, assessment: nil @@ -183,30 +183,30 @@ success: true, errors: {}, user_id: user.uuid, attempts: 1, remaining_attempts: 3, flow_path: 'hybrid', attention_with_barcode: false, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), classification_info: {} }, 'IdV: doc auth document_capture submitted' => { - success: true, errors: {}, flow_path: 'hybrid', step: 'document_capture', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', irs_reproofing: false + success: true, errors: {}, flow_path: 'hybrid', step: 'document_capture', acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth ssn visited' => { - flow_path: 'hybrid', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'hybrid', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth ssn submitted' => { - success: true, errors: {}, flow_path: 'hybrid', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + success: true, errors: {}, flow_path: 'hybrid', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify visited' => { - flow_path: 'hybrid', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'hybrid', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify submitted' => { - flow_path: 'hybrid', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'hybrid', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify proofing results' => { - success: true, errors: {}, flow_path: 'hybrid', address_edited: false, address_line2_present: false, analytics_id: 'Doc Auth', ssn_is_unique: true, step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, irs_reproofing: false, skip_hybrid_handoff: nil, + success: true, errors: {}, flow_path: 'hybrid', address_edited: false, address_line2_present: false, analytics_id: 'Doc Auth', ssn_is_unique: true, step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, irs_reproofing: false, skip_hybrid_handoff: nil, proofing_results: { exception: nil, timed_out: false, threatmetrix_review_status: 'pass', context: { device_profiling_adjudication_reason: 'device_profiling_result_pass', resolution_adjudication_reason: 'pass_resolution_and_state_id', should_proof_state_id: true, stages: { resolution: { success: true, errors: {}, exception: nil, timed_out: false, transaction_id: 'resolution-mock-transaction-id-123', reference: 'aaa-bbb-ccc', can_pass_with_additional_verification: false, attributes_requiring_additional_verification: [], vendor_name: 'ResolutionMock', vendor_workflow: nil }, residential_address: { attributes_requiring_additional_verification: [], can_pass_with_additional_verification: false, errors: {}, exception: nil, reference: '', success: true, timed_out: false, transaction_id: '', vendor_name: 'ResidentialAddressNotRequired', vendor_workflow: nil }, state_id: { success: true, errors: {}, exception: nil, mva_exception: nil, timed_out: false, transaction_id: 'state-id-mock-transaction-id-456', vendor_name: 'StateIdMock', verified_attributes: [], state: 'MT', state_id_jurisdiction: 'ND', state_id_number: '#############' }, threatmetrix: threatmetrix_response } } } }, 'IdV: phone of record visited' => { - acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, + acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass' } }, 'IdV: phone confirmation form' => { - success: true, errors: {}, phone_type: :mobile, types: [:fixed_or_mobile], carrier: 'Test Mobile Carrier', country_code: 'US', area_code: '202', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, otp_delivery_preference: 'sms', + success: true, errors: {}, phone_type: :mobile, types: [:fixed_or_mobile], carrier: 'Test Mobile Carrier', country_code: 'US', area_code: '202', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, otp_delivery_preference: 'sms', proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass' } }, 'IdV: phone confirmation vendor' => { @@ -225,15 +225,15 @@ proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, :idv_enter_password_visited => { - address_verification_method: 'phone', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, + address_verification_method: 'phone', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, :idv_enter_password_submitted => { - success: true, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: false, deactivation_reason: nil, + success: true, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: false, deactivation_reason: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, 'IdV: final resolution' => { - success: true, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: false, deactivation_reason: nil, + success: true, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: false, deactivation_reason: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, 'IdV: personal key visited' => { @@ -255,25 +255,25 @@ { 'IdV: intro visited' => {}, 'IdV: doc auth welcome visited' => { - step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil }, 'IdV: doc auth welcome submitted' => { - step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil }, 'IdV: doc auth agreement visited' => { - step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default }, 'IdV: doc auth agreement submitted' => { - success: true, errors: {}, step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + success: true, errors: {}, step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default }, 'IdV: doc auth hybrid handoff visited' => { - step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'IdV: doc auth hybrid handoff submitted' => { - success: true, errors: {}, destination: :document_capture, flow_path: 'standard', redo_document_capture: nil, step: 'hybrid_handoff', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + success: true, errors: {}, destination: :document_capture, flow_path: 'standard', redo_document_capture: nil, step: 'hybrid_handoff', acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'IdV: doc auth document_capture visited' => { - flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'Frontend: IdV: front image added' => { width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, attempt: 1, flow_path: 'standard', acuant_sdk_upgrade_a_b_testing_enabled: 'false', use_alternate_sdk: anything, acuant_version: anything, acuantCaptureMode: nil, fingerprint: anything, failedImageResubmission: boolean, documentType: nil, dpi: nil, glare: nil, glareScoreThreshold: nil, isAssessedAsBlurry: nil, isAssessedAsGlare: nil, isAssessedAsUnsupported: nil, moire: nil, sharpness: nil, sharpnessScoreThreshold: nil, assessment: nil @@ -288,49 +288,49 @@ success: true, errors: {}, user_id: user.uuid, attempts: 1, remaining_attempts: 3, flow_path: 'standard', attention_with_barcode: false, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), classification_info: {} }, 'IdV: doc auth document_capture submitted' => { - success: true, errors: {}, flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + success: true, errors: {}, flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth ssn visited' => { - flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth ssn submitted' => { - success: true, errors: {}, flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + success: true, errors: {}, flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify visited' => { - flow_path: 'standard', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'standard', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify submitted' => { - flow_path: 'standard', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false + flow_path: 'standard', step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, 'IdV: doc auth verify proofing results' => { - success: true, errors: {}, flow_path: 'standard', address_edited: false, address_line2_present: false, analytics_id: 'Doc Auth', ssn_is_unique: true, step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, irs_reproofing: false, skip_hybrid_handoff: nil, + success: true, errors: {}, flow_path: 'standard', address_edited: false, address_line2_present: false, analytics_id: 'Doc Auth', ssn_is_unique: true, step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, irs_reproofing: false, skip_hybrid_handoff: nil, proofing_results: { exception: nil, timed_out: false, threatmetrix_review_status: 'pass', context: { device_profiling_adjudication_reason: 'device_profiling_result_pass', resolution_adjudication_reason: 'pass_resolution_and_state_id', should_proof_state_id: true, stages: { resolution: { success: true, errors: {}, exception: nil, timed_out: false, transaction_id: 'resolution-mock-transaction-id-123', reference: 'aaa-bbb-ccc', can_pass_with_additional_verification: false, attributes_requiring_additional_verification: [], vendor_name: 'ResolutionMock', vendor_workflow: nil }, residential_address: { attributes_requiring_additional_verification: [], can_pass_with_additional_verification: false, errors: {}, exception: nil, reference: '', success: true, timed_out: false, transaction_id: '', vendor_name: 'ResidentialAddressNotRequired', vendor_workflow: nil }, state_id: { success: true, errors: {}, exception: nil, mva_exception: nil, timed_out: false, transaction_id: 'state-id-mock-transaction-id-456', vendor_name: 'StateIdMock', verified_attributes: [], state: 'MT', state_id_jurisdiction: 'ND', state_id_number: '#############' }, threatmetrix: threatmetrix_response } } } }, 'IdV: phone of record visited' => { - acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, + acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass' } }, 'IdV: USPS address letter requested' => { - resend: false, phone_step_attempts: 0, first_letter_requested_at: nil, hours_since_first_letter: 0, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, + resend: false, phone_step_attempts: 0, first_letter_requested_at: nil, hours_since_first_letter: 0, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass' } }, 'IdV: request letter visited' => { letter_already_sent: false, }, :idv_enter_password_visited => { - address_verification_method: 'gpo', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, + address_verification_method: 'gpo', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'gpo_letter' } }, 'IdV: USPS address letter enqueued' => { - enqueued_at: Time.zone.now.utc, resend: false, phone_step_attempts: 0, first_letter_requested_at: Time.zone.now.utc, hours_since_first_letter: 0, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, + enqueued_at: Time.zone.now.utc, resend: false, phone_step_attempts: 0, first_letter_requested_at: Time.zone.now.utc, hours_since_first_letter: 0, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'gpo_letter' } }, :idv_enter_password_submitted => { - success: true, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: true, in_person_verification_pending: false, deactivation_reason: nil, + success: true, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: true, in_person_verification_pending: false, deactivation_reason: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'gpo_letter' } }, 'IdV: final resolution' => { - success: true, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: true, in_person_verification_pending: false, deactivation_reason: nil, + success: true, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: true, in_person_verification_pending: false, deactivation_reason: nil, proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'gpo_letter' } }, 'IdV: letter enqueued visited' => { @@ -342,25 +342,25 @@ let(:in_person_path_events) do { 'IdV: doc auth welcome visited' => { - step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil }, 'IdV: doc auth welcome submitted' => { - step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'welcome', analytics_id: 'Doc Auth', irs_reproofing: false, skip_hybrid_handoff: nil }, 'IdV: doc auth agreement visited' => { - step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default }, 'IdV: doc auth agreement submitted' => { - success: true, errors: {}, step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default + success: true, errors: {}, step: 'agreement', analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default }, 'IdV: doc auth hybrid handoff visited' => { - step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + step: 'hybrid_handoff', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'IdV: doc auth hybrid handoff submitted' => { - success: true, errors: {}, destination: :document_capture, flow_path: 'standard', redo_document_capture: nil, step: 'hybrid_handoff', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + success: true, errors: {}, destination: :document_capture, flow_path: 'standard', redo_document_capture: nil, step: 'hybrid_handoff', acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'IdV: doc auth document_capture visited' => { - flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false + flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, 'Frontend: IdV: front image added' => { width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, attempt: 1, flow_path: 'standard', acuant_sdk_upgrade_a_b_testing_enabled: 'false', use_alternate_sdk: anything, acuant_version: anything, acuantCaptureMode: nil, fingerprint: anything, failedImageResubmission: boolean, documentType: nil, dpi: nil, glare: nil, glareScoreThreshold: nil, isAssessedAsBlurry: nil, isAssessedAsGlare: nil, isAssessedAsUnsupported: nil, moire: nil, sharpness: nil, sharpnessScoreThreshold: nil, assessment: nil @@ -400,23 +400,23 @@ success: true, step: 'address', flow_path: 'standard', step_count: 1, analytics_id: 'In Person Proofing', irs_reproofing: false, errors: {}, same_address_as_id: false }, 'IdV: doc auth ssn visited' => { - analytics_id: 'In Person Proofing', step: 'ssn', flow_path: 'standard', irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, same_address_as_id: false + analytics_id: 'In Person Proofing', step: 'ssn', flow_path: 'standard', irs_reproofing: false, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, same_address_as_id: false }, 'IdV: doc auth ssn submitted' => { - analytics_id: 'In Person Proofing', success: true, step: 'ssn', flow_path: 'standard', irs_reproofing: false, errors: {}, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, same_address_as_id: false + analytics_id: 'In Person Proofing', success: true, step: 'ssn', flow_path: 'standard', irs_reproofing: false, errors: {}, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, same_address_as_id: false }, 'IdV: doc auth verify visited' => { - analytics_id: 'In Person Proofing', step: 'verify', flow_path: 'standard', irs_reproofing: false, same_address_as_id: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil + analytics_id: 'In Person Proofing', step: 'verify', flow_path: 'standard', irs_reproofing: false, same_address_as_id: false, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil }, 'IdV: doc auth verify submitted' => { - analytics_id: 'In Person Proofing', step: 'verify', flow_path: 'standard', irs_reproofing: false, same_address_as_id: false, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil + analytics_id: 'In Person Proofing', step: 'verify', flow_path: 'standard', irs_reproofing: false, same_address_as_id: false, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil }, 'IdV: doc auth verify proofing results' => { - success: true, errors: {}, flow_path: 'standard', address_edited: false, address_line2_present: false, analytics_id: 'In Person Proofing', ssn_is_unique: true, step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, irs_reproofing: false, same_address_as_id: false, skip_hybrid_handoff: nil, + success: true, errors: {}, flow_path: 'standard', address_edited: false, address_line2_present: false, analytics_id: 'In Person Proofing', ssn_is_unique: true, step: 'verify', acuant_sdk_upgrade_ab_test_bucket: :default, irs_reproofing: false, same_address_as_id: false, skip_hybrid_handoff: nil, proofing_results: { exception: nil, timed_out: false, threatmetrix_review_status: 'pass', context: { device_profiling_adjudication_reason: 'device_profiling_result_pass', resolution_adjudication_reason: 'pass_resolution_and_state_id', should_proof_state_id: true, stages: { resolution: { success: true, errors: {}, exception: nil, timed_out: false, transaction_id: 'resolution-mock-transaction-id-123', reference: 'aaa-bbb-ccc', can_pass_with_additional_verification: false, attributes_requiring_additional_verification: [], vendor_name: 'ResolutionMock', vendor_workflow: nil }, residential_address: { errors: {}, exception: nil, reference: 'aaa-bbb-ccc', success: true, timed_out: false, transaction_id: 'resolution-mock-transaction-id-123', can_pass_with_additional_verification: false, attributes_requiring_additional_verification: [], vendor_name: 'ResolutionMock', vendor_workflow: nil }, state_id: { success: true, errors: {}, exception: nil, mva_exception: nil, timed_out: false, transaction_id: 'state-id-mock-transaction-id-456', vendor_name: 'StateIdMock', verified_attributes: [], state: 'MT', state_id_jurisdiction: 'ND', state_id_number: '#############' }, threatmetrix: threatmetrix_response } } } }, 'IdV: phone confirmation form' => { - success: true, errors: {}, phone_type: :mobile, types: [:fixed_or_mobile], carrier: 'Test Mobile Carrier', country_code: 'US', area_code: '202', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, otp_delivery_preference: 'sms', + success: true, errors: {}, phone_type: :mobile, types: [:fixed_or_mobile], carrier: 'Test Mobile Carrier', country_code: 'US', area_code: '202', acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, otp_delivery_preference: 'sms', proofing_components: { document_check: 'usps', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', source_check: 'aamva' } }, 'IdV: phone confirmation vendor' => { @@ -435,15 +435,15 @@ proofing_components: { document_check: 'usps', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, :idv_enter_password_visited => { - acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, address_verification_method: 'phone', + acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, address_verification_method: 'phone', proofing_components: { document_check: 'usps', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, :idv_enter_password_submitted => { - success: true, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: true, deactivation_reason: nil, + success: true, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: true, deactivation_reason: nil, proofing_components: { document_check: 'usps', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, 'IdV: final resolution' => { - success: true, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: true, deactivation_reason: nil, + success: true, acuant_sdk_upgrade_ab_test_bucket: :default, skip_hybrid_handoff: nil, fraud_review_pending: false, fraud_rejection: false, gpo_verification_pending: false, in_person_verification_pending: true, deactivation_reason: nil, proofing_components: { document_check: 'usps', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' } }, 'IdV: personal key visited' => { diff --git a/spec/jobs/resolution_proofing_job_spec.rb b/spec/jobs/resolution_proofing_job_spec.rb index 7c9e0965fbf..af9e104d50f 100644 --- a/spec/jobs/resolution_proofing_job_spec.rb +++ b/spec/jobs/resolution_proofing_job_spec.rb @@ -7,9 +7,7 @@ { applicant_pii: pii }.to_json, ) end - let(:document_capture_session) do - DocumentCaptureSession.new(result_id: SecureRandom.hex, uuid: SecureRandom.uuid) - end + let(:document_capture_session) { DocumentCaptureSession.new(result_id: SecureRandom.hex) } let(:should_proof_state_id) { true } let(:trace_id) { SecureRandom.uuid } let(:user) { create(:user, :fully_registered) } @@ -33,7 +31,6 @@ subject(:perform) do instance.perform( result_id: document_capture_session.result_id, - instant_verify_ab_test_discriminator: document_capture_session.uuid, should_proof_state_id: should_proof_state_id, encrypted_arguments: encrypted_arguments, trace_id: trace_id, @@ -108,82 +105,6 @@ end end - context 'with a nil instant_verify_ab_test_discriminator (check for 50/50 state)' do - subject(:perform) do - instance.perform( - result_id: document_capture_session.result_id, - should_proof_state_id: should_proof_state_id, - encrypted_arguments: encrypted_arguments, - trace_id: trace_id, - user_id: user.id, - threatmetrix_session_id: threatmetrix_session_id, - request_ip: request_ip, - ) - end - it 'stores a successful result' do - stub_vendor_requests - - perform - - result = document_capture_session.load_proofing_result[:result] - result_context = result[:context] - result_context_stages = result_context[:stages] - result_context_stages_resolution = result_context_stages[:resolution] - result_context_stages_state_id = result_context_stages[:state_id] - result_context_stages_threatmetrix = result_context_stages[:threatmetrix] - - expect(result[:exception]).to be_nil - expect(result[:errors].keys).to eq([:'Execute Instant Verify']) - expect(result[:success]).to be true - expect(result[:timed_out]).to be false - expect(result[:threatmetrix_review_status]).to eq('pass') - - # result[:context] - expect(result_context[:should_proof_state_id]) - - # result[:context][:stages][:resolution] - expect(result_context_stages_resolution[:vendor_name]). - to eq('lexisnexis:instant_verify') - expect(result_context_stages_resolution[:errors]).to include(:'Execute Instant Verify') - expect(result_context_stages_resolution[:exception]).to eq(nil) - expect(result_context_stages_resolution[:success]).to eq(true) - expect(result_context_stages_resolution[:timed_out]).to eq(false) - expect(result_context_stages_resolution[:transaction_id]).to eq('123456') - expect(result_context_stages_resolution[:reference]).to eq('Reference1') - expect(result_context_stages_resolution[:can_pass_with_additional_verification]). - to eq(false) - expect(result_context_stages_resolution[:attributes_requiring_additional_verification]). - to eq([]) - - # result[:context][:stages][:state_id] - expect(result_context_stages_state_id[:vendor_name]).to eq('aamva:state_id') - expect(result_context_stages_state_id[:errors]).to eq({}) - expect(result_context_stages_state_id[:exception]).to eq(nil) - expect(result_context_stages_state_id[:success]).to eq(true) - expect(result_context_stages_state_id[:timed_out]).to eq(false) - expect(result_context_stages_state_id[:transaction_id]).to eq('1234-abcd-efgh') - expect(result_context_stages_state_id[:verified_attributes]).to eq( - %w[address state_id_number state_id_type dob last_name first_name], - ) - - # result[:context][:stages][:threatmetrix] - expect(result_context_stages_threatmetrix[:client]).to eq('lexisnexis') - expect(result_context_stages_threatmetrix[:errors]).to eq({}) - expect(result_context_stages_threatmetrix[:exception]).to eq(nil) - expect(result_context_stages_threatmetrix[:success]).to eq(true) - expect(result_context_stages_threatmetrix[:timed_out]).to eq(false) - expect(result_context_stages_threatmetrix[:transaction_id]).to eq('1234') - expect(result_context_stages_threatmetrix[:review_status]).to eq('pass') - expect(result_context_stages_threatmetrix[:response_body]).to eq( - JSON.parse(LexisNexisFixtures.ddp_success_redacted_response_json, symbolize_names: true), - ) - - proofing_component = user.proofing_component - expect(proofing_component.threatmetrix).to equal(true) - expect(proofing_component.threatmetrix_review_status).to eq('pass') - end - end - context 'with a failed InstantVerify result' do it 'stores an unsuccessful result' do stub_vendor_requests( @@ -404,7 +325,6 @@ subject(:perform) do instance.perform( result_id: document_capture_session.result_id, - instant_verify_ab_test_discriminator: document_capture_session.uuid, should_proof_state_id: should_proof_state_id, encrypted_arguments: encrypted_arguments, trace_id: trace_id, diff --git a/spec/services/idv/lexisnexis_instant_verify_spec.rb b/spec/services/idv/lexisnexis_instant_verify_spec.rb deleted file mode 100644 index 660f27c4a82..00000000000 --- a/spec/services/idv/lexisnexis_instant_verify_spec.rb +++ /dev/null @@ -1,75 +0,0 @@ -require 'rails_helper' - -RSpec.describe Idv::LexisnexisInstantVerify do - let(:session_uuid) { SecureRandom.uuid } - let(:default_workflow) { 'legacy_workflow' } - let(:alternate_workflow) { 'equitable_workflow' } - let(:ab_testing_enabled) { false } - - subject { Idv::LexisnexisInstantVerify.new(session_uuid) } - - before do - allow(IdentityConfig.store). - to receive(:lexisnexis_instant_verify_workflow_ab_testing_enabled). - and_return(ab_testing_enabled) - allow(IdentityConfig.store). - to receive(:lexisnexis_instant_verify_workflow_ab_testing_percent). - and_return(5) - allow(IdentityConfig.store). - to receive(:lexisnexis_instant_verify_workflow). - and_return(default_workflow) - allow(IdentityConfig.store). - to receive(:lexisnexis_instant_verify_workflow_alternate). - and_return(alternate_workflow) - end - - context 'with lexisnexis instant verify workflow A/B testing disabled' do - let(:ab_testing_enabled) { false } - - it 'returns correct variables' do - variables = subject.workflow_ab_testing_variables - - expect(variables[:ab_testing_enabled]).to eq(false) - expect(variables[:use_alternate_workflow]).to eq(false) - expect(variables[:instant_verify_workflow]).to eq(default_workflow) - end - end - - context 'with lexisnexis instant verify workflow A/B testing enabled' do - let(:ab_testing_enabled) { true } - - context 'and A/B test specifies the alternate workflow' do - before do - stub_const( - 'AbTests::LEXISNEXIS_INSTANT_VERIFY_WORKFLOW', - FakeAbTestBucket.new.tap { |ab| ab.assign(session_uuid => :use_alternate_workflow) }, - ) - end - - it 'returns correct variables' do - variables = subject.workflow_ab_testing_variables - - expect(variables[:ab_testing_enabled]).to eq(true) - expect(variables[:use_alternate_workflow]).to eq(true) - expect(variables[:instant_verify_workflow]).to eq(alternate_workflow) - end - end - - context 'and A/B test specifies the default workflow' do - before do - stub_const( - 'AbTests::LEXISNEXIS_INSTANT_VERIFY_WORKFLOW', - FakeAbTestBucket.new.tap { |ab| ab.assign(session_uuid => 0) }, - ) - end - - it 'returns correct variables' do - variables = subject.workflow_ab_testing_variables - - expect(variables[:ab_testing_enabled]).to eq(true) - expect(variables[:use_alternate_workflow]).to eq(false) - expect(variables[:instant_verify_workflow]).to eq(default_workflow) - end - end - end -end diff --git a/spec/services/proofing/resolution/progressive_proofer_spec.rb b/spec/services/proofing/resolution/progressive_proofer_spec.rb index 534f77b4e44..14a59679db0 100644 --- a/spec/services/proofing/resolution/progressive_proofer_spec.rb +++ b/spec/services/proofing/resolution/progressive_proofer_spec.rb @@ -10,8 +10,7 @@ let(:timer) { JobHelpers::Timer.new } let(:user) { create(:user, :fully_registered) } let(:instant_verify_proofer) { instance_double(Proofing::LexisNexis::InstantVerify::Proofer) } - let(:dcs_uuid) { SecureRandom.uuid } - let(:instance) { described_class.new(instant_verify_ab_test_discriminator: dcs_uuid) } + let(:instance) { described_class.new } let(:state_id_address) do { address1: applicant_pii[:identity_doc_address1], @@ -118,40 +117,6 @@ end end - context 'LexisNexis Instant Verify A/B test enabled' do - let(:applicant_pii) { Idp::Constants::MOCK_IDV_APPLICANT_SAME_ADDRESS_AS_ID } - let(:residential_instant_verify_proof) do - instance_double(Proofing::Resolution::Result) - end - let(:instant_verify_workflow) { 'equitable_workflow' } - let(:ab_test_variables) do - { - ab_testing_enabled: true, - use_alternate_workflow: true, - instant_verify_workflow: instant_verify_workflow, - } - end - - before do - allow(instant_verify_proofer).to receive(:proof). - and_return(residential_instant_verify_proof) - allow(residential_instant_verify_proof).to receive(:success?).and_return(true) - end - - it 'uses the selected workflow' do - lniv = Idv::LexisnexisInstantVerify.new(dcs_uuid) - expect(lniv).to receive(:workflow_ab_testing_variables). - and_return(ab_test_variables) - expect(Idv::LexisnexisInstantVerify).to receive(:new). - and_return(lniv) - expect(Proofing::LexisNexis::InstantVerify::Proofer).to receive(:new). - with(hash_including(instant_verify_workflow: instant_verify_workflow)). - and_return(instant_verify_proofer) - - proof - end - end - context 'residential address and id address are the same' do let(:applicant_pii) { Idp::Constants::MOCK_IDV_APPLICANT_SAME_ADDRESS_AS_ID } let(:aamva_proofer) { instance_double(Proofing::Aamva::Proofer) } @@ -357,7 +322,6 @@ allow(instant_verify_proofer).to receive(:proof).and_return(residential_address_proof) allow(residential_address_proof).to receive(:success?).and_return(true) end - context 'LexisNexis InstantVerify passes for id address' do it 'makes two requests to the InstantVerify Proofer' do expect(instant_verify_proofer).to receive(:proof). @@ -391,7 +355,6 @@ end end end - context 'LexisNexis InstantVerify fails for residential address' do let(:aamva_proofer) { instance_double(Proofing::Aamva::Proofer) } From 9628e29b9bac3ca595ae2fd31dad0554c7022cc2 Mon Sep 17 00:00:00 2001 From: Jonathan Hooper Date: Thu, 14 Dec 2023 15:08:54 -0500 Subject: [PATCH 3/3] Add the `instant_verify_ab_test_discriminator` arg to the `ResolutionProofingJob` This commit adds a arg to the `ResolutionProofingJob` which was used in the changes in #9743. That commit was reverted. Old workers did not know about this arg so they raised an ArgumentError when they encountered it. We reverted that change so we could introduce the arg in this one and then revert the revert. [skip changelog] --- app/jobs/resolution_proofing_job.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/jobs/resolution_proofing_job.rb b/app/jobs/resolution_proofing_job.rb index 4ae60050cd5..0a5e6d7ff20 100644 --- a/app/jobs/resolution_proofing_job.rb +++ b/app/jobs/resolution_proofing_job.rb @@ -23,7 +23,8 @@ def perform( ipp_enrollment_in_progress: false, user_id: nil, threatmetrix_session_id: nil, - request_ip: nil + request_ip: nil, + instant_verify_ab_test_discriminator: nil # rubocop:disable Lint/UnusedMethodArgument ) timer = JobHelpers::Timer.new