Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions app/controllers/users/verify_password_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ def new
end

def update
result = verify_password_form.submit
form = verify_password_form
result = form.submit

analytics.reactivate_account_verify_password_submitted(success: result.success?)
analytics.reactivate_account_verify_password_submitted(**result.to_h)

if result.success?
handle_success(result)
handle_success(personal_key: form.personal_key)
else
flash[:error] = t('errors.messages.password_incorrect')
render :new
Expand All @@ -32,8 +33,8 @@ def confirm_personal_key
redirect_to root_url
end

def handle_success(result)
user_session[:personal_key] = result.extra[:personal_key]
def handle_success(personal_key:)
user_session[:personal_key] = personal_key
reactivate_account_session.clear
redirect_to manage_personal_key_url
end
Expand Down
7 changes: 3 additions & 4 deletions app/forms/verify_password_form.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class VerifyPasswordForm
validates :password, presence: true
validate :validate_password

attr_reader :user, :password, :decrypted_pii
attr_reader :user, :password, :decrypted_pii, :personal_key

def initialize(user:, password:, decrypted_pii:)
@user = user
Expand All @@ -16,11 +16,10 @@ def initialize(user:, password:, decrypted_pii:)

def submit
success = valid?
extra = {}

extra[:personal_key] = reencrypt_pii if success
@personal_key = reencrypt_pii if success

FormResponse.new(success: success, errors: errors, extra: extra)
FormResponse.new(success:, errors:, serialize_error_details_only: true)
end

private
Expand Down
5 changes: 3 additions & 2 deletions app/services/analytics_events.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6689,8 +6689,9 @@ def reactivate_account_submit

# Submission event for the "verify password" page the user sees after entering their personal key.
# @param [Boolean] success Whether the form was submitted successfully.
def reactivate_account_verify_password_submitted(success:, **extra)
track_event(:reactivate_account_verify_password_submitted, success: success, **extra)
# @param [Hash] error_details Details for errors that occurred in unsuccessful submission
def reactivate_account_verify_password_submitted(success:, error_details: nil, **extra)
track_event(:reactivate_account_verify_password_submitted, success:, error_details:, **extra)
end

# Visit event for the "verify password" page the user sees after entering their personal key.
Expand Down
26 changes: 13 additions & 13 deletions spec/controllers/users/verify_password_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,18 +60,19 @@
end

describe '#update' do
let(:form) { instance_double(VerifyPasswordForm) }
let(:user_params) { { user: { password: user.password } } }

before do
expect(controller).to receive(:verify_password_form).and_return(form)
end
let(:password) { nil }
let(:user_params) { { user: { password: } } }

context 'with valid password' do
let(:response_ok) { FormResponse.new(success: true, errors: {}, extra: recovery_hash) }
let(:password) { user.password }

before do
allow(form).to receive(:submit).and_return(response_ok)
pii = Pii::Attributes.new_from_hash(Idp::Constants::MOCK_IDV_APPLICANT_WITH_SSN)
ReactivateAccountSession.new(
user:,
user_session: controller.user_session,
).store_decrypted_pii(pii)

put :update, params: user_params
end

Expand All @@ -86,26 +87,25 @@
expect(response).to redirect_to(manage_personal_key_url)
end

it 'sets a new personal key as a flash message' do
expect(controller.user_session[:personal_key]).to eq(key)
it 'sets the new personal key as a user session value' do
expect(controller.user_session[:personal_key]).to match(/^([A-Z0-9]{4}(-|$)){4}/)
end
end

context 'without valid password' do
let(:response_bad) { FormResponse.new(success: false, errors: {}) }
let(:password) { user.password + 'wrong' }

render_views

before do
allow(form).to receive(:submit).and_return(response_bad)

put :update, params: user_params
end

it 'logs an appropriate analytics event' do
expect(@analytics).to have_logged_event(
:reactivate_account_verify_password_submitted,
success: false,
error_details: { password: { password_incorrect: true } },
)
end

Expand Down
8 changes: 5 additions & 3 deletions spec/forms/verify_password_form_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
result = form.submit

expect(profile.reload.active?).to eq true
expect(result.success?).to eq true
expect(result.to_h).to eq(success: true)
end
end

Expand All @@ -40,8 +40,10 @@
result = form.submit

expect(profile.reload.active?).to eq false
expect(result.success?).to eq false
expect(result.errors[:password]).to eq [t('errors.messages.password_incorrect')]
expect(result.to_h).to eq(
success: false,
error_details: { password: { password_incorrect: true } },
)
end
end
end
Expand Down