diff --git a/app/controllers/concerns/idv/verify_info_concern.rb b/app/controllers/concerns/idv/verify_info_concern.rb index 43dbe2b92c7..0e10a12aa91 100644 --- a/app/controllers/concerns/idv/verify_info_concern.rb +++ b/app/controllers/concerns/idv/verify_info_concern.rb @@ -112,14 +112,14 @@ def idv_failure_log_rate_limited(rate_limit_type) def idv_failure_log_error analytics.idv_doc_auth_exception_visited( step_name: STEP_NAME, - remaining_attempts: resolution_rate_limiter.remaining_count, + remaining_submit_attempts: resolution_rate_limiter.remaining_count, ) end def idv_failure_log_warning analytics.idv_doc_auth_warning_visited( step_name: STEP_NAME, - remaining_attempts: resolution_rate_limiter.remaining_count, + remaining_submit_attempts: resolution_rate_limiter.remaining_count, ) end diff --git a/app/controllers/idv/phone_errors_controller.rb b/app/controllers/idv/phone_errors_controller.rb index 8c6cdfd7fb3..64bcb863185 100644 --- a/app/controllers/idv/phone_errors_controller.rb +++ b/app/controllers/idv/phone_errors_controller.rb @@ -10,7 +10,7 @@ class PhoneErrorsController < ApplicationController before_action :ignore_form_step_wait_requests def warning - @remaining_attempts = rate_limiter.remaining_count + @remaining_submit_attempts = rate_limiter.remaining_count if idv_session.previous_phone_step_params @phone = idv_session.previous_phone_step_params[:phone] @@ -21,12 +21,12 @@ def warning end def timeout - @remaining_step_attempts = rate_limiter.remaining_count + @remaining_submit_attempts = rate_limiter.remaining_count track_event(type: :timeout) end def jobfail - @remaining_attempts = rate_limiter.remaining_count + @remaining_submit_attempts = rate_limiter.remaining_count track_event(type: :jobfail) end @@ -63,7 +63,7 @@ def track_event(type:) if type == :failure attributes[:limiter_expires_at] = @expires_at else - attributes[:remaining_attempts] = @remaining_attempts + attributes[:remaining_submit_attempts] = @remaining_submit_attempts end analytics.idv_phone_error_visited(**attributes) diff --git a/app/controllers/idv/session_errors_controller.rb b/app/controllers/idv/session_errors_controller.rb index 7fbbc145f75..8c0dd5a9f62 100644 --- a/app/controllers/idv/session_errors_controller.rb +++ b/app/controllers/idv/session_errors_controller.rb @@ -20,7 +20,7 @@ def warning ) @step_indicator_steps = step_indicator_steps - @remaining_attempts = rate_limiter.remaining_count + @remaining_submit_attempts = rate_limiter.remaining_count log_event(based_on_limiter: rate_limiter) end @@ -93,7 +93,7 @@ def log_event(based_on_limiter: nil) type: params[:action], } - options[:attempts_remaining] = based_on_limiter.remaining_count if based_on_limiter + options[:submit_attempts_remaining] = based_on_limiter.remaining_count if based_on_limiter analytics.idv_session_error_visited(**options) end diff --git a/app/forms/gpo_verify_form.rb b/app/forms/gpo_verify_form.rb index cb19d512430..5ef87a0f890 100644 --- a/app/forms/gpo_verify_form.rb +++ b/app/forms/gpo_verify_form.rb @@ -41,7 +41,7 @@ def submit enqueued_at: gpo_confirmation_code&.code_sent_at, which_letter: which_letter, letter_count: letter_count, - attempts: attempts, + submit_attempts: submit_attempts, pii_like_keypaths: [[:errors, :otp], [:error_details, :otp]], pending_in_person_enrollment: !!pending_profile&.in_person_enrollment&.pending?, fraud_check_failed: fraud_check_failed, @@ -76,7 +76,7 @@ def letter_count pending_profile&.gpo_confirmation_codes&.count end - def attempts + def submit_attempts RateLimiter.new(user: user, rate_limit_type: :verify_gpo_key).attempts end diff --git a/app/forms/idv/api_image_upload_form.rb b/app/forms/idv/api_image_upload_form.rb index 03f3d7413e3..37f2bd30269 100644 --- a/app/forms/idv/api_image_upload_form.rb +++ b/app/forms/idv/api_image_upload_form.rb @@ -144,10 +144,10 @@ def doc_side_classification(client_response) def extra_attributes return @extra_attributes if defined?(@extra_attributes) && - @extra_attributes&.dig('attempts') == attempts + @extra_attributes&.dig('submit_attempts') == submit_attempts @extra_attributes = { - attempts: attempts, - remaining_attempts: remaining_attempts, + submit_attempts: submit_attempts, + remaining_submit_attempts: remaining_submit_attempts, user_id: user_uuid, pii_like_keypaths: DocPiiForm.pii_like_keypaths, flow_path: params[:flow_path], @@ -186,11 +186,11 @@ def selfie_image_fingerprint end end - def remaining_attempts + def remaining_submit_attempts rate_limiter.remaining_count if document_capture_session end - def attempts + def submit_attempts rate_limiter.attempts if document_capture_session end diff --git a/app/javascript/packages/document-capture/components/acuant-capture.tsx b/app/javascript/packages/document-capture/components/acuant-capture.tsx index a9f22662c2b..53e002c57ed 100644 --- a/app/javascript/packages/document-capture/components/acuant-capture.tsx +++ b/app/javascript/packages/document-capture/components/acuant-capture.tsx @@ -53,9 +53,9 @@ interface ImageAnalyticsPayload { */ source: ImageSource; /** - * Total number of attempts at this point + * Total number of attempts to capture / upload an image at this point */ - attempt?: number; + captureAttempts?: number; /** * Size of the image in bytes */ @@ -334,7 +334,7 @@ function AcuantCapture( useMemo(() => setOwnErrorMessage(null), [value]); const { isMobile } = useContext(DeviceContext); const { t, formatHTML } = useI18n(); - const [attempt, incrementAttempt] = useCounter(1); + const [captureAttempts, incrementCaptureAttempts] = useCounter(1); const [acuantFailureCookie, setAcuantFailureCookie, refreshAcuantFailureCookie] = useCookie('AcuantCameraHasFailed'); const [imageCaptureText, setImageCaptureText] = useState(''); @@ -384,10 +384,10 @@ function AcuantCapture( >(payload: P): P { const enhancedPayload = { ...payload, - attempt, + captureAttempts, acuantCaptureMode: payload.source === 'upload' ? null : acuantCaptureMode, }; - incrementAttempt(); + incrementCaptureAttempts(); return enhancedPayload; } @@ -516,7 +516,7 @@ function AcuantCapture( } function onSelfieCaptureSuccess({ image }: { image: string }) { - trackEvent('idv_sdk_selfie_image_added', { attempt }); + trackEvent('idv_sdk_selfie_image_added', { captureAttempts }); onChangeAndResetError(image); onResetFailedCaptureAttempts(); diff --git a/app/javascript/packages/document-capture/components/document-capture-review-issues.tsx b/app/javascript/packages/document-capture/components/document-capture-review-issues.tsx index 4a08856d737..cf67436e688 100644 --- a/app/javascript/packages/document-capture/components/document-capture-review-issues.tsx +++ b/app/javascript/packages/document-capture/components/document-capture-review-issues.tsx @@ -18,7 +18,7 @@ import type { ReviewIssuesStepValue } from './review-issues-step'; interface DocumentCaptureReviewIssuesProps extends FormStepComponentProps { isFailedDocType: boolean; isFailedSelfieLivenessOrQuality: boolean; - remainingAttempts: number; + remainingSubmitAttempts: number; captureHints: boolean; hasDismissed: boolean; } @@ -26,7 +26,7 @@ interface DocumentCaptureReviewIssuesProps extends FormStepComponentProps undefined, unknownFieldErrors = [], @@ -52,7 +52,7 @@ function DocumentCaptureReviewIssues({ void; unknownFieldErrors: FormStepError<{ front: string; back: string }>[]; hasDismissed: boolean; @@ -40,7 +40,7 @@ function DocumentCaptureWarning({ isFailedDocType, isFailedResult, isFailedSelfieLivenessOrQuality, - remainingAttempts, + remainingSubmitAttempts, actionOnClick, unknownFieldErrors = [], hasDismissed, @@ -66,7 +66,7 @@ function DocumentCaptureWarning({ trackEvent('IdV: warning shown', { location: 'doc_auth_review_issues', - remaining_attempts: remainingAttempts, + remaining_submit_attempts: remainingSubmitAttempts, heading, subheading: subheadingText, error_message_displayed: errorMessageDisplayed, @@ -93,7 +93,7 @@ function DocumentCaptureWarning({

)} diff --git a/app/javascript/packages/document-capture/components/document-capture.tsx b/app/javascript/packages/document-capture/components/document-capture.tsx index cb2f3d813e5..82daac11372 100644 --- a/app/javascript/packages/document-capture/components/document-capture.tsx +++ b/app/javascript/packages/document-capture/components/document-capture.tsx @@ -112,7 +112,7 @@ function DocumentCapture({ onStepChange = () => {} }: DocumentCaptureProps) { form: submissionError instanceof UploadFormEntriesError ? withProps({ - remainingAttempts: submissionError.remainingAttempts, + remainingSubmitAttempts: submissionError.remainingSubmitAttempts, isFailedResult: submissionError.isFailedResult, isFailedDocType: submissionError.isFailedDocType, isFailedSelfieLivenessOrQuality: diff --git a/app/javascript/packages/document-capture/components/review-issues-step.tsx b/app/javascript/packages/document-capture/components/review-issues-step.tsx index 5e2c7f82e2e..e44a2c0c163 100644 --- a/app/javascript/packages/document-capture/components/review-issues-step.tsx +++ b/app/javascript/packages/document-capture/components/review-issues-step.tsx @@ -36,7 +36,7 @@ export interface ReviewIssuesStepValue { } interface ReviewIssuesStepProps extends FormStepComponentProps { - remainingAttempts?: number; + remainingSubmitAttempts?: number; isFailedResult?: boolean; isFailedDocType?: boolean; isFailedSelfieLivenessOrQuality?: boolean; @@ -53,7 +53,7 @@ function ReviewIssuesStep({ onError = () => {}, registerField = () => undefined, toPreviousStep = () => undefined, - remainingAttempts = Infinity, + remainingSubmitAttempts = Infinity, isFailedResult = false, isFailedDocType = false, isFailedSelfieLivenessOrQuality = false, @@ -62,7 +62,7 @@ function ReviewIssuesStep({ failedImageFingerprints = { front: [], back: [] }, }: ReviewIssuesStepProps) { const { trackEvent } = useContext(AnalyticsContext); - const [hasDismissed, setHasDismissed] = useState(remainingAttempts === Infinity); + const [hasDismissed, setHasDismissed] = useState(remainingSubmitAttempts === Infinity); const { onPageTransition, changeStepCanComplete } = useContext(FormStepsContext); const [skipWarning, setSkipWarning] = useState(false); useDidUpdateEffect(onPageTransition, [hasDismissed]); @@ -121,7 +121,7 @@ function ReviewIssuesStep({ isFailedDocType={isFailedDocType} isFailedResult={isFailedResult} isFailedSelfieLivenessOrQuality={isFailedSelfieLivenessOrQuality} - remainingAttempts={remainingAttempts} + remainingSubmitAttempts={remainingSubmitAttempts} unknownFieldErrors={unknownFieldErrors} actionOnClick={onWarningPageDismissed} hasDismissed={false} @@ -133,7 +133,7 @@ function ReviewIssuesStep({ { unknownFieldErrors: FormStepError<{ front: string; back: string }>[]; isFailedDocType: boolean; isFailedSelfieLivenessOrQuality: boolean; - remainingAttempts: number; + remainingSubmitAttempts: number; altFailedDocTypeMsg?: string | null; altIsFailedSelfieDontIncludeAttempts?: boolean; hasDismissed: boolean; @@ -44,7 +44,7 @@ function UnknownError({ unknownFieldErrors = [], isFailedDocType = false, isFailedSelfieLivenessOrQuality = false, - remainingAttempts, + remainingSubmitAttempts, altFailedDocTypeMsg = null, altIsFailedSelfieDontIncludeAttempts = false, hasDismissed, @@ -72,10 +72,10 @@ function UnknownError({ } if (isFailedDocType && err) { return ( -

+

{err.message}{' '}

); @@ -87,7 +87,7 @@ function UnknownError({

{!altIsFailedSelfieDontIncludeAttempts && ( )}

diff --git a/app/javascript/packages/document-capture/context/upload.tsx b/app/javascript/packages/document-capture/context/upload.tsx index 5a80aa66c1d..2ad859295ff 100644 --- a/app/javascript/packages/document-capture/context/upload.tsx +++ b/app/javascript/packages/document-capture/context/upload.tsx @@ -78,7 +78,7 @@ export interface UploadErrorResponse { /** * Number of remaining doc capture attempts for user. */ - remaining_attempts?: number; + remaining_submit_attempts?: number; /** * Boolean to decide if capture hints should be shown with error. diff --git a/app/javascript/packages/document-capture/services/upload.ts b/app/javascript/packages/document-capture/services/upload.ts index f124210d35d..27b18db733b 100644 --- a/app/javascript/packages/document-capture/services/upload.ts +++ b/app/javascript/packages/document-capture/services/upload.ts @@ -36,7 +36,7 @@ export class UploadFormEntryError extends FormError { export class UploadFormEntriesError extends FormError { formEntryErrors: UploadFormEntryError[] = []; - remainingAttempts = Infinity; + remainingSubmitAttempts = Infinity; isFailedResult = false; @@ -112,8 +112,8 @@ const upload: UploadImplementation = async function (payload, { method = 'POST', error.formEntryErrors = result.errors.map(toFormEntryError); } - if (result.remaining_attempts) { - error.remainingAttempts = result.remaining_attempts; + if (result.remaining_submit_attempts) { + error.remainingSubmitAttempts = result.remaining_submit_attempts; } if (result.ocr_pii) { diff --git a/app/presenters/image_upload_response_presenter.rb b/app/presenters/image_upload_response_presenter.rb index 3078377f680..d2b7ceab314 100644 --- a/app/presenters/image_upload_response_presenter.rb +++ b/app/presenters/image_upload_response_presenter.rb @@ -20,8 +20,8 @@ def errors end end - def remaining_attempts - @form_response.to_h[:remaining_attempts] + def remaining_submit_attempts + @form_response.to_h[:remaining_submit_attempts] end def status @@ -40,9 +40,9 @@ def as_json(*) else json = { success: false, errors: errors, - remaining_attempts: remaining_attempts, + remaining_submit_attempts: remaining_submit_attempts, doc_type_supported: doc_type_supported? } - if remaining_attempts&.zero? + if remaining_submit_attempts&.zero? if @form_response.extra[:flow_path] == 'standard' json[:redirect] = idv_session_errors_rate_limited_url else # hybrid flow on mobile diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index d97eb786034..b6d4ab98075 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -678,7 +678,8 @@ def idv_address_visit # @param [Boolean] acuant_sdk_upgrade_a_b_testing_enabled # @param [String] acuant_version # @param [Boolean] assessment - # @param [Integer] attempt number of attempts + # @param [Integer] captureAttempts number of attempts to capture / upload an image + # (previously called "attempt") # @param [String] documentType # @param [Integer] dpi dots per inch of image # @param [Integer] failedImageResubmission @@ -705,7 +706,7 @@ def idv_back_image_added( acuant_sdk_upgrade_a_b_testing_enabled:, acuant_version:, assessment:, - attempt:, + captureAttempts:, documentType:, dpi:, failedImageResubmission:, @@ -733,7 +734,7 @@ def idv_back_image_added( acuant_sdk_upgrade_a_b_testing_enabled: acuant_sdk_upgrade_a_b_testing_enabled, acuant_version: acuant_version, assessment: assessment, - attempt: attempt, + captureAttempts: captureAttempts, documentType: documentType, dpi: dpi, failedImageResubmission: failedImageResubmission, @@ -893,14 +894,14 @@ def idv_doc_auth_document_capture_visited(**extra) end # @param [String] step_name which step the user was on - # @param [Integer] remaining_attempts how many attempts the user has left before - # we rate limit them + # @param [Integer] remaining_submit_attempts how many attempts the user has left before + # we rate limit them (previously called "remaining_attempts") # The user visited an error page due to an encountering an exception talking to a proofing vendor - def idv_doc_auth_exception_visited(step_name:, remaining_attempts:, **extra) + def idv_doc_auth_exception_visited(step_name:, remaining_submit_attempts:, **extra) track_event( 'IdV: doc auth exception visited', step_name: step_name, - remaining_attempts: remaining_attempts, + remaining_submit_attempts: remaining_submit_attempts, **extra, ) end @@ -968,8 +969,8 @@ def idv_doc_auth_ssn_visited(**extra) # @param [Boolean] success # @param [Hash] errors - # @param [Integer] attempts - # @param [Integer] remaining_attempts + # @param [Integer] submit_attempts (previously called "attempts") + # @param [Integer] remaining_submit_attempts (previously called "remaining_attempts") # @param [String] user_id # @param [String] flow_path # @param [String] front_image_fingerprint Fingerprint of front image data @@ -978,9 +979,9 @@ def idv_doc_auth_ssn_visited(**extra) def idv_doc_auth_submitted_image_upload_form( success:, errors:, - remaining_attempts:, + remaining_submit_attempts:, flow_path:, - attempts: nil, + submit_attempts: nil, user_id: nil, front_image_fingerprint: nil, back_image_fingerprint: nil, @@ -990,8 +991,8 @@ def idv_doc_auth_submitted_image_upload_form( 'IdV: doc auth image upload form submitted', success: success, errors: errors, - attempts: attempts, - remaining_attempts: remaining_attempts, + submit_attempts: submit_attempts, + remaining_submit_attempts: remaining_submit_attempts, user_id: user_id, flow_path: flow_path, front_image_fingerprint: front_image_fingerprint, @@ -1008,8 +1009,8 @@ def idv_doc_auth_submitted_image_upload_form( # @param [String] state # @param [String] state_id_type # @param [Boolean] async - # @param [Integer] attempts - # @param [Integer] remaining_attempts + # @param [Integer] submit_attempts (previously called "attempts") + # @param [Integer] remaining_submit_attempts (previously called "remaining_attempts") # @param [Hash] client_image_metrics # @param [String] flow_path # @param [Float] vendor_request_time_in_ms Time it took to upload images & get a response. @@ -1054,8 +1055,8 @@ def idv_doc_auth_submitted_image_upload_vendor( state:, state_id_type:, async:, - attempts:, - remaining_attempts:, + submit_attempts:, + remaining_submit_attempts:, client_image_metrics:, flow_path:, billed: nil, @@ -1092,8 +1093,8 @@ def idv_doc_auth_submitted_image_upload_vendor( state:, state_id_type:, async:, - attempts:, - remaining_attempts:, + submit_attempts: submit_attempts, + remaining_submit_attempts: remaining_submit_attempts, client_image_metrics:, flow_path:, vendor_request_time_in_ms:, @@ -1123,7 +1124,7 @@ def idv_doc_auth_submitted_image_upload_vendor( # @param [Boolean] success # @param [Hash] errors # @param [String] user_id - # @param [Integer] remaining_attempts + # @param [Integer] remaining_submit_attempts (previously called "remaining_attempts") # @param [Hash] pii_like_keypaths # @param [String] flow_path # @param [String] front_image_fingerprint Fingerprint of front image data @@ -1133,7 +1134,7 @@ def idv_doc_auth_submitted_image_upload_vendor( def idv_doc_auth_submitted_pii_validation( success:, errors:, - remaining_attempts:, + remaining_submit_attempts:, pii_like_keypaths:, flow_path:, user_id: nil, @@ -1147,7 +1148,7 @@ def idv_doc_auth_submitted_pii_validation( success: success, errors: errors, user_id: user_id, - remaining_attempts: remaining_attempts, + remaining_submit_attempts: remaining_submit_attempts, pii_like_keypaths: pii_like_keypaths, flow_path: flow_path, front_image_fingerprint: front_image_fingerprint, @@ -1172,13 +1173,13 @@ def idv_doc_auth_verify_visited(**extra) end # @param [String] step_name - # @param [Integer] remaining_attempts + # @param [Integer] remaining_submit_attempts (previously called "remaining_attempts") # The user was sent to a warning page during the IDV flow - def idv_doc_auth_warning_visited(step_name:, remaining_attempts:, **extra) + def idv_doc_auth_warning_visited(step_name:, remaining_submit_attempts:, **extra) track_event( 'IdV: doc auth warning visited', step_name: step_name, - remaining_attempts: remaining_attempts, + remaining_submit_attempts: remaining_submit_attempts, **extra, ) end @@ -1323,7 +1324,8 @@ def idv_forgot_password_confirmed(proofing_components: nil, **extra) # @param [Boolean] acuant_sdk_upgrade_a_b_testing_enabled # @param [String] acuant_version # @param [Boolean] assessment - # @param [Integer] attempt number of attempts + # @param [Integer] captureAttempts number of attempts to capture / upload an image + # (previously called "attempt") # @param [String] documentType # @param [Integer] dpi dots per inch of image # @param [Integer] failedImageResubmission @@ -1350,7 +1352,7 @@ def idv_front_image_added( acuant_sdk_upgrade_a_b_testing_enabled:, acuant_version:, assessment:, - attempt:, + captureAttempts:, documentType:, dpi:, failedImageResubmission:, @@ -1378,7 +1380,7 @@ def idv_front_image_added( acuant_sdk_upgrade_a_b_testing_enabled: acuant_sdk_upgrade_a_b_testing_enabled, acuant_version: acuant_version, assessment: assessment, - attempt: attempt, + captureAttempts: captureAttempts, documentType: documentType, dpi: dpi, failedImageResubmission: failedImageResubmission, @@ -2698,14 +2700,15 @@ def idv_phone_confirmation_vendor_submitted( # @param ['warning','jobfail','failure'] type # @param [Time] limiter_expires_at when the rate limit expires - # @param [Integer] remaining_attempts number of attempts remaining + # @param [Integer] remaining_submit_attempts number of submit attempts remaining + # (previously called "remaining_attempts") # @param [Idv::ProofingComponentsLogging] proofing_components User's current proofing components # When a user gets an error during the phone finder flow of IDV def idv_phone_error_visited( type:, proofing_components: nil, limiter_expires_at: nil, - remaining_attempts: nil, + remaining_submit_attempts: nil, **extra ) track_event( @@ -2714,7 +2717,7 @@ def idv_phone_error_visited( type: type, proofing_components: proofing_components, limiter_expires_at: limiter_expires_at, - remaining_attempts: remaining_attempts, + remaining_submit_attempts: remaining_submit_attempts, **extra, }.compact, ) @@ -2813,11 +2816,14 @@ def idv_request_letter_visited( ) end - # @param [Integer] attempt number of attempts + # @param [Integer] captureAttempts number of attempts to capture / upload an image + # (previously called "attempt") # User captured and approved of their selfie - def idv_sdk_selfie_image_added(attempt:, **extra) - track_event(:idv_sdk_selfie_image_added, attempt: attempt, **extra) + # rubocop:disable Naming/VariableName,Naming/MethodParameterName + def idv_sdk_selfie_image_added(captureAttempts:, **extra) + track_event(:idv_sdk_selfie_image_added, captureAttempts: captureAttempts, **extra) end + # rubocop:enable Naming/VariableName,Naming/MethodParameterName # User closed the SDK for taking a selfie without submitting a photo def idv_sdk_selfie_image_capture_closed_without_photo(**extra) @@ -2843,7 +2849,8 @@ def idv_sdk_selfie_image_capture_opened(**extra) track_event(:idv_sdk_selfie_image_capture_opened, **extra) end - # @param [Integer] attempt number of attempts + # @param [Integer] captureAttempts number of attempts to capture / upload an image + # (previously called "attempt") # @param [Integer] failedImageResubmission # @param [String] fingerprint fingerprint of the image added # @param [String] flow_path whether the user is in the hybrid or standard flow @@ -2855,7 +2862,7 @@ def idv_sdk_selfie_image_capture_opened(**extra) # User uploaded a selfie using the file picker # rubocop:disable Naming/VariableName,Naming/MethodParameterName def idv_selfie_image_file_uploaded( - attempt:, + captureAttempts:, failedImageResubmission:, fingerprint:, flow_path:, @@ -2868,7 +2875,7 @@ def idv_selfie_image_file_uploaded( ) track_event( :idv_selfie_image_file_uploaded, - attempt: attempt, + captureAttempts: captureAttempts, failedImageResubmission: failedImageResubmission, fingerprint: fingerprint, flow_path: flow_path, @@ -2883,16 +2890,16 @@ def idv_selfie_image_file_uploaded( # Tracks when the user visits one of the the session error pages. # @param [String] type - # @param [Integer,nil] attempts_remaining + # @param [Integer,nil] submit_attempts_remaining (previously called "attempts_remaining") def idv_session_error_visited( type:, - attempts_remaining: nil, + submit_attempts_remaining: nil, **extra ) track_event( 'IdV: session error visited', type: type, - attempts_remaining: attempts_remaining, + submit_attempts_remaining: submit_attempts_remaining, **extra, ) end @@ -2952,7 +2959,8 @@ def idv_usps_auth_token_refresh_job_started(**extra) # @param [DateTime] enqueued_at When was this letter enqueued # @param [Integer] which_letter Sorted by enqueue time, which letter had this code # @param [Integer] letter_count How many letters did the user enqueue for this profile - # @param [Integer] attempts Number of attempts to enter a correct code + # @param [Integer] submit_attempts Number of attempts to enter a correct code + # (previously called "attempts") # @param [Boolean] pending_in_person_enrollment # @param [Boolean] fraud_check_failed # @see Reporting::IdentityVerificationReport#query This event is used by the identity verification @@ -2965,7 +2973,7 @@ def idv_verify_by_mail_enter_code_submitted( enqueued_at:, which_letter:, letter_count:, - attempts:, + submit_attempts:, pending_in_person_enrollment:, fraud_check_failed:, **extra @@ -2978,7 +2986,7 @@ def idv_verify_by_mail_enter_code_submitted( enqueued_at: enqueued_at, which_letter: which_letter, letter_count: letter_count, - attempts: attempts, + submit_attempts: submit_attempts, pending_in_person_enrollment: pending_in_person_enrollment, fraud_check_failed: fraud_check_failed, **extra, @@ -3045,7 +3053,7 @@ def idv_warning_action_triggered( # @param [String] flow_path # @param [String] heading # @param [String] location - # @param [Integer] remaining_attempts + # @param [Integer] remaining_submit_attempts (previously called "remaining_attempts") # @param [String] subheading # @param [Boolean] use_alternate_sdk def idv_warning_shown( @@ -3055,7 +3063,7 @@ def idv_warning_shown( flow_path:, heading:, location:, - remaining_attempts:, + remaining_submit_attempts:, subheading:, use_alternate_sdk:, **_extra @@ -3068,7 +3076,7 @@ def idv_warning_shown( flow_path: flow_path, heading: heading, location: location, - remaining_attempts: remaining_attempts, + remaining_submit_attempts: remaining_submit_attempts, subheading: subheading, use_alternate_sdk: use_alternate_sdk, ) diff --git a/app/views/idv/phone_errors/warning.html.erb b/app/views/idv/phone_errors/warning.html.erb index 58176958201..1d83f972eed 100644 --- a/app/views/idv/phone_errors/warning.html.erb +++ b/app/views/idv/phone_errors/warning.html.erb @@ -28,7 +28,7 @@

- <%= t('idv.failure.phone.warning.attempts_html', count: @remaining_attempts) %> + <%= t('idv.failure.phone.warning.attempts_html', count: @remaining_submit_attempts) %>

diff --git a/app/views/idv/session_errors/warning.html.erb b/app/views/idv/session_errors/warning.html.erb index b7b32eead64..97f32940ff1 100644 --- a/app/views/idv/session_errors/warning.html.erb +++ b/app/views/idv/session_errors/warning.html.erb @@ -13,7 +13,7 @@ <% c.with_header { t('idv.warning.sessions.heading') } %>

<%= t('idv.failure.sessions.warning') %>

-

<%= t('idv.warning.attempts_html', count: @remaining_attempts) %>

+

<%= t('idv.warning.attempts_html', count: @remaining_submit_attempts) %>

<% c.with_action_button( action: ->(**tag_options, &block) { link_to(@try_again_path, **tag_options, &block) }, diff --git a/spec/controllers/idv/by_mail/enter_code_controller_spec.rb b/spec/controllers/idv/by_mail/enter_code_controller_spec.rb index 985d1628185..01a45d74369 100644 --- a/spec/controllers/idv/by_mail/enter_code_controller_spec.rb +++ b/spec/controllers/idv/by_mail/enter_code_controller_spec.rb @@ -195,7 +195,7 @@ enqueued_at: pending_profile.gpo_confirmation_codes.last.code_sent_at, which_letter: 1, letter_count: 1, - attempts: 1, + submit_attempts: 1, ) event_count = user.events.where(event_type: :account_verified, ip: '0.0.0.0'). where(disavowal_token_fingerprint: nil).count @@ -240,7 +240,7 @@ enqueued_at: pending_profile.gpo_confirmation_codes.last.code_sent_at, which_letter: 1, letter_count: 1, - attempts: 1, + submit_attempts: 1, ) expect(response).to redirect_to(idv_personal_key_url) end @@ -271,7 +271,7 @@ enqueued_at: pending_profile.gpo_confirmation_codes.last.code_sent_at, which_letter: 1, letter_count: 1, - attempts: 1, + submit_attempts: 1, ) event_count = user.events.where(event_type: :account_verified, ip: '0.0.0.0'). where(disavowal_token_fingerprint: nil).count @@ -299,7 +299,7 @@ enqueued_at: user.pending_profile.gpo_confirmation_codes.last.code_sent_at, which_letter: 1, letter_count: 1, - attempts: 1, + submit_attempts: 1, ) expect(response).to redirect_to(idv_personal_key_url) @@ -332,7 +332,7 @@ enqueued_at: user.pending_profile.gpo_confirmation_codes.last.code_sent_at, which_letter: 1, letter_count: 1, - attempts: 1, + submit_attempts: 1, ) expect(response).to redirect_to(idv_personal_key_url) @@ -363,7 +363,7 @@ enqueued_at: nil, which_letter: nil, letter_count: 1, - attempts: 1, + submit_attempts: 1, error_details: { otp: { confirmation_code_incorrect: true } }, ) expect(response).to redirect_to(idv_verify_by_mail_enter_code_url) @@ -398,7 +398,7 @@ enqueued_at: nil, which_letter: nil, letter_count: 1, - attempts: 1, + submit_attempts: 1, error_details: { otp: { confirmation_code_incorrect: true } }, } post(:create, params: { gpo_verify_form: { otp: bad_otp } }) @@ -408,7 +408,7 @@ **analytics_args, ) - analytics_args[:attempts] = 2 + analytics_args[:submit_attempts] = 2 expect(@analytics).to have_logged_event( 'IdV: enter verify by mail code submitted', diff --git a/spec/controllers/idv/image_uploads_controller_spec.rb b/spec/controllers/idv/image_uploads_controller_spec.rb index d657d0731a4..1c682c6901a 100644 --- a/spec/controllers/idv/image_uploads_controller_spec.rb +++ b/spec/controllers/idv/image_uploads_controller_spec.rb @@ -66,8 +66,8 @@ front: { blank: true }, }, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', ).exactly(0).times @@ -127,8 +127,8 @@ front: { not_a_file: true }, }, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: nil, @@ -190,7 +190,7 @@ end context 'throttling' do - it 'returns remaining_attempts with error' do + it 'returns remaining_submit_attempts with error' do params.delete(:front) RateLimiter.new(rate_limit_type: :idv_doc_auth, user: user).increment! @@ -201,7 +201,7 @@ { success: false, errors: [{ field: 'front', message: 'Please fill in this field.' }], - remaining_attempts: RateLimiter.max_attempts(:idv_doc_auth) - 2, + remaining_submit_attempts: RateLimiter.max_attempts(:idv_doc_auth) - 2, result_failed: false, ocr_pii: nil, doc_type_supported: true, @@ -217,7 +217,7 @@ success: false, errors: [{ field: 'limit', message: 'We couldn’t verify your ID' }], redirect: redirect_url, - remaining_attempts: 0, + remaining_submit_attempts: 0, result_failed: false, ocr_pii: nil, doc_type_supported: true, @@ -263,8 +263,8 @@ limit: { rate_limited: true }, }, user_id: user.uuid, - attempts: IdentityConfig.store.doc_auth_max_attempts, - remaining_attempts: 0, + submit_attempts: IdentityConfig.store.doc_auth_max_attempts, + remaining_submit_attempts: 0, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -333,7 +333,7 @@ action expect(response.status).to eq(400) expect(json[:success]).to eq(false) - expect(json[:remaining_attempts]).to be_a_kind_of(Numeric) + expect(json[:remaining_submit_attempts]).to be_a_kind_of(Numeric) expect(json[:errors]).to eq [ { field: 'general', @@ -408,8 +408,8 @@ success: true, errors: {}, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -430,8 +430,8 @@ state: 'MT', state_id_type: 'drivers_license', user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, client_image_metrics: { front: { glare: 99.99 }, back: { glare: 99.99 }, @@ -469,8 +469,8 @@ errors: {}, attention_with_barcode: false, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -607,8 +607,8 @@ success: true, errors: {}, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -629,8 +629,8 @@ state: 'ND', state_id_type: 'drivers_license', user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, client_image_metrics: { front: { glare: 99.99 }, back: { glare: 99.99 }, @@ -673,8 +673,8 @@ }, attention_with_barcode: false, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -719,8 +719,8 @@ success: true, errors: {}, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -741,8 +741,8 @@ state: 'Maryland', state_id_type: 'drivers_license', user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, client_image_metrics: { front: { glare: 99.99 }, back: { glare: 99.99 }, @@ -785,8 +785,8 @@ }, attention_with_barcode: false, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -831,8 +831,8 @@ success: true, errors: {}, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -853,8 +853,8 @@ state: 'ND', state_id_type: 'drivers_license', user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, client_image_metrics: { front: { glare: 99.99 }, back: { glare: 99.99 }, @@ -897,8 +897,8 @@ }, attention_with_barcode: false, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -940,8 +940,8 @@ success: true, errors: {}, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -962,8 +962,8 @@ state: 'ND', state_id_type: 'drivers_license', user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, client_image_metrics: { front: { glare: 99.99 }, back: { glare: 99.99 }, @@ -1006,8 +1006,8 @@ }, attention_with_barcode: false, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -1055,7 +1055,7 @@ expect(response.status).to eq(400) expect(json[:success]).to eq(false) - expect(json[:remaining_attempts]).to be_a_kind_of(Numeric) + expect(json[:remaining_submit_attempts]).to be_a_kind_of(Numeric) expect(json[:errors]).to eq [ { field: 'front', @@ -1072,8 +1072,8 @@ success: true, errors: {}, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -1090,9 +1090,9 @@ }, attention_with_barcode: false, user_id: user.uuid, - attempts: 1, + submit_attempts: 1, billed: nil, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, state: nil, state_id_type: nil, exception: nil, @@ -1141,7 +1141,7 @@ it 'returns error from yaml file' do action - expect(json[:remaining_attempts]).to be_a_kind_of(Numeric) + expect(json[:remaining_submit_attempts]).to be_a_kind_of(Numeric) expect(json[:errors]).to eq [ { field: 'general', @@ -1161,8 +1161,8 @@ success: true, errors: {}, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, pii_like_keypaths: pii_like_keypaths, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), @@ -1187,8 +1187,8 @@ state_id_type: nil, exception: nil, user_id: user.uuid, - attempts: 1, - remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, + submit_attempts: 1, + remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1, client_image_metrics: { front: { glare: 99.99 }, back: { glare: 99.99 }, @@ -1234,7 +1234,7 @@ expect(response.status).to eq(400) expect(json[:success]).to eq(false) - expect(json[:remaining_attempts]).to be_a_kind_of(Numeric) + expect(json[:remaining_submit_attempts]).to be_a_kind_of(Numeric) expect(json[:errors]).to eq [ { field: 'dob', diff --git a/spec/controllers/idv/phone_errors_controller_spec.rb b/spec/controllers/idv/phone_errors_controller_spec.rb index 010f7530b20..4f4fe25ea87 100644 --- a/spec/controllers/idv/phone_errors_controller_spec.rb +++ b/spec/controllers/idv/phone_errors_controller_spec.rb @@ -12,7 +12,7 @@ end before do - allow(subject).to receive(:remaining_attempts).and_return(5) + 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) @@ -149,10 +149,10 @@ end end - it 'assigns remaining count' do + it 'assigns the remaining submit count' do get action - expect(assigns(:remaining_attempts)).to be_kind_of(Numeric) + expect(assigns(:remaining_submit_attempts)).to be_kind_of(Numeric) end it 'logs an event' do @@ -161,7 +161,7 @@ expect(@analytics).to have_received(:track_event).with( 'IdV: phone error visited', type: action, - remaining_attempts: 4, + remaining_submit_attempts: 4, **ab_test_args, ) end @@ -184,7 +184,7 @@ it 'assigns remaining count' do get action - expect(assigns(:remaining_step_attempts)).to be_kind_of(Numeric) + expect(assigns(:remaining_submit_attempts)).to be_kind_of(Numeric) end end end @@ -205,7 +205,7 @@ it 'assigns remaining count' do get action - expect(assigns(:remaining_attempts)).to be_kind_of(Numeric) + expect(assigns(:remaining_submit_attempts)).to be_kind_of(Numeric) end it 'logs an event' do @@ -214,7 +214,7 @@ expect(@analytics).to have_received(:track_event).with( 'IdV: phone error visited', type: action, - remaining_attempts: 4, + remaining_submit_attempts: 4, **ab_test_args, ) end diff --git a/spec/controllers/idv/session_errors_controller_spec.rb b/spec/controllers/idv/session_errors_controller_spec.rb index 39ddf77063e..bbb9f25949a 100644 --- a/spec/controllers/idv/session_errors_controller_spec.rb +++ b/spec/controllers/idv/session_errors_controller_spec.rb @@ -170,7 +170,7 @@ it 'assigns remaining count' do response - expect(assigns(:remaining_attempts)).to be_kind_of(Numeric) + expect(assigns(:remaining_submit_attempts)).to be_kind_of(Numeric) end it 'assigns URL to try again' do @@ -184,7 +184,7 @@ 'IdV: session error visited', hash_including( type: action.to_s, - attempts_remaining: IdentityConfig.store.idv_max_attempts - 1, + submit_attempts_remaining: IdentityConfig.store.idv_max_attempts - 1, ), ) response @@ -264,7 +264,7 @@ 'IdV: session error visited', hash_including( type: action.to_s, - attempts_remaining: 0, + submit_attempts_remaining: 0, ), ) get action @@ -305,7 +305,7 @@ 'IdV: session error visited', hash_including( type: 'ssn_failure', - attempts_remaining: 0, + submit_attempts_remaining: 0, ), ) get action @@ -338,7 +338,7 @@ 'IdV: session error visited', hash_including( type: action.to_s, - attempts_remaining: 0, + submit_attempts_remaining: 0, ), ) diff --git a/spec/controllers/idv/verify_info_controller_spec.rb b/spec/controllers/idv/verify_info_controller_spec.rb index f0cbb78fc7f..d24645a0051 100644 --- a/spec/controllers/idv/verify_info_controller_spec.rb +++ b/spec/controllers/idv/verify_info_controller_spec.rb @@ -352,7 +352,7 @@ expect(@analytics).to have_logged_event( 'IdV: doc auth warning visited', step_name: 'verify_info', - remaining_attempts: kind_of(Numeric), + remaining_submit_attempts: kind_of(Numeric), ) end diff --git a/spec/features/idv/analytics_spec.rb b/spec/features/idv/analytics_spec.rb index d0b647e8e50..28c244165c4 100644 --- a/spec/features/idv/analytics_spec.rb +++ b/spec/features/idv/analytics_spec.rb @@ -63,16 +63,16 @@ flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, '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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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 }, 'Frontend: IdV: back 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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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), selfie_image_fingerprint: nil, liveness_checking_required: boolean + success: true, errors: {}, submit_attempts: 1, remaining_submit_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: nil, liveness_checking_required: boolean }, '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), selfie_image_fingerprint: nil, liveness_checking_required: boolean, classification_info: {} + success: true, errors: {}, user_id: user.uuid, submit_attempts: 1, remaining_submit_attempts: 3, flow_path: 'standard', attention_with_barcode: false, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: nil, liveness_checking_required: boolean, classification_info: {} }, 'IdV: doc auth document_capture submitted' => { success: true, errors: {}, flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false @@ -171,16 +171,16 @@ flow_path: 'hybrid', step: 'document_capture', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', irs_reproofing: false }, '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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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 }, 'Frontend: IdV: back 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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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), selfie_image_fingerprint: nil, liveness_checking_required: boolean + success: true, errors: {}, submit_attempts: 1, remaining_submit_attempts: 3, user_id: user.uuid, flow_path: 'hybrid', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: nil, liveness_checking_required: boolean }, '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), selfie_image_fingerprint: nil, liveness_checking_required: boolean, classification_info: {} + success: true, errors: {}, user_id: user.uuid, submit_attempts: 1, remaining_submit_attempts: 3, flow_path: 'hybrid', attention_with_barcode: false, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: nil, liveness_checking_required: boolean, classification_info: {} }, 'IdV: doc auth document_capture submitted' => { success: true, errors: {}, flow_path: 'hybrid', step: 'document_capture', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', irs_reproofing: false @@ -276,16 +276,16 @@ flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false }, '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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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 }, 'Frontend: IdV: back 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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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), selfie_image_fingerprint: nil, liveness_checking_required: boolean + success: true, errors: {}, submit_attempts: 1, remaining_submit_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: nil, liveness_checking_required: boolean }, '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), selfie_image_fingerprint: nil, liveness_checking_required: boolean, classification_info: {} + success: true, errors: {}, user_id: user.uuid, submit_attempts: 1, remaining_submit_attempts: 3, flow_path: 'standard', attention_with_barcode: false, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: nil, liveness_checking_required: boolean, classification_info: {} }, 'IdV: doc auth document_capture submitted' => { success: true, errors: {}, flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false @@ -363,13 +363,13 @@ flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', skip_hybrid_handoff: nil, irs_reproofing: false }, '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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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 }, 'Frontend: IdV: back 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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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), selfie_image_fingerprint: nil, liveness_checking_required: boolean + success: true, errors: {}, submit_attempts: 1, remaining_submit_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: nil, liveness_checking_required: boolean }, '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' => { @@ -494,22 +494,22 @@ flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, skip_hybrid_handoff: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_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: '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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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 }, 'Frontend: IdV: back 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 + width: 284, height: 38, mimeType: 'image/png', source: 'upload', size: 3694, captureAttempts: 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), selfie_image_fingerprint: an_instance_of(String), liveness_checking_required: boolean + success: true, errors: {}, submit_attempts: 1, remaining_submit_attempts: 3, user_id: user.uuid, flow_path: 'standard', front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: an_instance_of(String), liveness_checking_required: boolean }, '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), selfie_image_fingerprint: an_instance_of(String), liveness_checking_required: boolean, classification_info: {} + success: true, errors: {}, user_id: user.uuid, submit_attempts: 1, remaining_submit_attempts: 3, flow_path: 'standard', attention_with_barcode: false, front_image_fingerprint: an_instance_of(String), back_image_fingerprint: an_instance_of(String), selfie_image_fingerprint: an_instance_of(String), liveness_checking_required: boolean, classification_info: {} }, 'IdV: doc auth document_capture submitted' => { success: true, errors: {}, flow_path: 'standard', step: 'document_capture', redo_document_capture: nil, skip_hybrid_handoff: nil, acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, analytics_id: 'Doc Auth', irs_reproofing: false }, :idv_selfie_image_file_uploaded => { - attempt: 1, failedImageResubmission: nil, fingerprint: 'aIzxkX_iMtoxFOURZr55qkshs53emQKUOr7VfTf6G1Q', flow_path: 'standard', height: 38, mimeType: 'image/png', size: 3694, source: 'upload', width: 284 + captureAttempts: 1, failedImageResubmission: nil, fingerprint: 'aIzxkX_iMtoxFOURZr55qkshs53emQKUOr7VfTf6G1Q', flow_path: 'standard', height: 38, mimeType: 'image/png', size: 3694, source: 'upload', width: 284 }, 'IdV: doc auth ssn visited' => { flow_path: 'standard', step: 'ssn', acuant_sdk_upgrade_ab_test_bucket: :default, lexisnexis_instant_verify_workflow_ab_test_bucket: :default, skip_hybrid_handoff: nil, analytics_id: 'Doc Auth', irs_reproofing: false diff --git a/spec/features/idv/doc_auth/redo_document_capture_spec.rb b/spec/features/idv/doc_auth/redo_document_capture_spec.rb index 825b8a0c0c0..7c98ec55191 100644 --- a/spec/features/idv/doc_auth/redo_document_capture_spec.rb +++ b/spec/features/idv/doc_auth/redo_document_capture_spec.rb @@ -120,13 +120,13 @@ ) expect(fake_analytics).to have_logged_event( 'IdV: doc auth image upload form submitted', - hash_including(remaining_attempts: 3), + hash_including(remaining_submit_attempts: 3), ) DocAuth::Mock::DocAuthMockClient.reset! attach_and_submit_images expect(fake_analytics).to have_logged_event( 'IdV: doc auth image upload form submitted', - hash_including(remaining_attempts: 2), + hash_including(remaining_submit_attempts: 2), ) expect(current_path).to eq(idv_ssn_path) check t('forms.ssn.show') @@ -141,7 +141,7 @@ ) expect(fake_analytics).to have_logged_event( 'IdV: doc auth image upload form submitted', - hash_including(remaining_attempts: 3, attempts: 1), + hash_including(remaining_submit_attempts: 3, submit_attempts: 1), ) DocAuth::Mock::DocAuthMockClient.reset! attach_images @@ -161,7 +161,7 @@ ) expect(fake_analytics).to have_logged_event( 'IdV: doc auth image upload form submitted', - hash_including(remaining_attempts: 3, attempts: 1), + hash_including(remaining_submit_attempts: 3, submit_attempts: 1), ) DocAuth::Mock::DocAuthMockClient.reset! expect(page).not_to have_css( @@ -326,7 +326,7 @@ ) expect(fake_analytics).to have_logged_event( 'IdV: doc auth image upload form submitted', - hash_including(remaining_attempts: 3, attempts: 1), + hash_including(remaining_submit_attempts: 3, submit_attempts: 1), ) DocAuth::Mock::DocAuthMockClient.reset! expect(page).not_to have_css( @@ -375,7 +375,7 @@ ) expect(fake_analytics).to have_logged_event( 'IdV: doc auth image upload form submitted', - hash_including(remaining_attempts: 3, attempts: 1), + hash_including(remaining_submit_attempts: 3, submit_attempts: 1), ) DocAuth::Mock::DocAuthMockClient.reset! expect(page).not_to have_css( @@ -447,7 +447,7 @@ ) expect(fake_analytics).to have_logged_event( 'IdV: doc auth image upload form submitted', - hash_including(remaining_attempts: 3, attempts: 1), + hash_including(remaining_submit_attempts: 3, submit_attempts: 1), ) DocAuth::Mock::DocAuthMockClient.reset! expect(page).not_to have_css( diff --git a/spec/features/idv/doc_auth/verify_info_step_spec.rb b/spec/features/idv/doc_auth/verify_info_step_spec.rb index 18b728c952e..e9b5ba2f6c7 100644 --- a/spec/features/idv/doc_auth/verify_info_step_spec.rb +++ b/spec/features/idv/doc_auth/verify_info_step_spec.rb @@ -129,7 +129,7 @@ expect(fake_analytics).to have_logged_event( 'IdV: doc auth exception visited', step_name: 'verify_info', - remaining_attempts: 5, + remaining_submit_attempts: 5, ) expect(page).to have_current_path(idv_session_errors_exception_path) diff --git a/spec/forms/idv/api_image_upload_form_spec.rb b/spec/forms/idv/api_image_upload_form_spec.rb index d14be59ef9a..4df0335f9ed 100644 --- a/spec/forms/idv/api_image_upload_form_spec.rb +++ b/spec/forms/idv/api_image_upload_form_spec.rb @@ -122,8 +122,8 @@ 'IdV: doc auth image upload form submitted', success: true, errors: {}, - attempts: 1, - remaining_attempts: 3, + submit_attempts: 1, + remaining_submit_attempts: 3, user_id: document_capture_session.user.uuid, flow_path: anything, front_image_fingerprint: an_instance_of(String), @@ -135,7 +135,7 @@ expect(fake_analytics).to have_logged_event( 'IdV: doc auth image upload vendor submitted', async: false, - attempts: 1, + submit_attempts: 1, attention_with_barcode: false, address_line2_present: nil, alert_failure_count: nil, @@ -161,7 +161,7 @@ errors: {}, exception: nil, flow_path: anything, - remaining_attempts: 3, + remaining_submit_attempts: 3, state: 'MT', state_id_type: 'drivers_license', success: true, @@ -231,8 +231,8 @@ 'IdV: doc auth image upload form submitted', success: true, errors: {}, - attempts: 1, - remaining_attempts: 3, + submit_attempts: 1, + remaining_submit_attempts: 3, user_id: document_capture_session.user.uuid, flow_path: anything, front_image_fingerprint: an_instance_of(String), @@ -246,7 +246,7 @@ address_line2_present: nil, alert_failure_count: nil, async: false, - attempts: 1, + submit_attempts: 1, attention_with_barcode: false, billed: true, client_image_metrics: { @@ -282,7 +282,7 @@ processed_alerts: nil, product_status: nil, reference: nil, - remaining_attempts: 3, + remaining_submit_attempts: 3, state: 'MT', state_id_type: 'drivers_license', success: true, @@ -357,8 +357,8 @@ 'IdV: doc auth image upload form submitted', success: true, errors: {}, - attempts: 1, - remaining_attempts: 3, + submit_attempts: 1, + remaining_submit_attempts: 3, user_id: document_capture_session.user.uuid, flow_path: anything, front_image_fingerprint: an_instance_of(String), @@ -392,9 +392,9 @@ expect(response.pii_from_doc).to eq({}) end - it 'includes remaining_attempts' do + it 'includes remaining_submit_attempts' do response = form.submit - expect(response.extra[:remaining_attempts]).to be_a_kind_of(Numeric) + expect(response.extra[:remaining_submit_attempts]).to be_a_kind_of(Numeric) end end @@ -407,7 +407,7 @@ DocAuth::Response.new( success: false, errors: errors, - extra: { remaining_attempts: IdentityConfig.store.doc_auth_max_attempts - 1 }, + extra: { remaining_submit_attempts: IdentityConfig.store.doc_auth_max_attempts - 1 }, ) end let(:doc_auth_client) { double(DocAuth::LexisNexis::LexisNexisClient) } @@ -428,9 +428,9 @@ expect(response.doc_auth_success?).to eq(false) end - it 'includes remaining_attempts' do + it 'includes remaining_submit_attempts' do response = form.submit - expect(response.extra[:remaining_attempts]).to be_a_kind_of(Numeric) + expect(response.extra[:remaining_submit_attempts]).to be_a_kind_of(Numeric) end it 'includes client response errors' do @@ -525,9 +525,9 @@ expect(response.pii_from_doc).to eq({}) end - it 'includes remaining_attempts' do + it 'includes remaining_submit_attempts' do response = form.submit - expect(response.extra[:remaining_attempts]).to be_a_kind_of(Numeric) + expect(response.extra[:remaining_submit_attempts]).to be_a_kind_of(Numeric) end it 'includes doc_pii errors' do @@ -553,8 +553,8 @@ expect(response.errors).to have_value([I18n.t('doc_auth.errors.doc.resubmit_failed_image')]) expect(fake_analytics).to have_logged_event( 'IdV: failed doc image resubmitted', - attempts: 1, - remaining_attempts: 3, + submit_attempts: 1, + remaining_submit_attempts: 3, user_id: document_capture_session.user.uuid, flow_path: anything, front_image_fingerprint: an_instance_of(String), @@ -582,8 +582,8 @@ to have_value([I18n.t('doc_auth.errors.doc.resubmit_failed_image')]) expect(fake_analytics).to have_logged_event( 'IdV: failed doc image resubmitted', - attempts: 1, - remaining_attempts: 3, + submit_attempts: 1, + remaining_submit_attempts: 3, user_id: document_capture_session.user.uuid, flow_path: anything, front_image_fingerprint: an_instance_of(String), diff --git a/spec/javascript/packages/document-capture/components/acuant-capture-spec.jsx b/spec/javascript/packages/document-capture/components/acuant-capture-spec.jsx index 35543c8fa85..c865923ff51 100644 --- a/spec/javascript/packages/document-capture/components/acuant-capture-spec.jsx +++ b/spec/javascript/packages/document-capture/components/acuant-capture-spec.jsx @@ -636,7 +636,7 @@ describe('document-capture/components/acuant-capture', () => { sharpnessScoreThreshold: sinon.match.number, source: 'acuant', width: sinon.match.number, - attempt: sinon.match.number, + captureAttempts: sinon.match.number, size: sinon.match.number, }), ); @@ -805,7 +805,7 @@ describe('document-capture/components/acuant-capture', () => { assessment: 'glare', sharpness: 100, width: 1748, - attempt: sinon.match.number, + captureAttempts: sinon.match.number, size: sinon.match.number, acuantCaptureMode: 'AUTO', fingerprint: null, @@ -864,7 +864,7 @@ describe('document-capture/components/acuant-capture', () => { assessment: 'blurry', sharpness: 49, width: 1748, - attempt: sinon.match.number, + captureAttempts: sinon.match.number, size: sinon.match.number, acuantCaptureMode: sinon.match.string, fingerprint: null, @@ -976,7 +976,7 @@ describe('document-capture/components/acuant-capture', () => { assessment: 'blurry', sharpness: 49, width: 1748, - attempt: sinon.match.number, + captureAttempts: sinon.match.number, size: sinon.match.number, acuantCaptureMode: sinon.match.string, fingerprint: null, @@ -1208,7 +1208,7 @@ describe('document-capture/components/acuant-capture', () => { expect(trackEvent).to.have.been.calledWith( 'idv_sdk_selfie_image_added', sinon.match({ - attempt: sinon.match.number, + captureAttempts: sinon.match.number, }), ); }); @@ -1313,7 +1313,7 @@ describe('document-capture/components/acuant-capture', () => { source: 'upload', mimeType: 'image/jpeg', size: sinon.match.number, - attempt: sinon.match.number, + captureAttempts: sinon.match.number, acuantCaptureMode: null, }), ); @@ -1349,7 +1349,7 @@ describe('document-capture/components/acuant-capture', () => { source: 'upload', mimeType: 'image/jpeg', size: sinon.match.number, - attempt: sinon.match.number, + captureAttempts: sinon.match.number, acuantCaptureMode: 'AUTO', }), ); @@ -1435,14 +1435,14 @@ describe('document-capture/components/acuant-capture', () => { await expect(trackEvent).to.eventually.be.calledWith( 'IdV: test image added', - sinon.match({ attempt: 1 }), + sinon.match({ captureAttempts: 1 }), ); uploadFile(input, validUpload); await expect(trackEvent).to.eventually.be.calledWith( 'IdV: test image added', - sinon.match({ attempt: 2 }), + sinon.match({ captureAttempts: 2 }), ); }); }); diff --git a/spec/javascript/packages/document-capture/components/document-capture-spec.jsx b/spec/javascript/packages/document-capture/components/document-capture-spec.jsx index 6ab8b14f2d7..4bb342b740d 100644 --- a/spec/javascript/packages/document-capture/components/document-capture-spec.jsx +++ b/spec/javascript/packages/document-capture/components/document-capture-spec.jsx @@ -333,7 +333,7 @@ describe('document-capture/components/document-capture', () => { ); const response = new Response( - JSON.stringify({ success: false, remaining_attempts: 1, errors: [{}] }), + JSON.stringify({ success: false, remaining_submit_attempts: 1, errors: [{}] }), { status: 400 }, ); sandbox.stub(response, 'url').get(() => endpoint); diff --git a/spec/javascript/packages/document-capture/components/document-capture-warning-spec.jsx b/spec/javascript/packages/document-capture/components/document-capture-warning-spec.jsx index fdd8791c589..9a8619ff505 100644 --- a/spec/javascript/packages/document-capture/components/document-capture-warning-spec.jsx +++ b/spec/javascript/packages/document-capture/components/document-capture-warning-spec.jsx @@ -66,7 +66,7 @@ describe('DocumentCaptureWarning', () => { isFailedDocType={isFailedDocType} isFailedResult={isFailedResult} isFailedSelfieLivenessOrQuality={isFailedSelfieLivenessOrQuality} - remainingAttempts={2} + remainingSubmitAttempts={2} unknownFieldErrors={unknownFieldErrors} actionOnClick={() => {}} /> @@ -90,7 +90,7 @@ describe('DocumentCaptureWarning', () => { heading: 'errors.doc_auth.rate_limited_heading', subheading: 'errors.doc_auth.rate_limited_subheading', error_message_displayed: 'general error', - remaining_attempts: 2, + remaining_submit_attempts: 2, }); }); @@ -219,7 +219,7 @@ describe('DocumentCaptureWarning', () => { heading: 'errors.doc_auth.doc_type_not_supported_heading', subheading: '', error_message_displayed: 'general error idv.warning.attempts_html', - remaining_attempts: 2, + remaining_submit_attempts: 2, }); }); diff --git a/spec/javascript/packages/document-capture/components/review-issues-step-spec.jsx b/spec/javascript/packages/document-capture/components/review-issues-step-spec.jsx index 364ed89dafa..4a0b8eaaf29 100644 --- a/spec/javascript/packages/document-capture/components/review-issues-step-spec.jsx +++ b/spec/javascript/packages/document-capture/components/review-issues-step-spec.jsx @@ -17,7 +17,7 @@ import { getFixtureFile } from '../../../support/file'; describe('document-capture/components/review-issues-step', () => { const DEFAULT_PROPS = { - remainingAttempts: 3, + remainingSubmitAttempts: 3, unknownFieldErrors: [ { field: 'general', @@ -47,7 +47,7 @@ describe('document-capture/components/review-issues-step', () => { expect(trackEvent).to.have.been.calledWith('IdV: warning shown', { location: 'doc_auth_review_issues', - remaining_attempts: 3, + remaining_submit_attempts: 3, heading: 'We couldn’t verify your ID', subheading: '', error_message_displayed: 'test error', @@ -144,7 +144,7 @@ describe('document-capture/components/review-issues-step', () => { } > { > { > { context('there is no doc type failure', () => { it('render an empty paragraph when no errors', () => { const { container } = render( - , + , ); expect(container.querySelector('p')).to.be.ok(); }); @@ -25,7 +29,7 @@ describe('UnknownError', () => { }, ]} isFailedDocType={false} - remainingAttempts={10} + remainingSubmitAttempts={10} hasDismissed />, ); @@ -47,7 +51,7 @@ describe('UnknownError', () => { }, ]} isFailedDocType={false} - remainingAttempts={10} + remainingSubmitAttempts={10} hasDismissed={false} />, ); @@ -86,7 +90,7 @@ describe('UnknownError', () => { error: toFormEntryError({ field: 'general', message: 'An unknown error occurred' }), }, ]} - remainingAttempts={2} + remainingSubmitAttempts={2} isFailedDocType /> , diff --git a/spec/javascript/packages/document-capture/services/upload-spec.js b/spec/javascript/packages/document-capture/services/upload-spec.js index 9a6733256ae..7876f23650b 100644 --- a/spec/javascript/packages/document-capture/services/upload-spec.js +++ b/spec/javascript/packages/document-capture/services/upload-spec.js @@ -110,7 +110,7 @@ describe('document-capture/services/upload', () => { { field: 'front', message: 'Please fill in this field' }, { field: 'back', message: 'Please fill in this field' }, ], - remaining_attempts: 3, + remaining_submit_attempts: 3, hints: true, result_failed: true, ocr_pii: { first_name: 'Fakey', last_name: 'McFakerson', dob: '1938-10-06' }, @@ -125,7 +125,7 @@ describe('document-capture/services/upload', () => { throw new Error('This is a safeguard and should never be reached, since upload should error'); } catch (error) { expect(error).to.be.instanceOf(UploadFormEntriesError); - expect(error.remainingAttempts).to.equal(3); + expect(error.remainingSubmitAttempts).to.equal(3); expect(error.hints).to.be.true(); expect(error.pii).to.deep.equal({ first_name: 'Fakey', @@ -149,7 +149,7 @@ describe('document-capture/services/upload', () => { JSON.stringify({ success: false, errors: [{ field: 'front', message: 'Using failed image' }], - remaining_attempts: 3, + remaining_submit_attempts: 3, hints: true, result_failed: true, ocr_pii: { first_name: 'Fakey', last_name: 'McFakerson', dob: '1938-10-06' }, @@ -165,7 +165,7 @@ describe('document-capture/services/upload', () => { throw new Error('This is a safeguard and should never be reached, since upload should error'); } catch (error) { expect(error).to.be.instanceOf(UploadFormEntriesError); - expect(error.remainingAttempts).to.equal(3); + expect(error.remainingSubmitAttempts).to.equal(3); expect(error.hints).to.be.true(); expect(error.pii).to.deep.equal({ first_name: 'Fakey', diff --git a/spec/presenters/image_upload_response_presenter_spec.rb b/spec/presenters/image_upload_response_presenter_spec.rb index 58e36fa5134..bac3d9eb7a3 100644 --- a/spec/presenters/image_upload_response_presenter_spec.rb +++ b/spec/presenters/image_upload_response_presenter_spec.rb @@ -4,7 +4,7 @@ include Rails.application.routes.url_helpers let(:extra_attributes) do - { remaining_attempts: 3, flow_path: 'standard' } + { remaining_submit_attempts: 3, flow_path: 'standard' } end let(:form_response) do @@ -52,9 +52,9 @@ end end - describe '#remaining_attempts' do - it 'returns remaining attempts' do - expect(presenter.remaining_attempts).to eq 3 + describe '#remaining_submit_attempts' do + it 'returns remaining submit attempts' do + expect(presenter.remaining_submit_attempts).to eq 3 end end @@ -107,7 +107,7 @@ context 'rate limited' do let(:extra_attributes) do - { remaining_attempts: 0, + { remaining_submit_attempts: 0, flow_path: 'standard', failed_image_fingerprints: { back: [], front: ['12345'], selfie: [] } } end @@ -127,7 +127,7 @@ result_failed: false, errors: [{ field: :limit, message: t('errors.doc_auth.rate_limited_heading') }], redirect: idv_session_errors_rate_limited_url, - remaining_attempts: 0, + remaining_submit_attempts: 0, ocr_pii: nil, doc_type_supported: true, failed_image_fingerprints: { back: [], front: ['12345'], selfie: [] }, @@ -138,7 +138,7 @@ context 'hybrid flow' do let(:extra_attributes) do - { remaining_attempts: 0, + { remaining_submit_attempts: 0, flow_path: 'hybrid', failed_image_fingerprints: { back: [], front: ['12345'], selfie: [] } } end @@ -149,7 +149,7 @@ result_failed: false, errors: [{ field: :limit, message: t('errors.doc_auth.rate_limited_heading') }], redirect: idv_hybrid_mobile_capture_complete_url, - remaining_attempts: 0, + remaining_submit_attempts: 0, ocr_pii: nil, doc_type_supported: true, failed_image_fingerprints: { back: [], front: ['12345'], selfie: [] }, @@ -178,7 +178,7 @@ result_failed: false, errors: [{ field: :front, message: t('doc_auth.errors.not_a_file') }], hints: true, - remaining_attempts: 3, + remaining_submit_attempts: 3, ocr_pii: nil, doc_type_supported: true, failed_image_fingerprints: { back: [], front: [], selfie: [] }, @@ -195,7 +195,7 @@ front: t('doc_auth.errors.not_a_file'), hints: true, }, - extra: { doc_auth_result: 'Failed', remaining_attempts: 3 }, + extra: { doc_auth_result: 'Failed', remaining_submit_attempts: 3 }, ) end @@ -205,7 +205,7 @@ result_failed: true, errors: [{ field: :front, message: t('doc_auth.errors.not_a_file') }], hints: true, - remaining_attempts: 3, + remaining_submit_attempts: 3, ocr_pii: nil, doc_type_supported: true, failed_image_fingerprints: { front: [], back: [], selfie: [] }, @@ -217,7 +217,7 @@ context 'no remaining attempts' do let(:extra_attributes) do - { remaining_attempts: 0, flow_path: 'standard' } + { remaining_submit_attempts: 0, flow_path: 'standard' } end let(:form_response) do FormResponse.new( @@ -232,7 +232,7 @@ context 'hybrid flow' do let(:extra_attributes) do - { remaining_attempts: 0, flow_path: 'hybrid' } + { remaining_submit_attempts: 0, flow_path: 'hybrid' } end it 'returns hash of properties' do @@ -242,7 +242,7 @@ errors: [{ field: :front, message: t('doc_auth.errors.not_a_file') }], hints: true, redirect: idv_hybrid_mobile_capture_complete_url, - remaining_attempts: 0, + remaining_submit_attempts: 0, ocr_pii: nil, doc_type_supported: true, failed_image_fingerprints: { front: [], back: [], selfie: [] }, @@ -259,7 +259,7 @@ errors: [{ field: :front, message: t('doc_auth.errors.not_a_file') }], hints: true, redirect: idv_session_errors_rate_limited_url, - remaining_attempts: 0, + remaining_submit_attempts: 0, ocr_pii: nil, doc_type_supported: true, failed_image_fingerprints: { back: [], front: [], selfie: [] }, @@ -274,7 +274,7 @@ let(:form_response) do response = DocAuth::Response.new( success: true, - extra: { remaining_attempts: 3 }, + extra: { remaining_submit_attempts: 3 }, pii_from_doc: Idp::Constants::MOCK_IDV_APPLICANT, ) allow(response).to receive(:attention_with_barcode?).and_return(true) @@ -287,7 +287,7 @@ result_failed: false, errors: [], hints: true, - remaining_attempts: 3, + remaining_submit_attempts: 3, ocr_pii: Idp::Constants::MOCK_IDV_APPLICANT.slice(:first_name, :last_name, :dob), doc_type_supported: true, failed_image_fingerprints: { back: [], front: [], selfie: [] }, @@ -300,7 +300,7 @@ let(:form_response) do response = DocAuth::Response.new( success: true, - extra: { remaining_attempts: 3 }, + extra: { remaining_submit_attempts: 3 }, pii_from_doc: Idp::Constants::MOCK_IDV_APPLICANT, ) allow(response).to receive(:attention_with_barcode?).and_return(true) @@ -313,7 +313,7 @@ result_failed: false, errors: [], hints: true, - remaining_attempts: 3, + remaining_submit_attempts: 3, ocr_pii: Idp::Constants::MOCK_IDV_APPLICANT.slice(:first_name, :last_name, :dob), doc_type_supported: true, failed_image_fingerprints: { back: [], front: [], selfie: [] }, diff --git a/spec/services/analytics_spec.rb b/spec/services/analytics_spec.rb index 76247648bc7..1d4a949e8c0 100644 --- a/spec/services/analytics_spec.rb +++ b/spec/services/analytics_spec.rb @@ -245,8 +245,8 @@ state: nil, state_id_type: nil, async: nil, - attempts: nil, - remaining_attempts: nil, + submit_attempts: nil, + remaining_submit_attempts: nil, client_image_metrics: nil, flow_path: nil, 'DocumentName' => 'some_name', diff --git a/spec/views/idv/phone_errors/warning.html.erb_spec.rb b/spec/views/idv/phone_errors/warning.html.erb_spec.rb index 2f16b78cdb6..a94c30ef57b 100644 --- a/spec/views/idv/phone_errors/warning.html.erb_spec.rb +++ b/spec/views/idv/phone_errors/warning.html.erb_spec.rb @@ -4,7 +4,7 @@ include Devise::Test::ControllerHelpers let(:sp_name) { 'Example SP' } - let(:remaining_attempts) { 5 } + let(:remaining_submit_attempts) { 5 } let(:gpo_letter_available) { false } let(:phone) { '+13602345678' } let(:country_code) { 'US' } @@ -14,7 +14,7 @@ decorated_sp_session = instance_double(ServiceProviderSession, sp_name: sp_name) allow(view).to receive(:decorated_sp_session).and_return(decorated_sp_session) assign(:gpo_letter_available, gpo_letter_available) - assign(:remaining_attempts, remaining_attempts) + assign(:remaining_submit_attempts, remaining_submit_attempts) assign(:country_code, country_code) assign(:phone, phone) @@ -52,7 +52,7 @@ strip_tags( t( 'idv.failure.phone.warning.attempts_html', - count: remaining_attempts, + count: remaining_submit_attempts, ), ), ) diff --git a/spec/views/idv/session_errors/warning.html.erb_spec.rb b/spec/views/idv/session_errors/warning.html.erb_spec.rb index 2f6d15f38bc..82d9a28c249 100644 --- a/spec/views/idv/session_errors/warning.html.erb_spec.rb +++ b/spec/views/idv/session_errors/warning.html.erb_spec.rb @@ -3,7 +3,7 @@ RSpec.describe 'idv/session_errors/warning.html.erb' do let(:sp_name) { nil } let(:try_again_path) { '/example/path' } - let(:remaining_attempts) { 5 } + let(:remaining_submit_attempts) { 5 } let(:user_session) { {} } before do @@ -11,7 +11,7 @@ allow(view).to receive(:decorated_sp_session).and_return(decorated_sp_session) allow(view).to receive(:user_session).and_return(user_session) - assign(:remaining_attempts, remaining_attempts) + assign(:remaining_submit_attempts, remaining_submit_attempts) assign(:try_again_path, try_again_path) @step_indicator_steps = Idv::StepIndicatorConcern::STEP_INDICATOR_STEPS @@ -26,7 +26,7 @@ it 'shows remaining attempts' do expect(rendered).to have_text( strip_tags( - t('idv.warning.attempts_html', count: remaining_attempts), + t('idv.warning.attempts_html', count: remaining_submit_attempts), ), ) end @@ -45,7 +45,7 @@ expect(rendered).to have_link(t('idv.failure.button.warning'), href: try_again_path) expect(rendered).to have_text( strip_tags( - t('idv.warning.attempts_html', count: remaining_attempts), + t('idv.warning.attempts_html', count: remaining_submit_attempts), ), ) expect(rendered).to have_link(