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
4 changes: 2 additions & 2 deletions app/controllers/users/phone_setup_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ class PhoneSetupController < ApplicationController

def index
@new_phone_form = NewPhoneForm.new(
current_user,
user: current_user,
setup_voice_preference: setup_voice_preference?,
)
track_phone_setup_visit
end

def create
@new_phone_form = NewPhoneForm.new(current_user)
@new_phone_form = NewPhoneForm.new(user: current_user)
result = @new_phone_form.submit(new_phone_form_params)
analytics.multi_factor_auth_phone_setup(**result.to_h)

Expand Down
4 changes: 2 additions & 2 deletions app/controllers/users/phones_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ class PhonesController < ReauthnRequiredController

def add
user_session[:phone_id] = nil
@new_phone_form = NewPhoneForm.new(current_user)
@new_phone_form = NewPhoneForm.new(user: current_user)
end

def create
@new_phone_form = NewPhoneForm.new(current_user)
@new_phone_form = NewPhoneForm.new(user: current_user)
if @new_phone_form.submit(user_params).success?
confirm_phone
bypass_sign_in current_user
Expand Down
34 changes: 17 additions & 17 deletions app/forms/new_phone_form.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,26 @@ class NewPhoneForm
validate :validate_not_premium_rate
validate :validate_allowed_carrier

attr_accessor :phone, :international_code, :otp_delivery_preference,
:otp_make_default_number, :setup_voice_preference
attr_reader :phone,
:international_code,
:otp_delivery_preference,
:otp_make_default_number,
:setup_voice_preference

alias_method :setup_voice_preference?, :setup_voice_preference

def initialize(user, setup_voice_preference: false)
self.user = user
self.otp_delivery_preference = user.otp_delivery_preference
self.otp_make_default_number = false
self.setup_voice_preference = setup_voice_preference
def initialize(user:, setup_voice_preference: false)
@user = user
@otp_delivery_preference = user.otp_delivery_preference
@otp_make_default_number = false
@setup_voice_preference = setup_voice_preference
Comment on lines +27 to +30
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if we're no longer using the writer methods, let's change the attr_accessor above to attr_reader?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I'd be on-board with that. I'll need to check that the accessor methods weren't being used outside the class implementation.

end

def submit(params)
ingest_submitted_params(params)

success = valid?
self.phone = submitted_phone unless success
@phone = submitted_phone unless success

FormResponse.new(success: success, errors: errors, extra: extra_analytics_attributes)
end
Expand Down Expand Up @@ -64,15 +67,12 @@ def phone_info

private

attr_accessor :user, :submitted_phone
attr_reader :user, :submitted_phone

def ingest_phone_number(params)
self.international_code = params[:international_code]
self.submitted_phone = params[:phone]
self.phone = PhoneFormatter.format(
submitted_phone,
country_code: international_code,
)
@international_code = params[:international_code]
@submitted_phone = params[:phone]
@phone = PhoneFormatter.format(submitted_phone, country_code: international_code)
end

def extra_analytics_attributes
Expand Down Expand Up @@ -135,8 +135,8 @@ def ingest_submitted_params(params)
delivery_prefs = params[:otp_delivery_preference]
default_prefs = params[:otp_make_default_number]

self.otp_delivery_preference = delivery_prefs if delivery_prefs
self.otp_make_default_number = true if default_prefs
@otp_delivery_preference = delivery_prefs if delivery_prefs
@otp_make_default_number = true if default_prefs
end

def confirmed_phone?
Expand Down
2 changes: 1 addition & 1 deletion spec/components/phone_input_component_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
let(:lookup_context) { ActionView::LookupContext.new(ActionController::Base.view_paths) }
let(:view_context) { ActionView::Base.new(lookup_context, {}, controller) }
let(:user) { build_stubbed(:user) }
let(:form_object) { NewPhoneForm.new(user) }
let(:form_object) { NewPhoneForm.new(user:) }
let(:form_builder) do
SimpleForm::FormBuilder.new(form_object.model_name.param_key, form_object, view_context, {})
end
Expand Down
2 changes: 1 addition & 1 deletion spec/controllers/users/phone_setup_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

expect(@analytics).to receive(:track_event).
with('User Registration: phone setup visited', enabled_mfa_methods_count: 0)
expect(NewPhoneForm).to receive(:new).with(user, setup_voice_preference: false)
expect(NewPhoneForm).to receive(:new).with(user:, setup_voice_preference: false)

get :index

Expand Down
29 changes: 23 additions & 6 deletions spec/forms/new_phone_form_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,31 @@
otp_delivery_preference: 'sms',
}
end
subject(:form) { NewPhoneForm.new(user) }
subject(:form) { NewPhoneForm.new(user:) }

it_behaves_like 'a phone form'

describe 'phone validation' do
it do
should validate_inclusion_of(:international_code).
in_array(PhoneNumberCapabilities::INTERNATIONAL_CODES.keys)
context 'with valid international code' do
it 'is valid' do
PhoneNumberCapabilities::INTERNATIONAL_CODES.keys.each do |code|
result = subject.submit(params.clone.merge(international_code: code))

expect(result.to_h[:error_details]).not_to match(
hash_including(international_code: include(:inclusion)),
)
end
end
end

context 'with invalid international code' do
it 'is invalid' do
result = subject.submit(params.clone.merge(international_code: 'INVALID'))

expect(result.to_h[:error_details]).to match(
hash_including(international_code: include(:inclusion)),
)
end
end

it 'validates that the number matches the requested international code' do
Expand Down Expand Up @@ -52,7 +69,7 @@

it 'does not update the user phone attribute' do
user = create(:user)
subject = NewPhoneForm.new(user)
subject = NewPhoneForm.new(user:)
params[:phone] = '+1 504 444 1643'

subject.submit(params)
Expand Down Expand Up @@ -375,7 +392,7 @@
end

context 'with setup_voice_preference present' do
subject(:form) { NewPhoneForm.new(user, setup_voice_preference: true) }
subject(:form) { NewPhoneForm.new(user:, setup_voice_preference: true) }

it 'is true' do
expect(form.delivery_preference_voice?).to eq(true)
Expand Down
2 changes: 1 addition & 1 deletion spec/views/phone_setup/index.html.erb_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

allow(view).to receive(:current_user).and_return(user)

@new_phone_form = NewPhoneForm.new(user)
@new_phone_form = NewPhoneForm.new(user:)

@presenter = SetupPresenter.new(
current_user: user,
Expand Down
2 changes: 1 addition & 1 deletion spec/views/users/phones/add.html.erb_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

before do
user = build_stubbed(:user)
@new_phone_form = NewPhoneForm.new(user)
@new_phone_form = NewPhoneForm.new(user:)
end

context 'phone vendor outage' do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
let(:user) { build_stubbed(:user) }

subject(:rendered) do
render 'users/shared/otp_delivery_preference_selection', form_obj: NewPhoneForm.new(user)
render 'users/shared/otp_delivery_preference_selection', form_obj: NewPhoneForm.new(user:)
end

it 'renders enabled sms option' do
Expand Down