diff --git a/app/controllers/concerns/idv/ab_test_analytics_concern.rb b/app/controllers/concerns/idv/ab_test_analytics_concern.rb index 0ab10dc0823..148800f9074 100644 --- a/app/controllers/concerns/idv/ab_test_analytics_concern.rb +++ b/app/controllers/concerns/idv/ab_test_analytics_concern.rb @@ -1,17 +1,14 @@ module Idv module AbTestAnalyticsConcern include AcuantConcern - include Idv::PhoneQuestionAbTestConcern def ab_test_analytics_buckets buckets = {} if defined?(idv_session) buckets[:skip_hybrid_handoff] = idv_session&.skip_hybrid_handoff - buckets[:phone_with_camera] = idv_session&.phone_with_camera end - buckets.merge(acuant_sdk_ab_test_analytics_args). - merge(phone_question_ab_test_analytics_bucket) + buckets.merge(acuant_sdk_ab_test_analytics_args) end end end diff --git a/app/controllers/concerns/idv/phone_question_ab_test_concern.rb b/app/controllers/concerns/idv/phone_question_ab_test_concern.rb deleted file mode 100644 index 166bad98aa0..00000000000 --- a/app/controllers/concerns/idv/phone_question_ab_test_concern.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Idv - module PhoneQuestionAbTestConcern - def phone_question_ab_test_bucket - AbTests::IDV_PHONE_QUESTION.bucket(phone_question_user.uuid) - end - - def phone_question_user - if defined?(document_capture_user) # hybrid flow - document_capture_user - else - current_user - end - end - - def maybe_redirect_for_phone_question_ab_test - return if phone_question_ab_test_bucket != :show_phone_question - - return if !defined?(idv_session) - return if !idv_session.phone_with_camera.nil? - - redirect_to idv_phone_question_url - end - - def phone_question_ab_test_analytics_bucket - { - phone_question_ab_test_bucket: - phone_question_ab_test_bucket, - } - end - end -end diff --git a/app/controllers/idv/agreement_controller.rb b/app/controllers/idv/agreement_controller.rb index 2ae35f34da2..967d305f557 100644 --- a/app/controllers/idv/agreement_controller.rb +++ b/app/controllers/idv/agreement_controller.rb @@ -47,7 +47,7 @@ def self.step_info Idv::StepInfo.new( key: :agreement, controller: self, - next_steps: [:hybrid_handoff, :document_capture, :phone_question, :how_to_verify], + next_steps: [:hybrid_handoff, :document_capture, :how_to_verify], preconditions: ->(idv_session:, user:) { idv_session.welcome_visited }, undo_step: ->(idv_session:, user:) do idv_session.idv_consent_given = nil diff --git a/app/controllers/idv/document_capture_controller.rb b/app/controllers/idv/document_capture_controller.rb index 32c349780cc..8ee61cc452b 100644 --- a/app/controllers/idv/document_capture_controller.rb +++ b/app/controllers/idv/document_capture_controller.rb @@ -5,7 +5,6 @@ class DocumentCaptureController < ApplicationController include DocumentCaptureConcern include IdvStepConcern include StepIndicatorConcern - include PhoneQuestionAbTestConcern before_action :confirm_not_rate_limited, except: [:update] before_action :confirm_step_allowed @@ -47,11 +46,9 @@ def extra_view_variables flow_path: 'standard', sp_name: decorated_sp_session.sp_name, failure_to_proof_url: return_to_sp_failure_to_proof_url(step: 'document_capture'), - phone_with_camera: idv_session.phone_with_camera, skip_doc_auth: idv_session.skip_doc_auth, }.merge( acuant_sdk_upgrade_a_b_testing_variables, - phone_question_ab_test_analytics_bucket, ) end diff --git a/app/controllers/idv/hybrid_handoff_controller.rb b/app/controllers/idv/hybrid_handoff_controller.rb index b47e9c92924..b1a350e869a 100644 --- a/app/controllers/idv/hybrid_handoff_controller.rb +++ b/app/controllers/idv/hybrid_handoff_controller.rb @@ -4,12 +4,10 @@ class HybridHandoffController < ApplicationController include ActionView::Helpers::DateHelper include IdvStepConcern include StepIndicatorConcern - include PhoneQuestionAbTestConcern before_action :confirm_not_rate_limited before_action :confirm_step_allowed before_action :confirm_hybrid_handoff_needed, only: :show - before_action :maybe_redirect_for_phone_question_ab_test, only: :show def show analytics.idv_doc_auth_hybrid_handoff_visited(**analytics_arguments) @@ -19,7 +17,6 @@ def show true ) - @phone_question_ab_test_bucket = phone_question_ab_test_bucket render :show, locals: extra_view_variables end diff --git a/app/controllers/idv/hybrid_mobile/document_capture_controller.rb b/app/controllers/idv/hybrid_mobile/document_capture_controller.rb index 35b5fb3a93b..a9f90166220 100644 --- a/app/controllers/idv/hybrid_mobile/document_capture_controller.rb +++ b/app/controllers/idv/hybrid_mobile/document_capture_controller.rb @@ -4,7 +4,6 @@ class DocumentCaptureController < ApplicationController include Idv::AvailabilityConcern include DocumentCaptureConcern include HybridMobileConcern - include PhoneQuestionAbTestConcern before_action :check_valid_document_capture_session before_action :override_csp_to_allow_acuant @@ -44,8 +43,7 @@ def extra_view_variables failure_to_proof_url: return_to_sp_failure_to_proof_url(step: 'document_capture'), }.merge( acuant_sdk_upgrade_a_b_testing_variables, - phone_question_ab_test_analytics_bucket, - ).merge(phone_with_camera) + ) end private @@ -58,7 +56,7 @@ def analytics_arguments irs_reproofing: irs_reproofing?, }.merge( ab_test_analytics_buckets, - ).merge(phone_with_camera) + ) end def handle_stored_result @@ -85,10 +83,6 @@ def redo_document_capture_pending? document_capture_session.requested_at > stored_result.captured_at end - - def phone_with_camera - { phone_with_camera: phone_question_ab_test_bucket == :show_phone_question ? true : nil } - end end end end diff --git a/app/controllers/idv/link_sent_controller.rb b/app/controllers/idv/link_sent_controller.rb index 6a07d2550ae..f80fda8389f 100644 --- a/app/controllers/idv/link_sent_controller.rb +++ b/app/controllers/idv/link_sent_controller.rb @@ -4,7 +4,6 @@ class LinkSentController < ApplicationController include DocumentCaptureConcern include IdvStepConcern include StepIndicatorConcern - include PhoneQuestionAbTestConcern before_action :confirm_not_rate_limited before_action :confirm_step_allowed @@ -34,10 +33,7 @@ def update end def extra_view_variables - { phone: idv_session.phone_for_mobile_flow }.merge( - phone_question_ab_test_analytics_bucket, - phone_with_camera: idv_session.phone_with_camera, - ) + { phone: idv_session.phone_for_mobile_flow } end def self.step_info diff --git a/app/controllers/idv/phone_question_controller.rb b/app/controllers/idv/phone_question_controller.rb deleted file mode 100644 index 06431500e10..00000000000 --- a/app/controllers/idv/phone_question_controller.rb +++ /dev/null @@ -1,59 +0,0 @@ -module Idv - class PhoneQuestionController < ApplicationController - include ActionView::Helpers::DateHelper - include Idv::AvailabilityConcern - include IdvStepConcern - include StepIndicatorConcern - - before_action :confirm_not_rate_limited - before_action :confirm_step_allowed - before_action :confirm_hybrid_handoff_needed, only: :show - - def show - analytics.idv_doc_auth_phone_question_visited(**analytics_arguments) - - @title = t('doc_auth.headings.phone_question') - end - - def phone_with_camera - clear_future_steps! - idv_session.phone_with_camera = true - analytics.idv_doc_auth_phone_question_submitted(**analytics_arguments) - - redirect_to idv_hybrid_handoff_url - end - - def phone_without_camera - clear_future_steps! - idv_session.flow_path = 'standard' - idv_session.phone_with_camera = false - analytics.idv_doc_auth_phone_question_submitted(**analytics_arguments) - - redirect_to idv_document_capture_url - end - - def self.step_info - Idv::StepInfo.new( - key: :phone_question, - controller: self, - next_steps: [:hybrid_handoff, :document_capture], - preconditions: ->(idv_session:, user:) do - AbTests::IDV_PHONE_QUESTION.bucket(user.uuid) == :show_phone_question && - idv_session.idv_consent_given - end, - undo_step: ->(idv_session:, user:) { idv_session.phone_with_camera = nil }, - ) - end - - private - - def analytics_arguments - { - step: 'phone_question', - analytics_id: 'Doc Auth', - skip_hybrid_handoff: idv_session.skip_hybrid_handoff, - irs_reproofing: irs_reproofing?, - }.merge(ab_test_analytics_buckets) - end - end -end diff --git a/app/forms/idv/api_image_upload_form.rb b/app/forms/idv/api_image_upload_form.rb index bd0c3ac1050..b6f70e745f8 100644 --- a/app/forms/idv/api_image_upload_form.rb +++ b/app/forms/idv/api_image_upload_form.rb @@ -150,12 +150,10 @@ def extra_attributes user_id: user_uuid, pii_like_keypaths: DocPiiForm.pii_like_keypaths, flow_path: params[:flow_path], - phone_with_camera: phone_with_camera, } @extra_attributes[:front_image_fingerprint] = front_image_fingerprint @extra_attributes[:back_image_fingerprint] = back_image_fingerprint - @extra_attributes.merge!(phone_question_ab_test_analytics_bucket) @extra_attributes end @@ -284,8 +282,7 @@ def doc_auth_client vendor_discriminator: document_capture_session_uuid, warn_notifier: proc do |attrs| analytics&.doc_auth_warning( - **attrs. - merge(phone_question_ab_test_analytics_bucket), + **attrs, ) end, ) @@ -318,11 +315,9 @@ def update_analytics(client_response:, vendor_request_time_in_ms:) client_image_metrics: image_metadata, async: false, flow_path: params[:flow_path], - phone_with_camera: phone_with_camera, vendor_request_time_in_ms: vendor_request_time_in_ms, ).except(:classification_info). - merge(acuant_sdk_upgrade_ab_test_data). - merge(phone_question_ab_test_analytics_bucket), + merge(acuant_sdk_upgrade_ab_test_data), ) end @@ -353,13 +348,6 @@ def acuant_sdk_upgrade_ab_test_data } end - def phone_question_ab_test_analytics_bucket - { - phone_question_ab_test_bucket: - AbTests::IDV_PHONE_QUESTION.bucket(user_uuid), - } - end - def acuant_sdk_capture? image_metadata.dig(:front, :source) == Idp::Constants::Vendors::ACUANT && image_metadata.dig(:back, :source) == Idp::Constants::Vendors::ACUANT @@ -484,14 +472,5 @@ def store_failed_images(client_response, doc_pii_response) def image_resubmission_check? IdentityConfig.store.doc_auth_check_failed_image_resubmission_enabled end - - def phone_with_camera - case params[:phone_with_camera] - when 'true' - true - when 'false' - false - end - end end end diff --git a/app/policies/idv/flow_policy.rb b/app/policies/idv/flow_policy.rb index c32175ae3c2..a60e948803c 100644 --- a/app/policies/idv/flow_policy.rb +++ b/app/policies/idv/flow_policy.rb @@ -53,7 +53,6 @@ def steps welcome: Idv::WelcomeController.step_info, agreement: Idv::AgreementController.step_info, how_to_verify: Idv::HowToVerifyController.step_info, - phone_question: Idv::PhoneQuestionController.step_info, hybrid_handoff: Idv::HybridHandoffController.step_info, link_sent: Idv::LinkSentController.step_info, document_capture: Idv::DocumentCaptureController.step_info, diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index a22bc7e2c94..9ee1fbef282 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -290,15 +290,12 @@ def contact_redirect(redirect_url:, step: nil, location: nil, flow: nil, **extra end # @param [String] message the warning - # @param [String] phone_question_ab_test_bucket Prompt user with phone question before doc auth # Logged when there is a non-user-facing error in the doc auth process, such as an unrecognized # field from a vendor - def doc_auth_warning(message: nil, - phone_question_ab_test_bucket: nil, **extra) + def doc_auth_warning(message: nil, **extra) track_event( 'Doc Auth Warning', message: message, - phone_question_ab_test_bucket: phone_question_ab_test_bucket, **extra, ) end @@ -904,17 +901,6 @@ def idv_doc_auth_link_sent_visited(**extra) track_event('IdV: doc auth link_sent visited', **extra) end - # The "phone question" step: Desktop user has submitted they - # do or do not have a phone with a a camera via desktop - def idv_doc_auth_phone_question_submitted(**extra) - track_event(:idv_doc_auth_phone_question_submitted, **extra) - end - - # Desktop user has reached the above "phone question" view - def idv_doc_auth_phone_question_visited(**extra) - track_event(:idv_doc_auth_phone_question_visited, **extra) - end - def idv_doc_auth_randomizer_defaulted track_event( 'IdV: doc_auth random vendor error', @@ -949,8 +935,6 @@ def idv_doc_auth_ssn_visited(**extra) # @param [String] flow_path # @param [String] front_image_fingerprint Fingerprint of front image data # @param [String] back_image_fingerprint Fingerprint of back image data - # @param [String] phone_question_ab_test_bucket Prompt user with phone question before doc auth - # @param [String] phone_with_camera the result of the phone question a/b test # The document capture image uploaded was locally validated during the IDV process def idv_doc_auth_submitted_image_upload_form( success:, @@ -961,8 +945,6 @@ def idv_doc_auth_submitted_image_upload_form( user_id: nil, front_image_fingerprint: nil, back_image_fingerprint: nil, - phone_question_ab_test_bucket: nil, - phone_with_camera: nil, **extra ) track_event( @@ -975,8 +957,6 @@ def idv_doc_auth_submitted_image_upload_form( flow_path: flow_path, front_image_fingerprint: front_image_fingerprint, back_image_fingerprint: back_image_fingerprint, - phone_question_ab_test_bucket: phone_question_ab_test_bucket, - phone_with_camera: phone_with_camera, **extra, ) end @@ -996,8 +976,6 @@ def idv_doc_auth_submitted_image_upload_form( # @param [Float] vendor_request_time_in_ms Time it took to upload images & get a response. # @param [String] front_image_fingerprint Fingerprint of front image data # @param [String] back_image_fingerprint Fingerprint of back image data - # @param [String] phone_question_ab_test_bucket Prompt user with phone question before doc auth - # @param [String] phone_with_camera the result of the phone question a/b test # The document capture image was uploaded to vendor during the IDV process def idv_doc_auth_submitted_image_upload_vendor( success:, @@ -1014,8 +992,6 @@ def idv_doc_auth_submitted_image_upload_vendor( vendor_request_time_in_ms: nil, front_image_fingerprint: nil, back_image_fingerprint: nil, - phone_question_ab_test_bucket: nil, - phone_with_camera: nil, **extra ) track_event( @@ -1035,8 +1011,6 @@ def idv_doc_auth_submitted_image_upload_vendor( vendor_request_time_in_ms: vendor_request_time_in_ms, front_image_fingerprint: front_image_fingerprint, back_image_fingerprint: back_image_fingerprint, - phone_question_ab_test_bucket: phone_question_ab_test_bucket, - phone_with_camera: phone_with_camera, **extra, ) end @@ -2346,6 +2320,7 @@ def idv_link_sent_capture_doc_polling_complete( isRateLimited: isRateLimited, ) end + # rubocop:enable Naming/VariableName,Naming/MethodParameterName def idv_link_sent_capture_doc_polling_started(**_extra) diff --git a/app/services/idv/session.rb b/app/services/idv/session.rb index a018810327b..629a294cd60 100644 --- a/app/services/idv/session.rb +++ b/app/services/idv/session.rb @@ -16,7 +16,6 @@ class Session personal_key personal_key_acknowledged phone_for_mobile_flow - phone_with_camera pii_from_doc previous_phone_step_params profile_id diff --git a/app/views/idv/document_capture/show.html.erb b/app/views/idv/document_capture/show.html.erb index 52959f33676..74f08e0c2b5 100644 --- a/app/views/idv/document_capture/show.html.erb +++ b/app/views/idv/document_capture/show.html.erb @@ -7,7 +7,5 @@ acuant_sdk_upgrade_a_b_testing_enabled: acuant_sdk_upgrade_a_b_testing_enabled, use_alternate_sdk: use_alternate_sdk, acuant_version: acuant_version, - phone_question_ab_test_bucket: phone_question_ab_test_bucket, - phone_with_camera: phone_with_camera, skip_doc_auth: skip_doc_auth, ) %> diff --git a/app/views/idv/hybrid_handoff/show.html.erb b/app/views/idv/hybrid_handoff/show.html.erb index 62763a38a18..f0ab2cb26be 100644 --- a/app/views/idv/hybrid_handoff/show.html.erb +++ b/app/views/idv/hybrid_handoff/show.html.erb @@ -10,11 +10,7 @@ <% end %> <%= render PageHeadingComponent.new do %> - <% if @phone_question_ab_test_bucket == :show_phone_question %> - <%= t('doc_auth.headings.upload_from_phone') %> - <% else %> - <%= t('doc_auth.headings.hybrid_handoff') %> - <% end %> + <%= t('doc_auth.headings.hybrid_handoff') %> <% end %>

@@ -35,11 +31,7 @@ <%= t('doc_auth.info.tag') %>

- <% if @phone_question_ab_test_bucket == :show_phone_question %> - <%= t('doc_auth.headings.switch_to_phone') %> - <% else %> - <%= t('doc_auth.headings.upload_from_phone') %> - <% end %> + <%= t('doc_auth.headings.upload_from_phone') %>

<%= t('doc_auth.info.upload_from_phone') %> <%= simple_form_for( diff --git a/app/views/idv/hybrid_mobile/document_capture/show.html.erb b/app/views/idv/hybrid_mobile/document_capture/show.html.erb index b72d905f689..cfa4e580922 100644 --- a/app/views/idv/hybrid_mobile/document_capture/show.html.erb +++ b/app/views/idv/hybrid_mobile/document_capture/show.html.erb @@ -7,7 +7,5 @@ acuant_sdk_upgrade_a_b_testing_enabled: acuant_sdk_upgrade_a_b_testing_enabled, use_alternate_sdk: use_alternate_sdk, acuant_version: acuant_version, - phone_question_ab_test_bucket: phone_question_ab_test_bucket, - phone_with_camera: phone_with_camera, skip_doc_auth: false, - ) %> \ No newline at end of file + ) %> diff --git a/app/views/idv/link_sent/show.html.erb b/app/views/idv/link_sent/show.html.erb index a28a5c3e5f0..d36dae75700 100644 --- a/app/views/idv/link_sent/show.html.erb +++ b/app/views/idv/link_sent/show.html.erb @@ -43,8 +43,6 @@ <% if FeatureManagement.doc_capture_polling_enabled? %> <%= content_tag 'script', '', data: { status_endpoint: idv_capture_doc_status_url, - phone_question_ab_test_bucket: phone_question_ab_test_bucket, - phone_with_camera: phone_with_camera, } %> <%= javascript_packs_tag_once 'doc-capture-polling' %> <% end %> diff --git a/app/views/idv/phone_question/show.html.erb b/app/views/idv/phone_question/show.html.erb deleted file mode 100644 index c2807bc4601..00000000000 --- a/app/views/idv/phone_question/show.html.erb +++ /dev/null @@ -1,30 +0,0 @@ -<% self.title = @title %> - -<% content_for(:pre_flash_content) do %> - <%= render StepIndicatorComponent.new( - steps: Idv::StepIndicatorConcern::STEP_INDICATOR_STEPS, - current_step: :verify_id, - locale_scope: 'idv', - class: 'margin-x-neg-2 margin-top-neg-4 tablet:margin-x-neg-6 tablet:margin-top-neg-4', - ) %> -<% end %> - -<%= render PageHeadingComponent.new.with_content(@title) %> - -
- <%= link_to( - t('doc_auth.buttons.have_phone'), - idv_phone_question_phone_with_camera_url, - class: 'usa-button usa-button--wide usa-button--big', - ) %> -
- -

- - <%= link_to( - t('doc_auth.phone_question.do_not_have'), - idv_phone_question_phone_without_camera_url, - ) %> -

- -<%= render 'idv/doc_auth/cancel', step: 'phone_question' %> diff --git a/app/views/idv/shared/_document_capture.html.erb b/app/views/idv/shared/_document_capture.html.erb index 509c1e0c10f..430137e622c 100644 --- a/app/views/idv/shared/_document_capture.html.erb +++ b/app/views/idv/shared/_document_capture.html.erb @@ -23,8 +23,6 @@ acuant_sdk_upgrade_a_b_testing_enabled: acuant_sdk_upgrade_a_b_testing_enabled, use_alternate_sdk: use_alternate_sdk, acuant_version: acuant_version, - phone_question_ab_test_bucket: phone_question_ab_test_bucket, - phone_with_camera: phone_with_camera, sp_name: sp_name, flow_path: flow_path, cancel_url: idv_cancel_path(step: :document_capture), diff --git a/config/application.yml.default b/config/application.yml.default index 30fae63c77c..638a1b26e78 100644 --- a/config/application.yml.default +++ b/config/application.yml.default @@ -122,7 +122,6 @@ idv_acuant_sdk_version_default: '11.9.1' idv_acuant_sdk_version_alternate: '11.8.2' idv_acuant_sdk_upgrade_a_b_testing_enabled: false idv_acuant_sdk_upgrade_a_b_testing_percent: 50 -idv_phone_question_a_b_testing: '{"bypass_phone_question":100, "show_phone_question":0}' idv_send_link_attempt_window_in_minutes: 10 idv_send_link_max_attempts: 5 idv_sp_required: false diff --git a/config/initializers/ab_tests.rb b/config/initializers/ab_tests.rb index 4c9d76dddc5..4df55b07756 100644 --- a/config/initializers/ab_tests.rb +++ b/config/initializers/ab_tests.rb @@ -18,9 +18,4 @@ module AbTests 0, }, ) - - IDV_PHONE_QUESTION = AbTestBucket.new( - experiment_name: 'Idv: Phone Question', - buckets: IdentityConfig.store.idv_phone_question_a_b_testing, - ) end diff --git a/config/locales/doc_auth/en.yml b/config/locales/doc_auth/en.yml index 3ffaa4567c3..2bb33c86a74 100644 --- a/config/locales/doc_auth/en.yml +++ b/config/locales/doc_auth/en.yml @@ -8,7 +8,6 @@ en: buttons: add_new_photos: Add new photos continue: Continue - have_phone: Yes, I have a phone take_or_upload_picture_html: 'Take photo or Upload photo' take_picture: Take photo @@ -160,13 +159,11 @@ en: interstitial: We are processing your images lets_go: How verifying your identity works no_ssn: Don’t have a Social Security number? - phone_question: Do you have a phone you can use to take photos of your ID? review_issues: Check your images and try again secure_account: Secure your account selfie: Photo ssn: Enter your Social Security number ssn_update: Update your Social Security number - switch_to_phone: Switch to your phone text_message: We sent a message to your phone upload_from_computer: Continue on this computer upload_from_phone: Use your phone to take photos @@ -275,8 +272,6 @@ en: have verified your identity. You can return later to finish this process. header: Not ready to add photos? - phone_question: - do_not_have: I don’t have a phone tips: document_capture_header_text: 'For best results:' document_capture_hint: Must be a JPG or PNG diff --git a/config/locales/doc_auth/es.yml b/config/locales/doc_auth/es.yml index c7081ed7614..de94d035b0f 100644 --- a/config/locales/doc_auth/es.yml +++ b/config/locales/doc_auth/es.yml @@ -8,7 +8,6 @@ es: buttons: add_new_photos: Añadir nuevas fotos continue: Continuar - have_phone: Sí tengo teléfono take_or_upload_picture_html: 'Toma una foto o Sube una foto' take_picture: Toma una foto @@ -190,14 +189,11 @@ es: interstitial: Estamos procesando sus imágenes lets_go: Cómo funciona la verificación de su identidad no_ssn: ¿No tiene un número de Seguro Social? - phone_question: ¿Tiene un teléfono con el que pueda tomar fotos de su documento - de identidad? review_issues: Revise sus imágenes e inténtelo de nuevo secure_account: Asegure su cuenta selfie: Foto ssn: Ingrese su número de Seguro Social ssn_update: Actualice su número de Seguro Social - switch_to_phone: Cambiar al teléfono text_message: Enviamos un mensaje a su teléfono upload_from_computer: Continuar en esta computadora upload_from_phone: Utilice su teléfono para tomar las fotos @@ -318,8 +314,6 @@ es: verificado su identidad. Puede volver más tarde para completar este proceso. header: ¿No está listo para enviar las fotos? - phone_question: - do_not_have: No tengo teléfono tips: document_capture_header_text: 'Para obtener los mejores resultados:' document_capture_hint: Debe ser un JPG o PNG diff --git a/config/locales/doc_auth/fr.yml b/config/locales/doc_auth/fr.yml index 3fe949eb30e..59e84585ce1 100644 --- a/config/locales/doc_auth/fr.yml +++ b/config/locales/doc_auth/fr.yml @@ -8,7 +8,6 @@ fr: buttons: add_new_photos: Ajoutez de nouvelles photos continue: Continuer - have_phone: Oui j’ai un téléphone take_or_upload_picture_html: 'Prendre une photo ou Télécharger une photo' take_picture: Prendre une photo @@ -198,14 +197,11 @@ fr: interstitial: Nous traitons vos images lets_go: Comment fonctionne la vérification de votre identité no_ssn: Vous n’avez pas de numéro de sécurité sociale? - phone_question: Avez-vous un téléphone que vous pouvez utiliser pour prendre des - photos de votre identifiant? review_issues: Vérifiez vos images et essayez à nouveau secure_account: Sécuriser votre compte selfie: Photo ssn: Saisissez votre numéro de sécurité sociale ssn_update: Mettre à jour votre numéro de Sécurité Sociale - switch_to_phone: Basculez vers votre téléphone text_message: Nous avons envoyé un message à votre téléphone upload_from_computer: Continuer sur cet ordinateur upload_from_phone: Utilisez votre téléphone pour prendre des photos @@ -330,8 +326,6 @@ fr: votre identité n’aura pas été vérifiée. Vous pourrez revenir plus tard pour terminer ce processus. header: Vous n’êtes pas prêt à ajouter des photos? - phone_question: - do_not_have: Je n’ai pas de téléphone tips: document_capture_header_text: 'Pour obtenir les meilleurs résultats:' document_capture_hint: Doit être un JPG ou PNG diff --git a/config/routes.rb b/config/routes.rb index 03558422efd..1a66d28b1be 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -345,9 +345,6 @@ put '/phone_confirmation' => 'otp_verification#update', as: :nil get '/enter_password' => 'enter_password#new' put '/enter_password' => 'enter_password#create' - get '/phone_question' => 'phone_question#show' - get '/phone_question/phone_with_camera' => 'phone_question#phone_with_camera' - get '/phone_question/phone_without_camera' => 'phone_question#phone_without_camera' get '/session/errors/warning' => 'session_errors#warning' get '/session/errors/state_id_warning' => 'session_errors#state_id_warning' get '/phone/errors/timeout' => 'phone_errors#timeout' diff --git a/lib/identity_config.rb b/lib/identity_config.rb index 0c3f8a7a5a4..4e601ce44a0 100644 --- a/lib/identity_config.rb +++ b/lib/identity_config.rb @@ -232,7 +232,6 @@ def self.build_store(config_map) config.add(:idv_attempt_window_in_hours, type: :integer) config.add(:idv_available, type: :boolean) config.add(:idv_contact_phone_number, type: :string) - config.add(:idv_phone_question_a_b_testing, type: :json, options: { symbolize_names: true }) config.add(:idv_max_attempts, type: :integer) config.add(:idv_min_age_years, type: :integer) config.add(:idv_send_link_attempt_window_in_minutes, type: :integer) 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 219325b40e6..f743d2a87a9 100644 --- a/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb +++ b/spec/controllers/concerns/idv/ab_test_analytics_concern_spec.rb @@ -12,20 +12,17 @@ end let(:acuant_sdk_args) { { as_bucket: :as_value } } - let(:phone_question_args) { { pq_bucket: :pq_value } } 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) - expect(subject).to receive(:phone_question_ab_test_analytics_bucket). - and_return(phone_question_args) end context 'idv_session is available' do before do sign_in(user) - expect(subject).to receive(:idv_session).twice.and_return(idv_session) + 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) @@ -35,11 +32,6 @@ idv_session.skip_hybrid_handoff = :shh_value expect(controller.ab_test_analytics_buckets).to include({ skip_hybrid_handoff: :shh_value }) end - - it 'includes phone_with_camera' do - idv_session.phone_with_camera = :the_value - expect(controller.ab_test_analytics_buckets).to include({ phone_with_camera: :the_value }) - end end context 'idv_session is not available' do diff --git a/spec/controllers/concerns/idv/phone_question_ab_test_concern_spec.rb b/spec/controllers/concerns/idv/phone_question_ab_test_concern_spec.rb deleted file mode 100644 index 29ba28fb330..00000000000 --- a/spec/controllers/concerns/idv/phone_question_ab_test_concern_spec.rb +++ /dev/null @@ -1,129 +0,0 @@ -require 'rails_helper' - -RSpec.describe Idv::PhoneQuestionAbTestConcern do - let(:user) { create(:user, :fully_registered, email: 'old_email@example.com') } - - controller(ApplicationController) do - include Idv::PhoneQuestionAbTestConcern - - before_action :maybe_redirect_for_phone_question_ab_test - - def index - render plain: 'Hello' - end - end - - describe '#phone_question_ab_test_bucket' do - before do - allow(controller).to receive(:current_user).and_return(user) - allow(AbTests::IDV_PHONE_QUESTION).to receive(:bucket) do |discriminator| - case discriminator - when user.uuid - :show_phone_question - else :bypass_phone_question - end - end - end - - it 'returns the bucket based on user id' do - expect(controller.phone_question_ab_test_bucket).to eq(:show_phone_question) - end - - context 'with a different user' do - before do - user2 = create(:user, :fully_registered, email: 'new_email@example.com') - allow(controller).to receive(:current_user).and_return(user2) - end - it 'returns the bucket based on user id' do - expect(controller.phone_question_ab_test_bucket).to eq(:bypass_phone_question) - end - end - end - - describe '#phone_question_user' do - let(:document_capture_user) { create(:user) } - let(:current_user) { create(:user) } - before do - allow(controller).to receive(:current_user).and_return(current_user) - end - - context 'when document_capture_user is defined (hybrid flow)' do - before do - allow(controller).to receive(:document_capture_user).and_return(document_capture_user) - end - - it 'uses the document_capture_user to choose a bucket' do - expect(controller.phone_question_user).to eq(document_capture_user) - end - end - - context 'when falling back to current_user' do - it 'falls back to current_user when document_capture_user undefined' do - expect(controller.phone_question_user).to eq(current_user) - end - end - end - - context '#maybe_redirect_for_phone_question_ab_test' do - before do - sign_in(user) - end - let(:visited) { nil } - context 'A/B test specifies phone question page' do - before do - allow(controller).to receive(:phone_question_ab_test_bucket). - and_return(:show_phone_question) - - idv_session = instance_double(Idv::Session) - allow(idv_session).to receive(:method_missing). - with(:phone_with_camera). - and_return(visited) - allow(controller).to receive(:idv_session).and_return(idv_session) - end - - it 'redirects to idv_phone_question_url' do - get :index - - expect(response).to redirect_to(idv_phone_question_url) - end - - context 'referred from phone question page' do - let(:visited) { true } - it 'does not redirect users away from hybrid handoff page' do - get :index - - expect(response.body).to eq('Hello') - expect(response.status).to eq(200) - end - end - end - - context 'A/B test specifies bypassing phone question page' do - before do - allow(controller).to receive(:phone_question_ab_test_bucket). - and_return(:bypass_phone_question) - end - - it 'does not redirect users away from hybrid handoff page' do - get :index - - expect(response.body).to eq('Hello') - expect(response.status).to eq(200) - end - end - - context 'A/B test specifies some other value' do - before do - allow(controller).to receive(:phone_question_ab_test_bucket). - and_return(:something_else) - end - - it 'does not redirect users away from hybrid handoff page' do - get :index - - expect(response.body).to eq('Hello') - expect(response.status).to eq(200) - end - end - end -end diff --git a/spec/controllers/idv/hybrid_handoff_controller_spec.rb b/spec/controllers/idv/hybrid_handoff_controller_spec.rb index 450992c4abd..bd02f735e77 100644 --- a/spec/controllers/idv/hybrid_handoff_controller_spec.rb +++ b/spec/controllers/idv/hybrid_handoff_controller_spec.rb @@ -35,13 +35,6 @@ :check_for_mail_only_outage, ) end - - it 'includes redirect for phone_question ab test before_action' do - expect(subject).to have_actions( - :before, - :maybe_redirect_for_phone_question_ab_test, - ) - end end describe '#show' do @@ -284,60 +277,4 @@ end end end - - context '#maybe_redirect_for_phone_question_ab_test' do - context 'A/B test specifies phone question page' do - before do - allow(controller).to receive(:phone_question_ab_test_bucket). - and_return(:bypass_phone_question) - end - - it 'does not redirect users away from hybrid handoff page' do - get :show - - expect(response).to render_template :show - expect(response.status).to eq(200) - end - end - - context 'A/B test specifies phone question page' do - before do - allow(controller).to receive(:phone_question_ab_test_bucket). - and_return(:show_phone_question) - end - - it 'redirect users to phone question page' do - get :show - - expect(response).to redirect_to(idv_phone_question_url) - end - - context 'when user comes from phone_question page' do - before do - subject.idv_session.phone_with_camera = false - end - - it 'does not redirect users away from hybrid handoff page' do - get :show - - expect(response).to render_template :show - expect(response.status).to eq(200) - end - end - end - - context 'A/B test specifies some other value' do - before do - allow(controller).to receive(:phone_question_ab_test_bucket). - and_return(:something_else) - end - - it 'does not redirect users away from hybrid handoff page' do - get :show - - expect(response).to render_template :show - expect(response.status).to eq(200) - end - end - end end diff --git a/spec/controllers/idv/hybrid_mobile/document_capture_controller_spec.rb b/spec/controllers/idv/hybrid_mobile/document_capture_controller_spec.rb index e5b225ef78f..4e60db66461 100644 --- a/spec/controllers/idv/hybrid_mobile/document_capture_controller_spec.rb +++ b/spec/controllers/idv/hybrid_mobile/document_capture_controller_spec.rb @@ -58,7 +58,6 @@ flow_path: 'hybrid', irs_reproofing: false, step: 'document_capture', - phone_with_camera: nil, }.merge(ab_test_args) end @@ -81,18 +80,6 @@ expect(@analytics).to have_logged_event(analytics_name, analytics_args) end - context 'user visited phone_question_page' do - before do - allow(AbTests::IDV_PHONE_QUESTION).to receive(:bucket).and_return(:show_phone_question) - end - it 'logs user has a phone_with_camera' do - get :show - - expect(@analytics). - to have_logged_event(analytics_name, analytics_args.merge(phone_with_camera: true)) - end - end - it 'updates DocAuthLog document_capture_view_count' do doc_auth_log = DocAuthLog.create(user_id: user.id) @@ -172,7 +159,6 @@ flow_path: 'hybrid', irs_reproofing: false, step: 'document_capture', - phone_with_camera: nil, }.merge(ab_test_args) end diff --git a/spec/controllers/idv/image_uploads_controller_spec.rb b/spec/controllers/idv/image_uploads_controller_spec.rb index 7548033b067..8b4af0418cb 100644 --- a/spec/controllers/idv/image_uploads_controller_spec.rb +++ b/spec/controllers/idv/image_uploads_controller_spec.rb @@ -133,8 +133,6 @@ flow_path: 'standard', front_image_fingerprint: nil, back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(@irs_attempts_api_tracker).to receive(:track_event).with( @@ -269,8 +267,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(@irs_attempts_api_tracker).to receive(:track_event).with( @@ -371,8 +367,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(@analytics).to receive(:track_event).with( @@ -398,8 +392,6 @@ vendor_request_time_in_ms: a_kind_of(Float), front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, doc_type_supported: boolean, ) @@ -415,8 +407,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, classification_info: a_kind_of(Hash), ) @@ -552,8 +542,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(@analytics).to receive(:track_event).with( @@ -579,8 +567,6 @@ vendor_request_time_in_ms: a_kind_of(Float), front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, doc_type_supported: boolean, ) @@ -601,8 +587,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, classification_info: hash_including( Front: hash_including(ClassName: 'Identification Card', CountryCode: 'USA'), Back: hash_including(ClassName: 'Identification Card', CountryCode: 'USA'), @@ -647,8 +631,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(@analytics).to receive(:track_event).with( @@ -674,8 +656,6 @@ vendor_request_time_in_ms: a_kind_of(Float), front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, doc_type_supported: boolean, ) @@ -696,8 +676,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, classification_info: hash_including( Front: hash_including(ClassName: 'Identification Card', CountryCode: 'USA'), Back: hash_including(ClassName: 'Identification Card', CountryCode: 'USA'), @@ -742,8 +720,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(@analytics).to receive(:track_event).with( @@ -769,8 +745,6 @@ vendor_request_time_in_ms: a_kind_of(Float), front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, doc_type_supported: boolean, ) @@ -791,8 +765,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, classification_info: hash_including(:Front, :Back), ) @@ -857,8 +829,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(@analytics).to receive(:track_event).with( @@ -886,8 +856,6 @@ vendor_request_time_in_ms: a_kind_of(Float), front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, doc_type_supported: boolean, ) @@ -929,8 +897,6 @@ flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(@analytics).to receive(:track_event).with( @@ -960,8 +926,6 @@ vendor_request_time_in_ms: a_kind_of(Float), front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, doc_type_supported: boolean, ) diff --git a/spec/controllers/idv/phone_question_controller_spec.rb b/spec/controllers/idv/phone_question_controller_spec.rb deleted file mode 100644 index d259a45d52f..00000000000 --- a/spec/controllers/idv/phone_question_controller_spec.rb +++ /dev/null @@ -1,204 +0,0 @@ -require 'rails_helper' - -RSpec.describe Idv::PhoneQuestionController do - let(:user) { create(:user) } - - let(:analytics_args) do - { - step: 'phone_question', - analytics_id: 'Doc Auth', - skip_hybrid_handoff: nil, - irs_reproofing: false, - }.merge(ab_test_args) - end - - let(:ab_test_args) do - { sample_bucket1: :sample_value1, sample_bucket2: :sample_value2 } - end - - before do - stub_sign_in(user) - stub_analytics - stub_attempts_tracker - subject.user_session['idv/doc_auth'] = {} - subject.idv_session.idv_consent_given = true - allow(subject).to receive(:ab_test_analytics_buckets).and_return(ab_test_args) - allow(AbTests::IDV_PHONE_QUESTION).to receive(:bucket).and_return(:show_phone_question) - end - - describe '#step_info' do - it 'returns a valid StepInfo object' do - expect(Idv::PhoneQuestionController.step_info).to be_valid - end - end - - describe 'before_actions' do - it 'includes authentication before_action' do - expect(subject).to have_actions( - :before, - :confirm_two_factor_authenticated, - ) - end - - it 'includes outage before_action' do - expect(subject).to have_actions( - :before, - :check_for_mail_only_outage, - ) - end - - it 'checks that hybrid_handoff is needed' do - expect(subject).to have_actions( - :before, - :confirm_hybrid_handoff_needed, - ) - end - end - - describe '#show' do - let(:analytics_name) { :idv_doc_auth_phone_question_visited } - - it 'renders the show template' do - get :show - - expect(response).to render_template :show - end - - context 'when rendered' do - render_views - - it 'displays phone question header' do - get :show - - expect(response.body).to include(t('doc_auth.headings.phone_question')) - end - end - - it 'sends analytics_visited event' do - get :show - - expect(@analytics).to have_logged_event(analytics_name, analytics_args) - end - - context 'agreement step is not complete' do - before do - subject.idv_session.welcome_visited = true - subject.idv_session.idv_consent_given = nil - end - - it 'redirects to idv_agreement_url' do - get :show - - expect(response).to redirect_to(idv_agreement_url) - end - - it 'phone_with_camera not set in idv_session' do - get :phone_with_camera - - expect(subject.idv_session.phone_with_camera).to be_nil - end - end - - context 'confirm_hybrid_handoff_needed before action' do - context 'standard flow_path already defined' do - it 'does not redirect to document_capture in standard flow' do - subject.idv_session.flow_path = 'standard' - - get :show - - expect(response).to render_template :show - end - - it 'does not redirect to link_sent in hybrid flow' do - subject.idv_session.flow_path = 'hybrid' - - get :show - - expect(response).to render_template :show - end - end - - context 'on mobile device' do - it 'redirects to document_capture' do - subject.idv_session.skip_hybrid_handoff = true - - get :show - - expect(response).to redirect_to(idv_document_capture_url) - end - end - - context 'hybrid flow is not available' do - before do - allow(FeatureManagement).to receive(:idv_allow_hybrid_flow?).and_return(false) - end - - it 'redirects the user straight to document capture' do - get :show - expect(response).to redirect_to(idv_document_capture_url) - end - end - end - end - - describe '#phone_with_camera' do - let(:analytics_name) { :idv_doc_auth_phone_question_submitted } - - it 'invalidates future steps' do - expect(subject).to receive(:clear_future_steps!) - - get :phone_with_camera - end - - it 'redirects to hybrid handoff' do - get :phone_with_camera - - expect(response).to redirect_to(idv_hybrid_handoff_url) - end - - it 'sends analytics submitted event' do - get :phone_with_camera - - expect(@analytics). - to have_logged_event(analytics_name, analytics_args) - end - - it 'phone_with_camera set in idv_session' do - expect { get :phone_with_camera }. - to change { subject.idv_session.phone_with_camera }.from(nil).to true - end - end - - describe '#phone_without_camera' do - let(:analytics_name) { :idv_doc_auth_phone_question_submitted } - - it 'invalidates future steps' do - expect(subject).to receive(:clear_future_steps!) - - get :phone_without_camera - end - - it 'redirects to document_capture' do - get :phone_without_camera - - expect(response).to redirect_to(idv_document_capture_url) - end - - it 'sends analytics submitted event' do - get :phone_without_camera - - expect(@analytics). - to have_logged_event(analytics_name, analytics_args) - end - - it 'set idv_session flow path to standard' do - expect { get :phone_without_camera }. - to change { subject.idv_session.flow_path }.from(nil).to 'standard' - end - - it 'phone_with_camera set in idv_session' do - expect { get :phone_without_camera }. - to change { subject.idv_session.phone_with_camera }.from(nil).to false - end - end -end diff --git a/spec/features/idv/analytics_spec.rb b/spec/features/idv/analytics_spec.rb index 9240a09471e..3bfb6c4d919 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, skip_hybrid_handoff: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, skip_hybrid_handoff: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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 @@ -69,36 +69,36 @@ 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 }, 'IdV: doc auth image upload form submitted' => { - success: true, errors: {}, attempts: 1, remaining_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + success: true, errors: {}, attempts: 1, remaining_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String) }, 'IdV: doc auth image upload vendor pii validation' => { - 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), phone_question_ab_test_bucket: :bypass_phone_question, classification_info: {}, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, skip_hybrid_handoff: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, skip_hybrid_handoff: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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 @@ -177,36 +177,36 @@ 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 }, 'IdV: doc auth image upload form submitted' => { - success: true, errors: {}, attempts: 1, remaining_attempts: 3, user_id: user.uuid, flow_path: 'hybrid', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + success: true, errors: {}, attempts: 1, remaining_attempts: 3, user_id: user.uuid, flow_path: 'hybrid', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String) }, 'IdV: doc auth image upload vendor pii validation' => { - 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), phone_question_ab_test_bucket: :bypass_phone_question, classification_info: {}, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, skip_hybrid_handoff: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, skip_hybrid_handoff: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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 @@ -282,55 +282,55 @@ 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 }, 'IdV: doc auth image upload form submitted' => { - success: true, errors: {}, attempts: 1, remaining_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + success: true, errors: {}, attempts: 1, remaining_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String) }, 'IdV: doc auth image upload vendor pii validation' => { - 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), phone_question_ab_test_bucket: :bypass_phone_question, classification_info: {}, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, skip_hybrid_handoff: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, skip_hybrid_handoff: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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 @@ -369,9 +369,9 @@ 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 }, 'IdV: doc auth image upload form submitted' => { - success: true, errors: {}, attempts: 1, remaining_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil + success: true, errors: {}, attempts: 1, remaining_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String) }, - 'IdV: doc auth image upload vendor submitted' => hash_including(success: true, flow_path: 'standard', attention_with_barcode: true, doc_auth_result: 'Attention', phone_with_camera: nil), + 'IdV: doc auth image upload vendor submitted' => hash_including(success: true, flow_path: 'standard', attention_with_barcode: true, doc_auth_result: 'Attention'), 'IdV: verify in person troubleshooting option clicked' => { flow_path: 'standard', }, @@ -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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, acuant_sdk_upgrade_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: {}, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, acuant_sdk_upgrade_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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, acuant_sdk_upgrade_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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, acuant_sdk_upgrade_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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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, phone_question_ab_test_bucket: :bypass_phone_question, phone_with_camera: nil, 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/features/idv/doc_auth/hybrid_handoff_spec.rb b/spec/features/idv/doc_auth/hybrid_handoff_spec.rb index 21471799825..6668c7aab95 100644 --- a/spec/features/idv/doc_auth/hybrid_handoff_spec.rb +++ b/spec/features/idv/doc_auth/hybrid_handoff_spec.rb @@ -161,13 +161,8 @@ timeout: timeout, ), ) - - # expect to see the headings that reflect having - # :phone_question_ab_test_bucket set to :bypass_phone_question expect(page).to have_selector('h1', text: t('doc_auth.headings.hybrid_handoff')) expect(page).to have_selector('h2', text: t('doc_auth.headings.upload_from_phone')) - expect(page).not_to have_selector('h1', text: t('doc_auth.headings.upload_from_phone')) - expect(page).not_to have_selector('h2', text: t('doc_auth.headings.switch_to_phone')) end expect(fake_analytics).to have_logged_event( 'Rate Limit Reached', @@ -184,77 +179,6 @@ end end - context 'PhoneQuestion page' do - before do - allow(AbTests::IDV_PHONE_QUESTION).to receive(:bucket).and_return(:show_phone_question) - end - - it 'rate limits sending the link' do - user = user_with_2fa - sign_in_and_2fa_user(user) - complete_doc_auth_steps_before_hybrid_handoff_step - timeout = distance_of_time_in_words( - RateLimiter.attempt_window_in_minutes(:idv_send_link).minutes, - ) - allow(IdentityConfig.store).to receive(:idv_send_link_max_attempts). - and_return(idv_send_link_max_attempts) - - expect(fake_attempts_tracker).to receive( - :idv_phone_send_link_rate_limited, - ).with({ phone_number: '+1 415-555-0199' }) - - expect(page).to have_current_path(idv_phone_question_path) - click_link t('doc_auth.buttons.have_phone') - - freeze_time do - idv_send_link_max_attempts.times do - expect(page).to_not have_content( - I18n.t('errors.doc_auth.send_link_limited', timeout: timeout), - ) - - fill_in :doc_auth_phone, with: '415-555-0199' - click_send_link - - expect(page).to have_current_path(idv_link_sent_path) - - click_doc_auth_back_link - end - - fill_in :doc_auth_phone, with: '415-555-0199' - - click_send_link - expect(page).to have_current_path(idv_hybrid_handoff_path, ignore_query: true) - expect(page).to have_content( - I18n.t( - 'errors.doc_auth.send_link_limited', - timeout: timeout, - ), - ) - end - - # expect to see the headings that refelect having - # :phone_question_ab_test_bucket set to :show_phone_question - expect(page).to have_selector('h1', text: t('doc_auth.headings.upload_from_phone')) - expect(page).to have_selector('h2', text: t('doc_auth.headings.switch_to_phone')) - expect(page).not_to have_selector('h1', text: t('doc_auth.headings.hybrid_handoff')) - expect(page).not_to have_selector('h2', text: t('doc_auth.headings.upload_from_phone')) - - expect(fake_analytics).to have_logged_event( - 'Rate Limit Reached', - limiter_type: :idv_send_link, - ) - - # Manual expiration is needed for now since the RateLimiter uses - # Redis ttl instead of expiretime - RateLimiter.new(rate_limit_type: :idv_send_link, user: user).reset! - travel_to(Time.zone.now + idv_send_link_attempt_window_in_minutes.minutes) do - fill_in :doc_auth_phone, with: '415-555-0199' - click_send_link - expect(page).to have_current_path(idv_link_sent_path) - end - end - end - it 'includes expected URL parameters' do expect(Telephony).to receive(:send_doc_auth_link).and_wrap_original do |impl, config| params = Rack::Utils.parse_nested_query URI(config[:link]).query diff --git a/spec/features/idv/doc_auth/phone_question_spec.rb b/spec/features/idv/doc_auth/phone_question_spec.rb deleted file mode 100644 index 7c24069c287..00000000000 --- a/spec/features/idv/doc_auth/phone_question_spec.rb +++ /dev/null @@ -1,101 +0,0 @@ -require 'rails_helper' - -RSpec.feature 'phone question step' do - include IdvStepHelper - include DocAuthHelper - - let(:fake_analytics) { FakeAnalytics.new } - let(:analytics_args) do - { - step: 'phone_question', - analytics_id: 'Doc Auth', - skip_hybrid_handoff: nil, - irs_reproofing: false, - } - end - - before do - allow_any_instance_of(ApplicationController).to receive(:analytics).and_return(fake_analytics) - allow(AbTests::IDV_PHONE_QUESTION).to receive(:bucket).and_return(:show_phone_question) - sign_in_and_2fa_user - complete_doc_auth_steps_before_hybrid_handoff_step - end - - context 'phone question answered', :js do - let(:analytics_name) { 'IdV: doc auth phone question submitted' } - - describe '#camera_with_phone' do - let(:phone_number) { '415-555-0199' } - - it 'redirects to hybrid handoff if user confirms having phone' do - expect(page).to have_current_path(idv_phone_question_path) - click_link t('doc_auth.buttons.have_phone') - expect(page).to have_current_path(idv_hybrid_handoff_path) - expect(fake_analytics).to have_logged_event( - :idv_doc_auth_phone_question_submitted, - hash_including(step: 'phone_question', phone_with_camera: true), - ) - # test back link on link sent returns to hybrid handoff - clear_and_fill_in(:doc_auth_phone, phone_number) - click_send_link - expect(page).to have_current_path(idv_link_sent_path) - click_link(t('forms.buttons.back')) - expect(page).to have_current_path(idv_hybrid_handoff_path(redo: true)) - - # test no, keep going from cancel page - click_link t('links.cancel') - expect(current_path).to eq(idv_cancel_path) - click_on t('idv.cancel.actions.keep_going') - expect(page).to have_current_path(idv_hybrid_handoff_path(redo: true)) - complete_hybrid_handoff_step - attach_and_submit_images - expect(fake_analytics).to have_logged_event( - 'IdV: doc auth image upload form submitted', - hash_including(phone_with_camera: nil), - ) - expect(fake_analytics).to have_logged_event( - 'IdV: doc auth image upload vendor submitted', - hash_including(phone_with_camera: nil), - ) - end - end - - describe '#camera_without_phone' do - it 'redirects to standard document capture if user confirms not having phone' do - click_link t('doc_auth.phone_question.do_not_have') - expect(page).to have_current_path(idv_document_capture_path) - expect(fake_analytics).to have_logged_event( - :idv_doc_auth_phone_question_submitted, - hash_including(step: 'phone_question', phone_with_camera: false), - ) - attach_and_submit_images - expect(fake_analytics).to have_logged_event( - 'IdV: doc auth image upload form submitted', - hash_including(phone_with_camera: nil), - ) - expect(fake_analytics).to have_logged_event( - 'IdV: doc auth image upload vendor submitted', - hash_including(phone_with_camera: nil), - ) - end - end - end - - it 'allows user to cancel identify verification', :js do - click_link t('links.cancel') - expect(page).to have_current_path(idv_cancel_path(step: 'phone_question')) - - expect(fake_analytics).to have_logged_event( - 'IdV: cancellation visited', - hash_including(step: 'phone_question'), - ) - - click_spinner_button_and_wait t('idv.cancel.actions.account_page') - - expect(current_path).to eq(account_path) - expect(fake_analytics).to have_logged_event( - 'IdV: cancellation confirmed', - hash_including(step: 'phone_question'), - ) - end -end diff --git a/spec/forms/idv/api_image_upload_form_spec.rb b/spec/forms/idv/api_image_upload_form_spec.rb index 295da29ea8b..e54ecad42b9 100644 --- a/spec/forms/idv/api_image_upload_form_spec.rb +++ b/spec/forms/idv/api_image_upload_form_spec.rb @@ -124,8 +124,6 @@ flow_path: anything, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) expect(fake_analytics).to have_logged_event( @@ -161,8 +159,6 @@ front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), doc_type_supported: boolean, - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) end @@ -224,8 +220,6 @@ flow_path: anything, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, ) end @@ -358,8 +352,6 @@ flow_path: anything, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), - phone_question_ab_test_bucket: :bypass_phone_question, - phone_with_camera: nil, side: 'both', ) end diff --git a/spec/views/idv/hybrid_handoff/show.html.erb_spec.rb b/spec/views/idv/hybrid_handoff/show.html.erb_spec.rb index b8fbf3c7a48..eec29236ebf 100644 --- a/spec/views/idv/hybrid_handoff/show.html.erb_spec.rb +++ b/spec/views/idv/hybrid_handoff/show.html.erb_spec.rb @@ -12,57 +12,22 @@ } end - context 'with show phone question' do - before do - @phone_question_ab_test_bucket = :show_phone_question - end - - it 'has a form for starting mobile doc auth with an aria label tag' do - expect(rendered).to have_selector( - :xpath, - "//form[@aria-label=\"#{t('forms.buttons.send_link')}\"]", - ) - end - - it 'has a form for starting desktop doc auth with an aria label tag' do - expect(rendered).to have_selector( - :xpath, - "//form[@aria-label=\"#{t('forms.buttons.upload_photos')}\"]", - ) - end - - it 'displays the expected headings from the "b" case' do - expect(rendered).to have_selector('h1', text: t('doc_auth.headings.upload_from_phone')) - expect(rendered).to have_selector('h2', text: t('doc_auth.headings.switch_to_phone')) - expect(rendered).not_to have_selector('h1', text: t('doc_auth.headings.hybrid_handoff')) - expect(rendered).not_to have_selector('h2', text: t('doc_auth.headings.upload_from_phone')) - end + it 'has a form for starting mobile doc auth with an aria label tag' do + expect(rendered).to have_selector( + :xpath, + "//form[@aria-label=\"#{t('forms.buttons.send_link')}\"]", + ) end - context 'without show phone question' do - before do - @phone_question_ab_test_bucket = :bypass_phone_question - end - - it 'has a form for starting mobile doc auth with an aria label tag' do - expect(rendered).to have_selector( - :xpath, - "//form[@aria-label=\"#{t('forms.buttons.send_link')}\"]", - ) - end - - it 'has a form for starting desktop doc auth with an aria label tag' do - expect(rendered).to have_selector( - :xpath, - "//form[@aria-label=\"#{t('forms.buttons.upload_photos')}\"]", - ) - end + it 'has a form for starting desktop doc auth with an aria label tag' do + expect(rendered).to have_selector( + :xpath, + "//form[@aria-label=\"#{t('forms.buttons.upload_photos')}\"]", + ) + end - it 'displays the expected headings from the "a" case' do - expect(rendered).to have_selector('h1', text: t('doc_auth.headings.hybrid_handoff')) - expect(rendered).to have_selector('h2', text: t('doc_auth.headings.upload_from_phone')) - expect(rendered).not_to have_selector('h1', text: t('doc_auth.headings.upload_from_phone')) - expect(rendered).not_to have_selector('h2', text: t('doc_auth.headings.switch_to_phone')) - end + it 'displays the expected headings from the "a" case' do + expect(rendered).to have_selector('h1', text: t('doc_auth.headings.hybrid_handoff')) + expect(rendered).to have_selector('h2', text: t('doc_auth.headings.upload_from_phone')) end end diff --git a/spec/views/idv/shared/_document_capture.html.erb_spec.rb b/spec/views/idv/shared/_document_capture.html.erb_spec.rb index 9eabd393c24..11b6b81385d 100644 --- a/spec/views/idv/shared/_document_capture.html.erb_spec.rb +++ b/spec/views/idv/shared/_document_capture.html.erb_spec.rb @@ -12,9 +12,7 @@ let(:in_person_proofing_enabled_issuer) { nil } let(:acuant_sdk_upgrade_a_b_testing_enabled) { false } let(:use_alternate_sdk) { false } - let(:phone_question_ab_test_bucket) { :bypass_phone_question } let(:doc_auth_selfie_capture) { { enabled: false } } - let(:phone_with_camera) { false } let(:acuant_version) { '1.3.3.7' } let(:skip_doc_auth) { false } @@ -45,9 +43,7 @@ acuant_sdk_upgrade_a_b_testing_enabled: acuant_sdk_upgrade_a_b_testing_enabled, use_alternate_sdk: use_alternate_sdk, acuant_version: acuant_version, - phone_question_ab_test_bucket: phone_question_ab_test_bucket, doc_auth_selfie_capture: doc_auth_selfie_capture, - phone_with_camera: phone_with_camera, skip_doc_auth: skip_doc_auth, } end