From f7fd150de59026541cd9a04848ac5172a036e939 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 12:18:34 -0700 Subject: [PATCH 01/14] Update Idv::CancellationsController spec to use have_logged_event --- app/services/analytics_events.rb | 15 ++++- .../idv/cancellations_controller_spec.rb | 62 ++++++++++--------- 2 files changed, 48 insertions(+), 29 deletions(-) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index 004bc82bd22..f31df0e763a 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -820,12 +820,25 @@ def idv_cancellation_confirmed(step:, proofing_components: nil, **extra) # @param [String] step the step that the user was on when they clicked cancel # @param [Idv::ProofingComponentsLogging] proofing_components User's current proofing components + # @param [boolean,nil] cancelled_enrollment Whether the user's IPP enrollment has been canceled + # @param [String,nil] enrollment_code IPP enrollment code + # @param [Integer,nil] enrollment_id ID of the associated IPP enrollment record # The user chose to go back instead of cancel IDV - def idv_cancellation_go_back(step:, proofing_components: nil, **extra) + def idv_cancellation_go_back( + step:, + proofing_components: nil, + cancelled_enrollment: nil, + enrollment_code: nil, + enrollment_id: nil, + **extra + ) track_event( 'IdV: cancellation go back', step: step, proofing_components: proofing_components, + cancelled_enrollment: cancelled_enrollment, + enrollment_code: enrollment_code, + enrollment_id: enrollment_id, **extra, ) end diff --git a/spec/controllers/idv/cancellations_controller_spec.rb b/spec/controllers/idv/cancellations_controller_spec.rb index 610362f0142..c487fada481 100644 --- a/spec/controllers/idv/cancellations_controller_spec.rb +++ b/spec/controllers/idv/cancellations_controller_spec.rb @@ -18,14 +18,14 @@ stub_sign_in stub_analytics - expect(@analytics).to receive(:track_event).with( + get :new + + expect(@analytics).to have_logged_event( 'IdV: cancellation visited', request_came_from: 'no referer', step: nil, proofing_components: nil, ) - - get :new end it 'tracks the event in analytics when referer is present' do @@ -33,28 +33,28 @@ stub_analytics request.env['HTTP_REFERER'] = 'http://example.com/' - expect(@analytics).to receive(:track_event).with( + get :new + + expect(@analytics).to have_logged_event( 'IdV: cancellation visited', request_came_from: 'users/sessions#new', step: nil, proofing_components: nil, ) - - get :new end it 'tracks the event in analytics when step param is present' do stub_sign_in stub_analytics - expect(@analytics).to receive(:track_event).with( + get :new, params: { step: 'first' } + + expect(@analytics).to have_logged_event( 'IdV: cancellation visited', request_came_from: 'no referer', step: 'first', proofing_components: nil, ) - - get :new, params: { step: 'first' } end context 'when no session' do @@ -104,7 +104,6 @@ describe '#update' do let(:user) { create(:user) } - let(:enrollment) { create(:in_person_enrollment, :pending, user: user) } before do stub_sign_in(user) @@ -112,26 +111,16 @@ end it 'logs cancellation go back' do - expect(@analytics).to receive(:track_event).with( - 'IdV: cancellation go back', - step: 'first', - proofing_components: nil, - ) - put :update, params: { step: 'first', cancel: 'true' } - end - it 'logs cancellation go back with extra analytics attributes for barcode step' do - expect(@analytics).to receive(:track_event).with( + expect(@analytics).to have_logged_event( 'IdV: cancellation go back', - step: 'barcode', + step: 'first', proofing_components: nil, - cancelled_enrollment: false, - enrollment_code: enrollment.enrollment_code, - enrollment_id: enrollment.id, + cancelled_enrollment: nil, + enrollment_code: nil, + enrollment_id: nil, ) - - put :update, params: { step: 'barcode', cancel: 'true' } end it 'redirects to idv_path' do @@ -140,6 +129,23 @@ expect(response).to redirect_to idv_url end + context 'in-person proofing' do + let!(:enrollment) { create(:in_person_enrollment, :pending, user: user) } + + it 'logs cancellation go back with extra analytics attributes for barcode step' do + put :update, params: { step: 'barcode', cancel: 'true' } + + expect(@analytics).to have_logged_event( + 'IdV: cancellation go back', + step: 'barcode', + proofing_components: nil, + cancelled_enrollment: false, + enrollment_code: enrollment.enrollment_code, + enrollment_id: enrollment.id, + ) + end + end + context 'with go back path stored in session' do let(:go_back_path) { '/path/to/return' } @@ -162,13 +168,13 @@ stub_sign_in stub_analytics - expect(@analytics).to receive(:track_event).with( + delete :destroy, params: { step: 'first' } + + expect(@analytics).to have_logged_event( 'IdV: cancellation confirmed', step: 'first', proofing_components: nil, ) - - delete :destroy, params: { step: 'first' } end context 'when no session' do From f43b382d3ad4631d4638075eda9ba3be56b36614 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 12:06:11 -0700 Subject: [PATCH 02/14] Update Idv::PhoneOtpRateLimitable spec to use have_logged_event --- .../concerns/idv/phone_otp_rate_limitable_spec.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spec/controllers/concerns/idv/phone_otp_rate_limitable_spec.rb b/spec/controllers/concerns/idv/phone_otp_rate_limitable_spec.rb index 0d7c21a67c9..2b5fe151111 100644 --- a/spec/controllers/concerns/idv/phone_otp_rate_limitable_spec.rb +++ b/spec/controllers/concerns/idv/phone_otp_rate_limitable_spec.rb @@ -13,17 +13,13 @@ def handle_max_attempts(_arg = nil) before do stub_analytics stub_attempts_tracker - allow(@analytics).to receive(:track_event) allow(@irs_attempts_api_tracker).to receive(:track_event) end it 'calls analytics tracking event' do subject.handle_too_many_otp_sends - expect(@analytics).to have_received(:track_event).with( - 'Idv: Phone OTP sends rate limited', - proofing_components: nil, - ) + expect(@analytics).to have_logged_event('Idv: Phone OTP sends rate limited') end it 'calls irs tracking event idv_phone_otp_sent_rate_limited' do From 11aa09dd66dc146d5e46e0d52e0289dbd51f9475 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 12:06:28 -0700 Subject: [PATCH 03/14] Update Idv::ForgotPasswordController spec to use have_logged_event --- .../idv/forgot_password_controller_spec.rb | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/spec/controllers/idv/forgot_password_controller_spec.rb b/spec/controllers/idv/forgot_password_controller_spec.rb index 4c7c0e0d454..14be1ba59de 100644 --- a/spec/controllers/idv/forgot_password_controller_spec.rb +++ b/spec/controllers/idv/forgot_password_controller_spec.rb @@ -11,17 +11,12 @@ before do stub_sign_in stub_analytics - - allow(@analytics).to receive(:track_event) end it 'tracks the event in analytics when referer is nil' do get :new - expect(@analytics).to have_received(:track_event).with( - 'IdV: forgot password visited', - proofing_components: nil, - ) + expect(@analytics).to have_logged_event('IdV: forgot password visited') end end @@ -32,7 +27,6 @@ stub_sign_in(user) stub_analytics stub_attempts_tracker - allow(@analytics).to receive(:track_event) end it 'tracks appropriate events' do @@ -42,10 +36,7 @@ post :update - expect(@analytics).to have_received(:track_event).with( - 'IdV: forgot password confirmed', - proofing_components: nil, - ) + expect(@analytics).to have_logged_event('IdV: forgot password confirmed') end end end From 48f150a7a116f1488135b414283a80d57179d08c Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 13:11:02 -0700 Subject: [PATCH 04/14] Update Idv::SessionsController spec to use have_logged_event --- app/services/analytics_events.rb | 9 +++++ .../idv/sessions_controller_spec.rb | 33 ++++++++++++------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index f31df0e763a..ad23cbe871a 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -3048,10 +3048,16 @@ def idv_session_error_visited( # @param [String] step # @param [String] location # @param [Idv::ProofingComponentsLogging] proofing_components User's current proofing components + # @param [boolean,nil] cancelled_enrollment Whether the user's IPP enrollment has been canceled + # @param [String,nil] enrollment_code IPP enrollment code + # @param [Integer,nil] enrollment_id ID of the associated IPP enrollment record # User started over idv def idv_start_over( step:, location:, + cancelled_enrollment: nil, + enrollment_code: nil, + enrollment_id: nil, proofing_components: nil, **extra ) @@ -3060,6 +3066,9 @@ def idv_start_over( step: step, location: location, proofing_components: proofing_components, + cancelled_enrollment: cancelled_enrollment, + enrollment_code: enrollment_code, + enrollment_id: enrollment_id, **extra, ) end diff --git a/spec/controllers/idv/sessions_controller_spec.rb b/spec/controllers/idv/sessions_controller_spec.rb index ea5331427dd..1e94b4d248f 100644 --- a/spec/controllers/idv/sessions_controller_spec.rb +++ b/spec/controllers/idv/sessions_controller_spec.rb @@ -2,7 +2,6 @@ RSpec.describe Idv::SessionsController do let(:user) { build(:user) } - let(:enrollment) { create(:in_person_enrollment, :pending, user: user) } before do stub_sign_in(user) @@ -47,21 +46,28 @@ 'IdV: start over', location: 'get_help', proofing_components: nil, + cancelled_enrollment: nil, + enrollment_code: nil, + enrollment_id: nil, step: 'first', ) end - it 'logs idv_start_over event with extra analytics attributes for barcode step' do - expect(@analytics).to receive(:track_event).with( - 'IdV: start over', - location: '', - proofing_components: nil, - step: 'barcode', - cancelled_enrollment: true, - enrollment_code: enrollment.enrollment_code, - enrollment_id: enrollment.id, - ) - delete :destroy, params: { step: 'barcode', location: '' } + context 'with in person enrollment' do + let(:user) { build(:user, :with_pending_in_person_enrollment) } + + it 'logs idv_start_over event with extra analytics attributes for barcode step' do + delete :destroy, params: { step: 'barcode', location: '' } + expect(@analytics).to have_logged_event( + 'IdV: start over', + location: '', + proofing_components: nil, + step: 'barcode', + cancelled_enrollment: true, + enrollment_code: user.pending_in_person_enrollment.enrollment_code, + enrollment_id: user.pending_in_person_enrollment.id, + ) + end end it 'redirect occurs to the start of identity verification' do @@ -88,6 +94,9 @@ 'IdV: start over', location: 'clear_and_start_over', proofing_components: nil, + cancelled_enrollment: nil, + enrollment_code: nil, + enrollment_id: nil, step: 'gpo_verify', ) end From e2e254a840d4ced3af249de72c19179ca675b43b Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 13:16:37 -0700 Subject: [PATCH 05/14] Update Idv::PhoneErrorsController spec to use have_logged_event --- .../idv/phone_errors_controller_spec.rb | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/spec/controllers/idv/phone_errors_controller_spec.rb b/spec/controllers/idv/phone_errors_controller_spec.rb index 4f4fe25ea87..11d85c95a70 100644 --- a/spec/controllers/idv/phone_errors_controller_spec.rb +++ b/spec/controllers/idv/phone_errors_controller_spec.rb @@ -1,6 +1,7 @@ require 'rails_helper' -RSpec.describe Idv::PhoneErrorsController do +RSpec.describe Idv::PhoneErrorsController, + allowed_extra_analytics: [:sample_bucket1, :sample_bucket2] do let(:ab_test_args) do { sample_bucket1: :sample_value1, sample_bucket2: :sample_value2 } end @@ -14,7 +15,6 @@ before do allow(subject).to receive(:remaining_submit_attempts).and_return(5) stub_analytics - allow(@analytics).to receive(:track_event) allow(subject).to receive(:ab_test_analytics_buckets).and_return(ab_test_args) if user @@ -59,13 +59,13 @@ end it 'logs an event' do - expect(@analytics).to receive(:track_event).with( + get action + expect(@analytics).to have_logged_event( 'IdV: phone error visited', hash_including( type: action, ), ) - get action end context 'fetch() request from form-steps-wait JS' do @@ -77,11 +77,8 @@ expect(response).to have_http_status(204) end it 'does not log an event' do - expect(@analytics).not_to receive(:track_event).with( - 'IdV: phone error visited', - anything, - ) get action + expect(@analytics).not_to have_logged_event('IdV: phone error visited') end end end @@ -158,7 +155,7 @@ it 'logs an event' do get action - expect(@analytics).to have_received(:track_event).with( + expect(@analytics).to have_logged_event( 'IdV: phone error visited', type: action, remaining_submit_attempts: 4, @@ -211,7 +208,7 @@ it 'logs an event' do get action - expect(@analytics).to have_received(:track_event).with( + expect(@analytics).to have_logged_event( 'IdV: phone error visited', type: action, remaining_submit_attempts: 4, @@ -243,7 +240,7 @@ get action - expect(@analytics).to have_received(:track_event).with( + expect(@analytics).to have_logged_event( 'IdV: phone error visited', type: action, limiter_expires_at: attempted_at + rate_limit_window, @@ -263,11 +260,8 @@ end it 'does not log an event' do - expect(@analytics).not_to receive(:track_event).with( - 'IdV: phone error visited', - anything, - ) get action + expect(@analytics).not_to have_logged_event('IdV: phone error visited') end end end From 28624f559fc873ddeffd3dd895cf1eb82bed1f4c Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 13:18:59 -0700 Subject: [PATCH 06/14] Update Idv::PleaseCallController spec to use have_logged_event --- spec/controllers/idv/please_call_controller_spec.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spec/controllers/idv/please_call_controller_spec.rb b/spec/controllers/idv/please_call_controller_spec.rb index 42aa071fd6c..7b7eca31d7d 100644 --- a/spec/controllers/idv/please_call_controller_spec.rb +++ b/spec/controllers/idv/please_call_controller_spec.rb @@ -34,14 +34,18 @@ expect(response).to redirect_to(idv_not_verified_url) end - it 'renders the show template' do + it 'logs an analytics event' do stub_analytics - expect(@analytics).to receive(:track_event).with( + get :show + + expect(@analytics).to have_logged_event( 'IdV: Verify please call visited', proofing_components: nil, ) + end + it 'renders the show template' do get :show expect(response).to render_template :show From afc59a916fece983a37deac71e4f579f32473ea3 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 13:22:06 -0700 Subject: [PATCH 07/14] Update Idv::OtpVerificationController spec to use have_logged_event --- spec/controllers/idv/otp_verification_controller_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/controllers/idv/otp_verification_controller_spec.rb b/spec/controllers/idv/otp_verification_controller_spec.rb index 508faf79ee3..56ded4da5ad 100644 --- a/spec/controllers/idv/otp_verification_controller_spec.rb +++ b/spec/controllers/idv/otp_verification_controller_spec.rb @@ -1,6 +1,7 @@ require 'rails_helper' -RSpec.describe Idv::OtpVerificationController do +RSpec.describe Idv::OtpVerificationController, + allowed_extra_analytics: [:sample_bucket1, :sample_bucket2] do let(:user) { create(:user) } let(:phone) { '2255555000' } @@ -28,7 +29,6 @@ before do stub_analytics stub_attempts_tracker - allow(@analytics).to receive(:track_event) allow(subject).to receive(:ab_test_analytics_buckets).and_return(ab_test_args) sign_in(user) @@ -81,7 +81,7 @@ it 'tracks an analytics event' do get :show - expect(@analytics).to have_received(:track_event).with( + expect(@analytics).to have_logged_event( 'IdV: phone confirmation otp visited', proofing_components: nil, ) @@ -184,7 +184,7 @@ **ab_test_args, } - expect(@analytics).to have_received(:track_event).with( + expect(@analytics).to have_logged_event( 'IdV: phone confirmation otp submitted', expected_result, ) From 5830d63cfbdd802640d6b2842a06a9af6bafe1b3 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 13:28:16 -0700 Subject: [PATCH 08/14] Update Idv::ResendOtpController spec to use have_logged_event --- app/services/analytics_events.rb | 7 ++++++- spec/controllers/idv/resend_otp_controller_spec.rb | 12 +++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index ad23cbe871a..d176fdba290 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -2646,6 +2646,7 @@ def idv_phone_confirmation_otp_rate_limit_sends(proofing_components: nil, **extr # @param [String] area_code area code of phone number # @param [Boolean] rate_limit_exceeded whether or not the rate limit was exceeded by this attempt # @param [Hash] telephony_response response from Telephony gem + # @param [String] phone_fingerprint Fingerprint string identifying phone number # @param [Idv::ProofingComponentsLogging] proofing_components User's current proofing components # The user resent an OTP during the IDV phone step def idv_phone_confirmation_otp_resent( @@ -2656,6 +2657,7 @@ def idv_phone_confirmation_otp_resent( area_code:, rate_limit_exceeded:, telephony_response:, + phone_fingerprint:, proofing_components: nil, **extra ) @@ -2668,6 +2670,7 @@ def idv_phone_confirmation_otp_resent( area_code: area_code, rate_limit_exceeded: rate_limit_exceeded, telephony_response: telephony_response, + phone_fingerprint: phone_fingerprint, proofing_components: proofing_components, **extra, ) @@ -3854,12 +3857,14 @@ def otp_delivery_selection( # Tracks if otp phone validation failed # @identity.idp.previous_event_name Twilio Phone Validation Failed # @param [String] error + # @param [string] message # @param [String] context # @param [String] country - def otp_phone_validation_failed(error:, context:, country:, **extra) + def otp_phone_validation_failed(error:, message:, context:, country:, **extra) track_event( 'Vendor Phone Validation failed', error: error, + message: message, context: context, country: country, **extra, diff --git a/spec/controllers/idv/resend_otp_controller_spec.rb b/spec/controllers/idv/resend_otp_controller_spec.rb index 48fab6d9a30..84e7d58233f 100644 --- a/spec/controllers/idv/resend_otp_controller_spec.rb +++ b/spec/controllers/idv/resend_otp_controller_spec.rb @@ -15,7 +15,6 @@ before do stub_analytics - allow(@analytics).to receive(:track_event) sign_in(user) stub_verify_steps_one_and_two(user) @@ -64,7 +63,7 @@ proofing_components: nil, } - expect(@analytics).to have_received(:track_event).with( + expect(@analytics).to have_logged_event( 'IdV: phone confirmation otp resent', expected_result, ) @@ -91,23 +90,22 @@ end before do - stub_analytics allow(Telephony).to receive(:send_confirmation_otp).and_return(telephony_response) end it 'tracks an analytics events' do - expect(@analytics).to receive(:track_event).ordered.with( + post :create + + expect(@analytics).to have_logged_event( 'IdV: phone confirmation otp resent', hash_including( success: false, telephony_response: telephony_response, ), ) - expect(@analytics).to receive(:track_event).ordered.with( + expect(@analytics).to have_logged_event( 'Vendor Phone Validation failed', telephony_error_analytics_hash ) - - post :create end end end From 57575e9f36ac390bf4ca2de96d38df8c37887e8b Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 13:57:21 -0700 Subject: [PATCH 09/14] Update Idv::ByMail::LetterEnqueuedController spec to use have_logged_event --- .../idv/by_mail/letter_enqueued_controller_spec.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/spec/controllers/idv/by_mail/letter_enqueued_controller_spec.rb b/spec/controllers/idv/by_mail/letter_enqueued_controller_spec.rb index f295c5038bb..5d3d662f568 100644 --- a/spec/controllers/idv/by_mail/letter_enqueued_controller_spec.rb +++ b/spec/controllers/idv/by_mail/letter_enqueued_controller_spec.rb @@ -11,16 +11,19 @@ end context 'user needs USPS address verification' do - it 'renders the show template' do + it 'logs an analytics event' do stub_analytics - expect(@analytics).to receive(:track_event).with( + get :show + + expect(@analytics).to have_logged_event( 'IdV: letter enqueued visited', proofing_components: nil, ) + end + it 'renders the show template' do get :show - expect(response).to render_template :show end end From b0000dee24f88405870f0a11d2656f4c702610d1 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 14:11:56 -0700 Subject: [PATCH 10/14] Set allowed_extra_analytics for Idv::ByMail::RequestLetterController spec --- spec/controllers/idv/by_mail/request_letter_controller_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/controllers/idv/by_mail/request_letter_controller_spec.rb b/spec/controllers/idv/by_mail/request_letter_controller_spec.rb index ddfe3cd5495..110e3a84b31 100644 --- a/spec/controllers/idv/by_mail/request_letter_controller_spec.rb +++ b/spec/controllers/idv/by_mail/request_letter_controller_spec.rb @@ -1,6 +1,7 @@ require 'rails_helper' -RSpec.describe Idv::ByMail::RequestLetterController, allowed_extra_analytics: [:*] do +RSpec.describe Idv::ByMail::RequestLetterController, + allowed_extra_analytics: [:sample_bucket1, :sample_bucket2] do let(:user) { create(:user) } let(:ab_test_args) do From c9981cd19d59f3105ad06275a608c0e62979a225 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 14:19:53 -0700 Subject: [PATCH 11/14] Update allowed_extra_analytics for Idv::PersonalKeyController spec --- app/services/analytics_events.rb | 17 ++++++++++++++++- .../idv/personal_key_controller_spec.rb | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index d176fdba290..9b5923a4da6 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -2557,8 +2557,10 @@ def idv_personal_key_downloaded(proofing_components: nil, **extra) # @param [Boolean] fraud_review_pending Profile is under review for fraud # @param [Boolean] fraud_rejection Profile is rejected due to fraud # @param [Boolean] in_person_verification_pending Profile is pending in-person verification + # @param [String] address_verification_method "phone" or "gpo" # User submitted IDV personal key page def idv_personal_key_submitted( + address_verification_method:, fraud_review_pending:, fraud_rejection:, in_person_verification_pending:, @@ -2568,6 +2570,7 @@ def idv_personal_key_submitted( ) track_event( 'IdV: personal key submitted', + address_verification_method: address_verification_method, in_person_verification_pending: in_person_verification_pending, deactivation_reason: deactivation_reason, fraud_review_pending: fraud_review_pending, @@ -2578,11 +2581,23 @@ def idv_personal_key_submitted( end # @param [Idv::ProofingComponentsLogging] proofing_components User's current proofing components + # @param [String] address_verification_method "phone" or "gpo" + # @param [Boolean,nil] in_person_verification_pending + # @param [Boolean] encrypted_profiles_missing True if user's session had no encrypted pii # User visited IDV personal key page - def idv_personal_key_visited(proofing_components: nil, **extra) + def idv_personal_key_visited( + proofing_components: nil, + address_verification_method: nil, + in_person_verification_pending: nil, + encrypted_profiles_missing: nil, + **extra + ) track_event( 'IdV: personal key visited', proofing_components: proofing_components, + address_verification_method: address_verification_method, + in_person_verification_pending: in_person_verification_pending, + encrypted_profiles_missing: encrypted_profiles_missing, **extra, ) end diff --git a/spec/controllers/idv/personal_key_controller_spec.rb b/spec/controllers/idv/personal_key_controller_spec.rb index 14b335d22b3..bccb4f01472 100644 --- a/spec/controllers/idv/personal_key_controller_spec.rb +++ b/spec/controllers/idv/personal_key_controller_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -RSpec.describe Idv::PersonalKeyController, allowed_extra_analytics: [:*] do +RSpec.describe Idv::PersonalKeyController do include FlowPolicyHelper include SamlAuthHelper include PersonalKeyValidator From 2053f5dd3e9b7b8a0d8e2ba6db386da15e1a05e5 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 14:42:54 -0700 Subject: [PATCH 12/14] Update Idv::PhoneController spec to use have_logged_event --- spec/controllers/idv/phone_controller_spec.rb | 61 +++++++++---------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/spec/controllers/idv/phone_controller_spec.rb b/spec/controllers/idv/phone_controller_spec.rb index d99e86bb5af..f2d72850cd2 100644 --- a/spec/controllers/idv/phone_controller_spec.rb +++ b/spec/controllers/idv/phone_controller_spec.rb @@ -53,7 +53,6 @@ stub_up_to(:verify_info, idv_session: subject.idv_session) stub_analytics stub_attempts_tracker - allow(@analytics).to receive(:track_event) end describe '#new' do @@ -123,13 +122,12 @@ before do stub_analytics - allow(@analytics).to receive(:track_event) end it 'logs an event showing that the user wants to choose a different number' do get :new, params: params - expect(@analytics).to have_received(:track_event).with( + expect(@analytics).to have_logged_event( 'IdV: use different phone number', step: step, proofing_components: nil, @@ -139,14 +137,13 @@ it 'shows phone form if async process times out and allows successful resubmission' do stub_analytics - allow(@analytics).to receive(:track_event) # setting the document capture session to a nonexistent uuid will trigger async # missing behavior subject.idv_session.idv_phone_step_document_capture_session_uuid = 'abc123' get :new - expect(@analytics).to have_received(:track_event).with('Proofing Address Result Missing') + expect(@analytics).to have_logged_event('Proofing Address Result Missing') expect(flash[:error]).to include t('idv.failure.timeout') expect(response).to render_template :new put :create, params: { idv_phone_form: { phone: good_phone, otp_delivery_preference: :sms } } @@ -313,7 +310,6 @@ phone: { improbable_phone: true }, otp_delivery_preference: { inclusion: true }, }, - pii_like_keypaths: [[:errors, :phone], [:error_details, :phone]], country_code: nil, area_code: nil, carrier: 'Test Mobile Carrier', @@ -324,9 +320,7 @@ **ab_test_args, } - expect(@analytics).to have_received(:track_event).with( - 'IdV: phone confirmation form', result - ) + expect(@analytics).to have_logged_event('IdV: phone confirmation form', result) expect(subject.idv_session.vendor_phone_confirmation).to be_falsy end end @@ -364,7 +358,6 @@ errors: {}, area_code: '703', country_code: 'US', - pii_like_keypaths: [[:errors, :phone], [:error_details, :phone]], carrier: 'Test Mobile Carrier', phone_type: :mobile, otp_delivery_preference: 'sms', @@ -373,9 +366,7 @@ **ab_test_args, } - expect(@analytics).to have_received(:track_event).with( - 'IdV: phone confirmation form', result - ) + expect(@analytics).to have_logged_event('IdV: phone confirmation form', result) end it 'updates the doc auth log for the user with verify_phone_submit step' do @@ -462,7 +453,6 @@ phone_fingerprint: Pii::Fingerprinter.fingerprint(proofing_phone.e164), country_code: proofing_phone.country, area_code: proofing_phone.area_code, - pii_like_keypaths: [[:errors, :phone], [:context, :stages, :address]], vendor: { vendor_name: 'AddressMock', exception: nil, @@ -473,32 +463,37 @@ proofing_components: nil, } - expect(@analytics).to receive(:track_event).ordered.with( + put :create, params: { idv_phone_form: { phone: good_phone } } + + expect(@analytics).to have_logged_event( 'IdV: phone confirmation form', hash_including(:success) ) - expect(@analytics).to receive(:track_event).ordered.with( - 'IdV: phone confirmation vendor', result - ) - put :create, params: { idv_phone_form: { phone: good_phone } } expect(response).to redirect_to idv_phone_path + get :new + + expect(@analytics).to have_logged_event( + 'IdV: phone confirmation vendor', result + ) end end it 'tracks that the hybrid handoff phone was used' do - expect(@analytics).to receive(:track_event).ordered.with( - 'IdV: phone confirmation form', hash_including(:success) - ) - expect(@analytics).to receive(:track_event).ordered.with( - 'IdV: phone confirmation vendor', hash_including(hybrid_handoff_phone_used: true) - ) - subject.idv_session.phone_for_mobile_flow = good_phone put :create, params: { idv_phone_form: { phone: good_phone } } expect(response).to redirect_to idv_phone_path + + expect(@analytics).to have_logged_event( + 'IdV: phone confirmation form', hash_including(:success) + ) + get :new + + expect(@analytics).to have_logged_event( + 'IdV: phone confirmation vendor', hash_including(hybrid_handoff_phone_used: true) + ) end context 'when verification fails' do @@ -539,7 +534,6 @@ errors: { phone: ['The phone number could not be verified.'], }, - pii_like_keypaths: [[:errors, :phone], [:context, :stages, :address]], vendor: { vendor_name: 'AddressMock', exception: nil, @@ -550,18 +544,19 @@ proofing_components: nil, } - expect(@analytics).to receive(:track_event).ordered.with( - 'IdV: phone confirmation form', hash_including(:success) - ) - put :create, params: { idv_phone_form: { phone: bad_phone } } - expect(@analytics).to receive(:track_event).ordered.with( - 'IdV: phone confirmation vendor', result + expect(@analytics).to have_logged_event( + 'IdV: phone confirmation form', hash_including(:success) ) + expect(response).to redirect_to idv_phone_path get :new + + expect(@analytics).to have_logged_event( + 'IdV: phone confirmation vendor', result + ) end context 'when the user is rate limited by submission' do From eba8ccf71939b9b6ec9ab76b90996e1ab45ef4ce Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 15:32:33 -0700 Subject: [PATCH 13/14] Update Idv cancel spec Limit some analytics assertions using hash_including. I feel like the spirit of the assertions is still being captured, despite not exhaustively checking every argument. --- spec/features/idv/cancel_spec.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/spec/features/idv/cancel_spec.rb b/spec/features/idv/cancel_spec.rb index 87b3c6f7593..df6e37b87d3 100644 --- a/spec/features/idv/cancel_spec.rb +++ b/spec/features/idv/cancel_spec.rb @@ -124,8 +124,10 @@ expect(fake_analytics).to have_logged_event( 'IdV: cancellation go back', - step: 'ssn', - proofing_components: { document_check: 'mock', document_type: 'state_id' }, + hash_including( + proofing_components: { document_check: 'mock', document_type: 'state_id' }, + step: 'ssn', + ), ) click_link t('links.cancel') @@ -133,9 +135,10 @@ expect(fake_analytics).to have_logged_event( 'IdV: start over', - location: nil, - proofing_components: { document_check: 'mock', document_type: 'state_id' }, - step: 'ssn', + hash_including( + proofing_components: { document_check: 'mock', document_type: 'state_id' }, + step: 'ssn', + ), ) complete_doc_auth_steps_before_ssn_step @@ -145,8 +148,10 @@ expect(fake_analytics).to have_logged_event( 'IdV: cancellation confirmed', - step: 'ssn', - proofing_components: { document_check: 'mock', document_type: 'state_id' }, + hash_including( + step: 'ssn', + proofing_components: { document_check: 'mock', document_type: 'state_id' }, + ), ) end end From ce2e51b04ec39cb70ef7571de60b402236b36384 Mon Sep 17 00:00:00 2001 From: Matt Hinz Date: Mon, 25 Mar 2024 15:33:35 -0700 Subject: [PATCH 14/14] [skip changelog]