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
1 change: 1 addition & 0 deletions app/services/flow/base_step.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ def mark_step_complete(step = nil)
def mark_step_incomplete(step = nil)
klass = step.nil? ? self.class : steps[step]
flow_session.delete(klass.to_s)
nil
end

def self.acceptable_response_object?(obj)
Expand Down
2 changes: 2 additions & 0 deletions app/services/idv/steps/ssn_step.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ class SsnStep < DocAuthBaseStep
STEP_INDICATOR_STEP = :verify_info

def call
return mark_step_incomplete(:document_capture) if flow_session[:pii_from_doc].nil?

flow_session[:pii_from_doc][:ssn] = flow_params[:ssn]
end

Expand Down
1 change: 1 addition & 0 deletions app/services/idv/steps/verify_step.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ def call

def enqueue_job
return if flow_session[verify_step_document_capture_session_uuid_key]
return mark_step_incomplete(:ssn) if pii_from_doc.nil?

pii_from_doc[:uuid_prefix] = ServiceProvider.find_by(issuer: sp_session[:issuer])&.app_id

Expand Down
63 changes: 63 additions & 0 deletions spec/services/idv/steps/ssn_step_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
require 'rails_helper'

describe Idv::Steps::SsnStep do
include Rails.application.routes.url_helpers

let(:user) { build(:user) }
let(:service_provider) do
create(
:service_provider,
issuer: 'http://sp.example.com',
app_id: '123',
)
end
let(:controller) do
instance_double(
'controller',
session: { sp: { issuer: service_provider.issuer } },
current_user: user,
params: {},
analytics: FakeAnalytics.new,
url_options: {},
request: double(
'request',
headers: {
'X-Amzn-Trace-Id' => amzn_trace_id,
},
),
)
end
let(:amzn_trace_id) { SecureRandom.uuid }

let(:pii_from_doc) do
{
first_name: Faker::Name.first_name,
}
end

let(:flow) do
Idv::Flows::DocAuthFlow.new(controller, {}, 'idv/doc_auth').tap do |flow|
flow.flow_session = { pii_from_doc: pii_from_doc }
end
end

subject(:step) do
Idv::Steps::SsnStep.new(flow)
end

describe '#call' do
context 'when pii_from_doc is not present' do
let(:flow) do
Idv::Flows::DocAuthFlow.new(controller, {}, 'idv/doc_auth').tap do |flow|
flow.flow_session = { 'Idv::Steps::DocumentCaptureStep' => true }
end
end

it 'marks previous step as incomplete' do
expect(flow.flow_session['Idv::Steps::DocumentCaptureStep']).to eq true
expect(step.call).to eq nil
expect(flow.flow_session['Idv::Steps::DocumentCaptureStep']).to eq nil
end
end
end
end
14 changes: 14 additions & 0 deletions spec/services/idv/steps/verify_step_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,20 @@
step.call
end

context 'when pii_from_doc is not present' do
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.

Should we have one of these specs for ssn_step as well?

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.

Yep, added new spec file for it

let(:flow) do
Idv::Flows::DocAuthFlow.new(controller, {}, 'idv/doc_auth').tap do |flow|
flow.flow_session = { 'Idv::Steps::SsnStep' => true }
end
end

it 'marks step as incomplete' do
expect(flow.flow_session['Idv::Steps::SsnStep']).to eq true
expect(step.call).to eq nil
expect(flow.flow_session['Idv::Steps::SsnStep']).to eq nil
end
end

context 'when different users use the same SSN within the same timeframe' do
let(:user2) { create(:user) }
let(:flow2) do
Expand Down