From 022c7ccc791e244eac303b02edde39807339f388 Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Fri, 31 Jul 2020 13:38:37 -0700 Subject: [PATCH 1/9] Log acuant result code, if billable --- app/services/acuant/acuant_client.rb | 7 +++- .../acuant/responses/get_results_response.rb | 13 ++++--- .../acuant/responses/liveness_response.rb | 7 +++- .../acuant/responses/response_with_pii.rb | 5 ++- app/services/acuant/result_codes.rb | 37 +++++++++++++++++++ .../proofing_cost/add_user_proofing_cost.rb | 1 + app/services/idv/steps/doc_auth_base_step.rb | 8 ++-- .../responses/get_results_response_spec.rb | 6 +++ .../responses/liveness_response_spec.rb | 2 + 9 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 app/services/acuant/result_codes.rb diff --git a/app/services/acuant/acuant_client.rb b/app/services/acuant/acuant_client.rb index ba93cf64a6e..cb063f37877 100644 --- a/app/services/acuant/acuant_client.rb +++ b/app/services/acuant/acuant_client.rb @@ -34,6 +34,7 @@ def post_selfie(image:, instance_id:) end # rubocop:disable Metrics/AbcSize + # @return [Acuant::Responses::ResponseWithPii, Acuant::Responses::GetResultsResponse] def post_images(front_image:, back_image:, selfie_image:, liveness_checking_enabled: nil, instance_id: nil) document = create_document @@ -49,7 +50,11 @@ def post_images(front_image:, back_image:, selfie_image:, if results.success? && liveness_checking_enabled pii = results.pii_from_doc selfie_response = post_selfie(image: selfie_image, instance_id: instance_id) - Acuant::Responses::ResponseWithPii.new(selfie_response, pii) + Acuant::Responses::ResponseWithPii.new( + selfie_response: selfie_response, + pii: pii, + result_code: results.result_code + ) else results end diff --git a/app/services/acuant/responses/get_results_response.rb b/app/services/acuant/responses/get_results_response.rb index 0a12b28c138..59a7ccb47f3 100644 --- a/app/services/acuant/responses/get_results_response.rb +++ b/app/services/acuant/responses/get_results_response.rb @@ -1,9 +1,6 @@ module Acuant module Responses class GetResultsResponse < Acuant::Response - GOOD_RESULT = 1 - FYI_RESULT = 2 - def initialize(http_response) @http_response = http_response super( @@ -25,11 +22,17 @@ def pii_from_doc def to_h { success: success?, - erorrs: errors, + errors: errors, exception: exception, + result: result_code.name, } end + # @return [Acuant::ResultCode::ResultCode] + def result_code + Acuant::ResultCodes.from_int(parsed_response_body['Result']) + end + private attr_reader :http_response @@ -57,7 +60,7 @@ def raw_alerts end def successful_result? - parsed_response_body['Result'] == GOOD_RESULT + result_code == Acuant::ResultCodes::PASSED end end end diff --git a/app/services/acuant/responses/liveness_response.rb b/app/services/acuant/responses/liveness_response.rb index 98a89ce9e21..2ae6aba11ef 100644 --- a/app/services/acuant/responses/liveness_response.rb +++ b/app/services/acuant/responses/liveness_response.rb @@ -30,6 +30,7 @@ def extra_attributes { liveness_score: liveness_score, acuant_error: acuant_error, + liveness_assessment: liveness_assessment, } end @@ -42,7 +43,11 @@ def parsed_response_body end def successful_result? - parsed_response_body.dig('LivenessResult', 'LivenessAssessment') == 'Live' + liveness_assessment == 'Live' + end + + def liveness_assessment + parsed_response_body.dig('LivenessResult', 'LivenessAssessment') end end end diff --git a/app/services/acuant/responses/response_with_pii.rb b/app/services/acuant/responses/response_with_pii.rb index bcea99335f4..fba69adbb47 100644 --- a/app/services/acuant/responses/response_with_pii.rb +++ b/app/services/acuant/responses/response_with_pii.rb @@ -1,7 +1,9 @@ module Acuant module Responses class ResponseWithPii < Acuant::Response - def initialize(acuant_response, pii) + attr_reader :result_code + + def initialize(acuant_response:, pii:, result_code:) super( success: acuant_response.success?, errors: acuant_response.errors, @@ -9,6 +11,7 @@ def initialize(acuant_response, pii) extra: acuant_response.extra, ) @pii = pii + @result_code = result_code end def pii_from_doc diff --git a/app/services/acuant/result_codes.rb b/app/services/acuant/result_codes.rb new file mode 100644 index 00000000000..cf4238a4063 --- /dev/null +++ b/app/services/acuant/result_codes.rb @@ -0,0 +1,37 @@ +module Acuant + module ResultCodes + ResultCode = Struct.new(:code, :name, :billed) do + alias_method :billed?, :billed + end + + # The authentication test results are unknown. We are not billed for these + UNKNOWN = ResultCode.new(0, 'Unknown', false).freeze + # The authentication test passed. + PASSED = ResultCode.new(1, 'Passed', true).freeze + # The authentication test failed. + FAILED = ResultCode.new(2, 'Failed', true).freeze + # The authentication test was skipped (was not run). + SKIPPED = ResultCode.new(3, 'Skipped', true).freeze + # The authentication test was inconclusive and further investigation is warranted. + CAUTION = ResultCode.new(4, 'Caution', true).freeze + # The authentication test results requires user attention. + ATTENTION = ResultCode.new(5, 'Attention', true).freeze + + ALL = [ + UNKNOWN, + PASSED, + FAILED, + SKIPPED, + CAUTION, + ATTENTION, + ].freeze + + BY_CODE = ALL.map { |r| [ r.code, r ] }.to_h.freeze + + # @return [ResultCode] + def self.from_int(code) + BY_CODE[code] + end + end +end + diff --git a/app/services/db/proofing_cost/add_user_proofing_cost.rb b/app/services/db/proofing_cost/add_user_proofing_cost.rb index 22d0b85fc33..4430e283822 100644 --- a/app/services/db/proofing_cost/add_user_proofing_cost.rb +++ b/app/services/db/proofing_cost/add_user_proofing_cost.rb @@ -4,6 +4,7 @@ class AddUserProofingCost TOKEN_WHITELIST = %i[ acuant_front_image acuant_back_image + acuant_result aamva lexis_nexis_resolution lexis_nexis_address diff --git a/app/services/idv/steps/doc_auth_base_step.rb b/app/services/idv/steps/doc_auth_base_step.rb index 3c74fef5b7b..9ee7fc5746d 100644 --- a/app/services/idv/steps/doc_auth_base_step.rb +++ b/app/services/idv/steps/doc_auth_base_step.rb @@ -2,9 +2,6 @@ module Idv module Steps class DocAuthBaseStep < Flow::BaseStep - GOOD_RESULT = 1 - FYI_RESULT = 2 - def initialize(flow) super(flow, :doc_auth) end @@ -135,7 +132,7 @@ def post_images liveness_checking_enabled: liveness_checking_enabled?, ) # DP: should these cost recordings happen in the doc_auth_client? - add_costs + add_costs(result) result end @@ -171,10 +168,11 @@ def add_cost(token) Db::ProofingCost::AddUserProofingCost.call(user_id, token) end - def add_costs + def add_costs(result) add_cost(:acuant_front_image) add_cost(:acuant_back_image) add_cost(:acuant_selfie) if liveness_checking_enabled? + add_cost(:acuant_result) if result.result_code&.billed? end def sp_session diff --git a/spec/services/acuant/responses/get_results_response_spec.rb b/spec/services/acuant/responses/get_results_response_spec.rb index 89e1df14e03..c47dd39e605 100644 --- a/spec/services/acuant/responses/get_results_response_spec.rb +++ b/spec/services/acuant/responses/get_results_response_spec.rb @@ -15,6 +15,12 @@ expect(response.success?).to eq(true) expect(response.errors).to eq([]) expect(response.exception).to be_nil + expect(response.to_h).to eq( + success: true, + errors: [], + exception: nil, + result: "Passed", + ) end it 'parsed PII from the doc' do diff --git a/spec/services/acuant/responses/liveness_response_spec.rb b/spec/services/acuant/responses/liveness_response_spec.rb index 9a82ced4200..2bea2331814 100644 --- a/spec/services/acuant/responses/liveness_response_spec.rb +++ b/spec/services/acuant/responses/liveness_response_spec.rb @@ -17,6 +17,7 @@ success: true, errors: [], exception: nil, + liveness_assessment: 'Live', liveness_score: 99, acuant_error: { message: nil, code: nil }, ) @@ -39,6 +40,7 @@ success: false, errors: [I18n.t('errors.doc_auth.selfie')], exception: nil, + liveness_assessment: nil, liveness_score: nil, acuant_error: { message: 'Face is too small. Move the camera closer to the face and retake the picture.', From 7adb960cd49c47183e52e1dc84f14613adb9dbbb Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Fri, 31 Jul 2020 13:44:43 -0700 Subject: [PATCH 2/9] rubocop --- app/services/acuant/acuant_client.rb | 6 +++--- app/services/acuant/result_codes.rb | 3 +-- spec/services/acuant/responses/get_results_response_spec.rb | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/services/acuant/acuant_client.rb b/app/services/acuant/acuant_client.rb index cb063f37877..84c2b8c48aa 100644 --- a/app/services/acuant/acuant_client.rb +++ b/app/services/acuant/acuant_client.rb @@ -33,7 +33,7 @@ def post_selfie(image:, instance_id:) merge_facial_match_and_liveness_response(facial_match_response, liveness_response) end - # rubocop:disable Metrics/AbcSize + # rubocop:disable Metrics/AbcSize, Metrics/MethodLength # @return [Acuant::Responses::ResponseWithPii, Acuant::Responses::GetResultsResponse] def post_images(front_image:, back_image:, selfie_image:, liveness_checking_enabled: nil, instance_id: nil) @@ -53,13 +53,13 @@ def post_images(front_image:, back_image:, selfie_image:, Acuant::Responses::ResponseWithPii.new( selfie_response: selfie_response, pii: pii, - result_code: results.result_code + result_code: results.result_code, ) else results end end - # rubocop:enable Metrics/AbcSize + # rubocop:enable Metrics/AbcSize, Metrics/MethodLength def get_results(instance_id:) Requests::GetResultsRequest.new(instance_id: instance_id).fetch diff --git a/app/services/acuant/result_codes.rb b/app/services/acuant/result_codes.rb index cf4238a4063..5377d0c3386 100644 --- a/app/services/acuant/result_codes.rb +++ b/app/services/acuant/result_codes.rb @@ -26,7 +26,7 @@ module ResultCodes ATTENTION, ].freeze - BY_CODE = ALL.map { |r| [ r.code, r ] }.to_h.freeze + BY_CODE = ALL.map { |r| [r.code, r] }.to_h.freeze # @return [ResultCode] def self.from_int(code) @@ -34,4 +34,3 @@ def self.from_int(code) end end end - diff --git a/spec/services/acuant/responses/get_results_response_spec.rb b/spec/services/acuant/responses/get_results_response_spec.rb index c47dd39e605..be26c9023f2 100644 --- a/spec/services/acuant/responses/get_results_response_spec.rb +++ b/spec/services/acuant/responses/get_results_response_spec.rb @@ -19,7 +19,7 @@ success: true, errors: [], exception: nil, - result: "Passed", + result: 'Passed', ) end From e81b13db2f34d983ee2a5d6cfda25810e9949ad8 Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Fri, 31 Jul 2020 13:58:48 -0700 Subject: [PATCH 3/9] rename argument --- app/services/acuant/acuant_client.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/acuant/acuant_client.rb b/app/services/acuant/acuant_client.rb index 84c2b8c48aa..7a154c084ef 100644 --- a/app/services/acuant/acuant_client.rb +++ b/app/services/acuant/acuant_client.rb @@ -51,7 +51,7 @@ def post_images(front_image:, back_image:, selfie_image:, pii = results.pii_from_doc selfie_response = post_selfie(image: selfie_image, instance_id: instance_id) Acuant::Responses::ResponseWithPii.new( - selfie_response: selfie_response, + acuant_response: selfie_response, pii: pii, result_code: results.result_code, ) From 831e0daec4617e700ad6c3fd0be121cf8be945a7 Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Fri, 31 Jul 2020 15:12:31 -0700 Subject: [PATCH 4/9] add db column --- app/services/acuant/acuant_client.rb | 3 +-- app/services/acuant/responses/response_with_pii.rb | 7 ++----- app/services/doc_auth_mock/doc_auth_mock_client.rb | 2 +- .../doc_auth_mock/responses/get_results_response.rb | 9 ++++++++- app/services/idv/steps/doc_auth_base_step.rb | 2 +- ...20200731213827_add_acuant_result_to_proofing_costs.rb | 5 +++++ db/schema.rb | 3 ++- 7 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 db/migrate/20200731213827_add_acuant_result_to_proofing_costs.rb diff --git a/app/services/acuant/acuant_client.rb b/app/services/acuant/acuant_client.rb index 7a154c084ef..429e285d0d1 100644 --- a/app/services/acuant/acuant_client.rb +++ b/app/services/acuant/acuant_client.rb @@ -34,7 +34,6 @@ def post_selfie(image:, instance_id:) end # rubocop:disable Metrics/AbcSize, Metrics/MethodLength - # @return [Acuant::Responses::ResponseWithPii, Acuant::Responses::GetResultsResponse] def post_images(front_image:, back_image:, selfie_image:, liveness_checking_enabled: nil, instance_id: nil) document = create_document @@ -53,7 +52,7 @@ def post_images(front_image:, back_image:, selfie_image:, Acuant::Responses::ResponseWithPii.new( acuant_response: selfie_response, pii: pii, - result_code: results.result_code, + billed: results.result_code&.billed?, ) else results diff --git a/app/services/acuant/responses/response_with_pii.rb b/app/services/acuant/responses/response_with_pii.rb index fba69adbb47..fc2a6fc6905 100644 --- a/app/services/acuant/responses/response_with_pii.rb +++ b/app/services/acuant/responses/response_with_pii.rb @@ -1,17 +1,14 @@ module Acuant module Responses class ResponseWithPii < Acuant::Response - attr_reader :result_code - - def initialize(acuant_response:, pii:, result_code:) + def initialize(acuant_response:, pii:, billed:) super( success: acuant_response.success?, errors: acuant_response.errors, exception: acuant_response.exception, - extra: acuant_response.extra, + extra: acuant_response.extra.merge(billed: billed), ) @pii = pii - @result_code = result_code end def pii_from_doc diff --git a/app/services/doc_auth_mock/doc_auth_mock_client.rb b/app/services/doc_auth_mock/doc_auth_mock_client.rb index ce1f0a84222..2c703e85d11 100644 --- a/app/services/doc_auth_mock/doc_auth_mock_client.rb +++ b/app/services/doc_auth_mock/doc_auth_mock_client.rb @@ -64,7 +64,7 @@ def post_images(front_image:, back_image:, selfie_image:, if results.success? && liveness_checking_enabled pii = results.pii_from_doc selfie_response = post_selfie(image: selfie_image, instance_id: instance_id) - Acuant::Responses::ResponseWithPii.new(selfie_response, pii) + Acuant::Responses::ResponseWithPii.new(acuant_response: selfie_response, pii: pii, billed: true) else results end diff --git a/app/services/doc_auth_mock/responses/get_results_response.rb b/app/services/doc_auth_mock/responses/get_results_response.rb index 2136dc05415..d0cfc7b48b3 100644 --- a/app/services/doc_auth_mock/responses/get_results_response.rb +++ b/app/services/doc_auth_mock/responses/get_results_response.rb @@ -3,12 +3,19 @@ module Responses class GetResultsResponse < Acuant::Response attr_reader :pii_from_doc - def initialize(success: true, errors: [], exception: nil, pii_from_doc:) + def initialize( + success: true, + errors: [], + exception: nil, + pii_from_doc:, + billed: true + ) @pii_from_doc = pii_from_doc super( success: success, errors: errors, exception: exception, + extra: { billed: billed }, ) end end diff --git a/app/services/idv/steps/doc_auth_base_step.rb b/app/services/idv/steps/doc_auth_base_step.rb index 9ee7fc5746d..045d8a930bb 100644 --- a/app/services/idv/steps/doc_auth_base_step.rb +++ b/app/services/idv/steps/doc_auth_base_step.rb @@ -172,7 +172,7 @@ def add_costs(result) add_cost(:acuant_front_image) add_cost(:acuant_back_image) add_cost(:acuant_selfie) if liveness_checking_enabled? - add_cost(:acuant_result) if result.result_code&.billed? + add_cost(:acuant_result) if result.to_h[:billed] end def sp_session diff --git a/db/migrate/20200731213827_add_acuant_result_to_proofing_costs.rb b/db/migrate/20200731213827_add_acuant_result_to_proofing_costs.rb new file mode 100644 index 00000000000..fbc9e53b143 --- /dev/null +++ b/db/migrate/20200731213827_add_acuant_result_to_proofing_costs.rb @@ -0,0 +1,5 @@ +class AddAcuantResultToProofingCosts < ActiveRecord::Migration[5.2] + def change + add_column :proofing_costs, :acuant_result_count, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index b423803ba02..20591c48235 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_07_23_214611) do +ActiveRecord::Schema.define(version: 2020_07_31_213827) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -380,6 +380,7 @@ t.integer "phone_otp_count", default: 0 t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "acuant_result_count", default: 0 t.index ["user_id"], name: "index_proofing_costs_on_user_id", unique: true end From 30d1edfd9869ae6dda2976cd48cb71066f0303b1 Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Mon, 3 Aug 2020 08:32:57 -0700 Subject: [PATCH 5/9] rubocop --- app/services/doc_auth_mock/doc_auth_mock_client.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/services/doc_auth_mock/doc_auth_mock_client.rb b/app/services/doc_auth_mock/doc_auth_mock_client.rb index 2c703e85d11..4a980c735d5 100644 --- a/app/services/doc_auth_mock/doc_auth_mock_client.rb +++ b/app/services/doc_auth_mock/doc_auth_mock_client.rb @@ -1,4 +1,4 @@ -# rubocop:disable Lint/UnusedMethodArgument +# rubocop:disable Lint/UnusedMethodArgument, Metrics/ClassLength module DocAuthMock class DocAuthMockClient class << self @@ -48,7 +48,7 @@ def post_selfie(image:, instance_id:) Acuant::Response.new(success: true) end - # rubocop:disable Metrics/AbcSize + # rubocop:disable Metrics/AbcSize, Metrics/MethodLength def post_images(front_image:, back_image:, selfie_image:, liveness_checking_enabled: nil, instance_id: nil) return mocked_response_for_method(__method__) if method_mocked?(__method__) @@ -64,12 +64,16 @@ def post_images(front_image:, back_image:, selfie_image:, if results.success? && liveness_checking_enabled pii = results.pii_from_doc selfie_response = post_selfie(image: selfie_image, instance_id: instance_id) - Acuant::Responses::ResponseWithPii.new(acuant_response: selfie_response, pii: pii, billed: true) + Acuant::Responses::ResponseWithPii.new( + acuant_response: selfie_response, + pii: pii, + billed: true, + ) else results end end - # rubocop:enable Metrics/AbcSize + # rubocop:enable Metrics/AbcSize, Metrics/MethodLength def get_results(instance_id:) return mocked_response_for_method(__method__) if method_mocked?(__method__) @@ -129,4 +133,4 @@ def failure(message, extra = nil) end end end -# rubocop:enable Lint/UnusedMethodArgument +# rubocop:enable Lint/UnusedMethodArgument, Metrics/ClassLength From 8e9547a0297b35b63e23d059245cb0a99ba0ac65 Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Mon, 3 Aug 2020 09:49:12 -0700 Subject: [PATCH 6/9] Update proofing cost spec --- .../doc_auth_mock/result_response_builder.rb | 1 + .../reports/proofing_costs_report_spec.rb | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/services/doc_auth_mock/result_response_builder.rb b/app/services/doc_auth_mock/result_response_builder.rb index 0abe81e0356..1085da792b6 100644 --- a/app/services/doc_auth_mock/result_response_builder.rb +++ b/app/services/doc_auth_mock/result_response_builder.rb @@ -27,6 +27,7 @@ def call success: success?, errors: errors, pii_from_doc: pii_from_doc, + billed: true, ) end diff --git a/spec/features/reports/proofing_costs_report_spec.rb b/spec/features/reports/proofing_costs_report_spec.rb index a971fa403c7..b6f8eb86404 100644 --- a/spec/features/reports/proofing_costs_report_spec.rb +++ b/spec/features/reports/proofing_costs_report_spec.rb @@ -4,7 +4,7 @@ include IdvStepHelper include DocAuthHelper - let(:subject) { Reports::ProofingCostsReport } + let(:report) { JSON.parse(Reports::ProofingCostsReport.new.call) } let(:user) { create(:user, :signed_up) } let(:user2) { create(:user, :signed_up) } let(:summary1) do @@ -21,6 +21,7 @@ { 'acuant_front_image_count_average' => 1.0, 'acuant_back_image_count_average' => 1.0, + 'acuant_result_count_average' => 0.0, 'aamva_count_average' => 1.0, 'lexis_nexis_resolution_count_average' => 1.0, 'gpo_letter_count_average' => 0.0, @@ -30,14 +31,27 @@ end it 'works for no records' do - expect(JSON.parse(subject.new.call)).to eq({}) + expect(report).to eq({}) end it 'works for one flow' do sign_in_and_2fa_user(user) complete_doc_auth_steps_before_doc_success_step - expect(JSON.parse(subject.new.call)).to eq(doc_success_funnel.merge(summary1)) + expect(report).to eq(doc_success_funnel.merge(summary1)) + end + + it 'works for one flow that does the selfie check' do + allow(Figaro.env).to receive(:liveness_checking_enabled).and_return('true') + allow(Figaro.env).to receive(:acuant_sdk_document_capture_enabled).and_return('true') + allow(Figaro.env).to receive(:document_capture_step_enabled).and_return('true') + + sign_in_and_2fa_user(user) + complete_doc_auth_steps_before_document_capture_step + attach_images + click_idv_continue + + expect(report).to include('acuant_result_count_average' => 1.0) end it 'works for two flows' do @@ -46,6 +60,6 @@ sign_in_and_2fa_user(user2) complete_doc_auth_steps_before_doc_success_step - expect(JSON.parse(subject.new.call)).to eq(doc_success_funnel.merge(summary2)) + expect(report).to eq(doc_success_funnel.merge(summary2)) end end From 558d5143d7c559bf6a93e4e3bb415f81b600e1e6 Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Mon, 3 Aug 2020 11:14:29 -0700 Subject: [PATCH 7/9] Add billing to back image step --- app/services/idv/steps/back_image_step.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/services/idv/steps/back_image_step.rb b/app/services/idv/steps/back_image_step.rb index 33f66a3d47a..bcaa19bb69b 100644 --- a/app/services/idv/steps/back_image_step.rb +++ b/app/services/idv/steps/back_image_step.rb @@ -19,6 +19,7 @@ def fetch_doc_auth_results_or_redirect_to_selfie return if liveness_checking_enabled? get_results_response = doc_auth_client.get_results(instance_id: flow_session[:instance_id]) + add_cost(:acuant_result) if get_results_response.to_h[:billed] if get_results_response.success? mark_step_complete(:selfie) save_proofing_components From 770c1b76faedac31d1b9cea0bd6cbce7cc426f77 Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Mon, 3 Aug 2020 11:27:53 -0700 Subject: [PATCH 8/9] Add some more specs --- spec/services/acuant/responses/get_results_response_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/services/acuant/responses/get_results_response_spec.rb b/spec/services/acuant/responses/get_results_response_spec.rb index be26c9023f2..bd444395d57 100644 --- a/spec/services/acuant/responses/get_results_response_spec.rb +++ b/spec/services/acuant/responses/get_results_response_spec.rb @@ -21,6 +21,8 @@ exception: nil, result: 'Passed', ) + expect(response.result_code).to eq(Acuant::ResultCodes::PASSED) + expect(response.result_code.billed?).to eq(true) end it 'parsed PII from the doc' do @@ -58,6 +60,8 @@ [I18n.t('friendly_errors.doc_auth.document_type_could_not_be_determined')], ) expect(response.exception).to be_nil + expect(response.result_code).to eq(Acuant::ResultCodes::UNKNOWN) + expect(response.result_code.billed?).to eq(false) end context 'when a friendly error does not exist for the acuant error message' do From 77ce5ad13fbe402a49fe98a49d1a5fe03202f61e Mon Sep 17 00:00:00 2001 From: Zach Margolis Date: Mon, 3 Aug 2020 11:34:36 -0700 Subject: [PATCH 9/9] add some specific tests for resultcode, fix proofing cost spec --- .../reports/proofing_costs_report_spec.rb | 15 +-------------- spec/services/acuant/result_codes_spec.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 spec/services/acuant/result_codes_spec.rb diff --git a/spec/features/reports/proofing_costs_report_spec.rb b/spec/features/reports/proofing_costs_report_spec.rb index b6f8eb86404..1fdb2b913fb 100644 --- a/spec/features/reports/proofing_costs_report_spec.rb +++ b/spec/features/reports/proofing_costs_report_spec.rb @@ -21,7 +21,7 @@ { 'acuant_front_image_count_average' => 1.0, 'acuant_back_image_count_average' => 1.0, - 'acuant_result_count_average' => 0.0, + 'acuant_result_count_average' => 1.0, 'aamva_count_average' => 1.0, 'lexis_nexis_resolution_count_average' => 1.0, 'gpo_letter_count_average' => 0.0, @@ -41,19 +41,6 @@ expect(report).to eq(doc_success_funnel.merge(summary1)) end - it 'works for one flow that does the selfie check' do - allow(Figaro.env).to receive(:liveness_checking_enabled).and_return('true') - allow(Figaro.env).to receive(:acuant_sdk_document_capture_enabled).and_return('true') - allow(Figaro.env).to receive(:document_capture_step_enabled).and_return('true') - - sign_in_and_2fa_user(user) - complete_doc_auth_steps_before_document_capture_step - attach_images - click_idv_continue - - expect(report).to include('acuant_result_count_average' => 1.0) - end - it 'works for two flows' do sign_in_and_2fa_user(user) complete_doc_auth_steps_before_doc_success_step diff --git a/spec/services/acuant/result_codes_spec.rb b/spec/services/acuant/result_codes_spec.rb new file mode 100644 index 00000000000..9af0fcc207f --- /dev/null +++ b/spec/services/acuant/result_codes_spec.rb @@ -0,0 +1,16 @@ +require 'rails_helper' + +RSpec.describe Acuant::ResultCodes do + describe '.from_int' do + it 'is a result code for the int' do + result_code = Acuant::ResultCodes.from_int(1) + expect(result_code).to be_a(Acuant::ResultCodes::ResultCode) + expect(result_code.billed?).to eq(true) + end + + it 'is nil when there is no matching code' do + result_code = Acuant::ResultCodes.from_int(999) + expect(result_code).to be_nil + end + end +end