Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
8177e14
add update route
svalexander Oct 30, 2023
eacdf1e
redirect update btn on verify info pg to controller address pg
svalexander Oct 30, 2023
c65e1b9
add more before actions to handle routing
svalexander Oct 31, 2023
0e8b4c4
mark fsm step completed in controller
svalexander Nov 1, 2023
d3313c7
update address controller spec with update tests
svalexander Nov 2, 2023
2d61975
update address controller and spec
svalexander Nov 6, 2023
e38391f
update before action and specs
svalexander Nov 6, 2023
c80eeda
update state id step to fix spec
svalexander Nov 7, 2023
4a1eba8
allow error to be shown on pg
svalexander Nov 8, 2023
bd20403
add submitted values on success
svalexander Nov 8, 2023
92166f6
add invalid submission spec
svalexander Nov 9, 2023
96cee93
update in person spec
svalexander Nov 9, 2023
6856d27
lint fix
svalexander Nov 9, 2023
98a5e15
lint fix
svalexander Nov 13, 2023
b097f24
update address controller spec
svalexander Nov 13, 2023
012d607
updates based on feedback
svalexander Nov 13, 2023
b1c8d92
remove before action for ssn step needed and mark address step complete
svalexander Nov 15, 2023
b27db10
fix back link issue
svalexander Nov 15, 2023
fc4abf9
remove unused consts
svalexander Nov 15, 2023
8fa74d7
remove address controller flag from in person spec
svalexander Nov 15, 2023
b782fde
Merge branch 'main' into shannon/lg-10465-update-route-address
svalexander Nov 15, 2023
88c9727
getting flow path from idv_session for analytics
svalexander Nov 15, 2023
92830d9
clean up address controller spec
svalexander Nov 15, 2023
7f3d7e9
update verify info controller spec to get flow path from idv sess
svalexander Nov 15, 2023
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
37 changes: 31 additions & 6 deletions app/controllers/idv/in_person/address_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,34 @@ class AddressController < ApplicationController

before_action :render_404_if_in_person_residential_address_controller_enabled_not_set
before_action :confirm_in_person_state_id_step_complete
before_action :confirm_in_person_address_step_needed
before_action :confirm_in_person_address_step_needed, only: :show

def show
analytics.idv_in_person_proofing_address_visited(**analytics_arguments)

render :show, locals: extra_view_variables
end

def update
attrs = Idv::InPerson::AddressForm::ATTRIBUTES.difference([:same_address_as_id])
pii_from_user[:same_address_as_id] = 'false' if updating_address?
form_result = form.submit(flow_params)

analytics.idv_in_person_proofing_residential_address_submitted(
**analytics_arguments.merge(**form_result.to_h),
)

if form_result.success?
attrs.each do |attr|
pii_from_user[attr] = flow_params[attr]
end
flow_session['Idv::Steps::InPerson::AddressStep'] = true
redirect_to_next_page
else
render :show, locals: extra_view_variables
end
end

def extra_view_variables
{
form:,
Expand Down Expand Up @@ -47,19 +67,23 @@ def flow_params
)
end

def form_submit
form.submit(flow_params)
end

def analytics_arguments
{
flow_path: flow_path,
flow_path: idv_session.flow_path,
step: 'address',
analytics_id: 'In Person Proofing',
irs_reproofing: irs_reproofing?,
}
end

def redirect_to_next_page
if updating_address?
redirect_to idv_in_person_verify_info_url
else
redirect_to idv_in_person_ssn_url
end
end

def render_404_if_in_person_residential_address_controller_enabled_not_set
render_not_found unless
IdentityConfig.store.in_person_residential_address_controller_enabled
Expand All @@ -73,6 +97,7 @@ def confirm_in_person_state_id_step_complete
def confirm_in_person_address_step_needed
return if pii_from_user && pii_from_user[:same_address_as_id] == 'false' &&
!pii_from_user.has_key?(:address1)
return if request.referer == idv_in_person_verify_info_url
redirect_to idv_in_person_ssn_url
end
end
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/idv/in_person/verify_info_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def flow_session

def analytics_arguments
{
flow_path: flow_session[:flow_path],
flow_path: idv_session.flow_path,
step: 'verify',
analytics_id: 'In Person Proofing',
irs_reproofing: irs_reproofing?,
Expand Down
5 changes: 2 additions & 3 deletions app/services/idv/steps/in_person/state_id_step.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ def self.analytics_submitted_event
end

def call
flow_session[:flow_path] = @flow.flow_path
pii_from_user = flow_session[:pii_from_user]
initial_state_of_same_address_as_id = flow_session[:pii_from_user][:same_address_as_id]
Idv::StateIdForm::ATTRIBUTES.each do |attr|
Expand All @@ -25,14 +24,14 @@ def call

if pii_from_user[:same_address_as_id] == 'true'
copy_state_id_address_to_residential_address(pii_from_user)
mark_step_complete(:address)
flow_session['Idv::Steps::InPerson::AddressStep'] = true
redirect_to idv_in_person_ssn_url
end

if initial_state_of_same_address_as_id == 'true' &&
pii_from_user[:same_address_as_id] == 'false'
clear_residential_address(pii_from_user)
mark_step_incomplete(:address)
flow_session.delete('Idv::Steps::InPerson::AddressStep')
end

if flow_session['Idv::Steps::InPerson::AddressStep']
Expand Down
2 changes: 1 addition & 1 deletion app/views/idv/in_person/address/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
<% end %>

<% if updating_address %>
<%= render 'idv/shared/back', action: 'cancel_update_address' %>
<%= render 'idv/shared/back', fallback_path: idv_in_person_verify_info_path %>
<% else %>
<%= render 'idv/doc_auth/cancel', step: 'address' %>
<% end %>
Expand Down
20 changes: 14 additions & 6 deletions app/views/idv/in_person/verify_info/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,20 @@ locals:
</div>
</dl>
<div class='grid-auto'>
<%= button_to(
idv_in_person_step_url(step: :redo_address),
method: :put,
class: 'usa-button usa-button--unstyled padding-y-1',
'aria-label': t('idv.buttons.change_address_label'),
) { t('idv.buttons.change_label') } %>
<% if IdentityConfig.store.in_person_residential_address_controller_enabled %>
<%= link_to(
t('idv.buttons.change_label'),
idv_in_person_proofing_address_url,
'aria-label': t('idv.buttons.change_address_label'),
) %>
<% else %>
<%= button_to(
idv_in_person_step_url(step: :redo_address),
method: :put,
class: 'usa-button usa-button--unstyled padding-y-1',
'aria-label': t('idv.buttons.change_address_label'),
) { t('idv.buttons.change_label') } %>
<% end %>
</div>
</div>
<div class="grid-row grid-gap grid-gap-2 padding-top-1">
Expand Down
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@
as: :capture_doc_dashes

get '/in_person_proofing/address' => 'in_person/address#show'
put '/in_person_proofing/address' => 'in_person/address#update'

get '/in_person' => 'in_person#index'
get '/in_person/ready_to_verify' => 'in_person/ready_to_verify#show',
Expand Down
153 changes: 137 additions & 16 deletions spec/controllers/idv/in_person/address_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,26 @@

RSpec.describe Idv::InPerson::AddressController do
include InPersonHelper
let(:in_person_residential_address_controller_enabled) { true }

let(:pii_from_user) { Idp::Constants::MOCK_IPP_APPLICANT_SAME_ADDRESS_AS_ID_FALSE.dup }
let(:user) { build(:user) }
let(:flow_session) do
{ pii_from_user: pii_from_user }
end
let(:flow_path) { 'standard' }
let(:ssn) { nil }

before(:each) do
before do
allow(IdentityConfig.store).to receive(:in_person_residential_address_controller_enabled).
and_return(true)
allow(IdentityConfig.store).to receive(:usps_ipp_transliteration_enabled).
and_return(true)
allow(subject).to receive(:current_user).
and_return(user)
allow(subject).to receive(:pii_from_user).and_return(pii_from_user)
allow(subject).to receive(:flow_session).and_return(flow_session)
allow(subject).to receive(:flow_path).and_return(flow_path)
stub_sign_in(user)
subject.idv_session.flow_path = 'standard'
subject.idv_session.ssn = ssn
stub_analytics
allow(@analytics).to receive(:track_event)
end
Expand Down Expand Up @@ -60,18 +63,12 @@
end

context '#confirm_in_person_address_step_needed' do
context 'step is not needed' do
it 'redirects to ssn page when same address as id is true' do
flow_session[:pii_from_user][:same_address_as_id] = 'true'
get :show
expect(response).to redirect_to idv_in_person_ssn_url
end
it 'remains on page when referer is verify info' do
subject.request = idv_in_person_verify_info_url
get :show

it 'redirects to ssn page when address1 present' do
flow_session[:pii_from_user][:address1] = '123 Main St'
get :show
expect(response).to redirect_to idv_in_person_ssn_url
end
expect(response).to render_template :show
expect(response).to_not redirect_to(idv_in_person_ssn_url)
end
end
end
Expand All @@ -81,7 +78,7 @@
let(:analytics_args) do
{
analytics_id: 'In Person Proofing',
flow_path: flow_path,
flow_path: 'standard',
irs_reproofing: false,
step: 'address',
step_count: nil,
Expand All @@ -95,6 +92,14 @@
expect(response).to render_template :show
end

it 'redirects to ssn page when address1 present' do
flow_session[:pii_from_user][:address1] = '123 Main St'

get :show

expect(response).to redirect_to idv_in_person_ssn_url
end

it 'logs idv_in_person_proofing_address_visited' do
get :show

Expand All @@ -115,4 +120,120 @@
end
end
end

describe '#update' do
context 'valid address details' do
let(:address1) { '1 FAKE RD' }
let(:address2) { 'APT 1B' }
let(:city) { 'GREAT FALLS' }
let(:zipcode) { '59010' }
let(:state) { 'Montana' }
let(:params) do
{ in_person_address: {
address1: address1,
address2: address2,
city: city,
zipcode: zipcode,
state: state,
} }
end
let(:ssn) { '900123456' }
let(:analytics_name) { 'IdV: in person proofing residential address submitted' }
let(:analytics_args) do
{
success: true,
errors: {},
analytics_id: 'In Person Proofing',
flow_path: 'standard',
irs_reproofing: false,
step: 'address',
}
end

it 'sets values in the flow session' do
put :update, params: params

expect(flow_session[:pii_from_user]).to include(
address1:,
address2:,
city:,
zipcode:,
state:,
)
end

it 'logs idv_in_person_proofing_address_visited' do
put :update, params: params

expect(@analytics).to have_received(
:track_event,
).with(analytics_name, analytics_args)
end

context 'when updating the residential address' do
before do
flow_session[:pii_from_user][:address1] = '123 New Residential Ave'
end

context 'user previously selected that the residential address matched state ID' do
before do
flow_session[:pii_from_user][:same_address_as_id] = 'true'
end

it 'infers and sets the "same_address_as_id" in the flow session to false' do
put :update, params: params

expect(flow_session[:pii_from_user][:same_address_as_id]).to eq('false')
end
end

context 'user previously selected that the residential address did not match state ID' do
before do
flow_session[:pii_from_user][:same_address_as_id] = 'false'
end

it 'leaves the "same_address_as_id" in the flow session as false' do
put :update, params: params

expect(flow_session[:pii_from_user][:same_address_as_id]).to eq('false')
end
end
end
end

context 'invalid address details' do
let(:address1) { '1 F@KE RD' }
let(:address2) { '@?T 1B' }
let(:city) { 'GR3AT F&LLS' }
let(:zipcode) { '59010' }
let(:state) { 'Montana' }
let(:params) do
{ in_person_address: {
address1: address1,
address2: address2,
city: city,
zipcode: zipcode,
state: state,
} }
end
let(:analytics_name) { 'IdV: in person proofing residential address submitted' }
let(:analytics_args) do
{
success: false,
errors: {},
analytics_id: 'In Person Proofing',
flow_path: 'standard',
irs_reproofing: false,
step: 'address',
}
end

it 'does not proceed to next page' do
put :update, params: params

expect(response).to have_rendered(:show)
expect(@analytics).to have_received(:track_event).with(analytics_name, analytics_args)
end
end
end
end
4 changes: 2 additions & 2 deletions spec/controllers/idv/in_person/verify_info_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
RSpec.describe Idv::InPerson::VerifyInfoController do
let(:pii_from_user) { Idp::Constants::MOCK_IDV_APPLICANT_SAME_ADDRESS_AS_ID.dup }
let(:flow_session) do
{ pii_from_user: pii_from_user,
flow_path: 'standard' }
{ pii_from_user: pii_from_user }
end

let(:user) { build(:user, :with_phone, with: { phone: '+1 (415) 555-0130' }) }
Expand All @@ -17,6 +16,7 @@
before do
allow(subject).to receive(:flow_session).and_return(flow_session)
stub_sign_in(user)
subject.idv_session.flow_path = 'standard'
subject.idv_session.ssn = Idp::Constants::MOCK_IDV_APPLICANT_SAME_ADDRESS_AS_ID[:ssn]
allow(subject).to receive(:ab_test_analytics_buckets).and_return(ab_test_args)
end
Expand Down
17 changes: 17 additions & 0 deletions spec/features/idv/steps/in_person/address_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,22 @@
click_on t('idv.cancel.actions.keep_going')
expect(page).to have_current_path(idv_in_person_proofing_address_url)
end

it 'allows user to submit valid inputs on form', allow_browser_log: true do
user = user_with_2fa
complete_idv_steps_before_address(user)
fill_out_address_form_ok
click_idv_continue

expect(page).to have_current_path(idv_in_person_ssn_url, wait: 10)
complete_ssn_step(user)

expect_in_person_step_indicator_current_step(t('step_indicator.flows.idv.verify_info'))
expect(page).to have_current_path(idv_in_person_verify_info_url)
expect(page).to have_text(InPersonHelper::GOOD_ADDRESS1)
expect(page).to have_text(InPersonHelper::GOOD_ADDRESS2)
expect(page).to have_text(InPersonHelper::GOOD_CITY)
expect(page).to have_text(InPersonHelper::GOOD_ZIPCODE)
end
end
end