diff --git a/app/models/profile.rb b/app/models/profile.rb index 7af8707d628..8ae293b453d 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -24,6 +24,7 @@ class Profile < ApplicationRecord verification_cancelled: 4, in_person_verification_pending: 5, threatmetrix_review_pending: 6, + threatmetrix_review_rejected: 7, } attr_reader :personal_key diff --git a/app/models/proofing_component.rb b/app/models/proofing_component.rb index 011ca97381a..59e45dd725b 100644 --- a/app/models/proofing_component.rb +++ b/app/models/proofing_component.rb @@ -1,3 +1,7 @@ class ProofingComponent < ApplicationRecord belongs_to :user + + def review_eligible? + verified_at.after?(30.days.ago) + end end diff --git a/lib/tasks/review_profile.rake b/lib/tasks/review_profile.rake new file mode 100644 index 00000000000..a296aab4d64 --- /dev/null +++ b/lib/tasks/review_profile.rake @@ -0,0 +1,45 @@ +require 'io/console' + +namespace :users do + namespace :review do + desc 'Pass a user that has a pending review' + task pass: :environment do |_task, args| + user_uuid = STDIN.getpass('Enter the User UUID to pass (input will be hidden):') + user = User.find_by(uuid: user_uuid) + + if user.decorate.threatmetrix_review_pending? && user.proofing_component.review_eligible? + result = ProofingComponent.find_by(user: user) + result.update(threatmetrix_review_status: 'pass') + user.profiles. + where(deactivation_reason: 'threatmetrix_review_pending'). + first. + activate + puts "User's review state has been updated to #{result.threatmetrix_review_status}." + elsif !user.proofing_component.review_eligible? + puts 'User is past the 30 day review eligibility' + else + puts 'User was not found pending a review' + end + end + + desc 'Reject a user that has a pending review' + task reject: :environment do |_task, args| + user_uuid = STDIN.getpass('Enter the User UUID to reject (input will be hidden):') + user = User.find_by(uuid: user_uuid) + + if user.decorate.threatmetrix_review_pending? && user.proofing_component.review_eligible? + result = ProofingComponent.find_by(user: user) + result.update(threatmetrix_review_status: 'reject') + user.profiles. + where(deactivation_reason: 'threatmetrix_review_pending'). + first. + deactivate(:threatmetrix_review_rejected) + puts "User's review state has been updated to #{result.threatmetrix_review_status}." + elsif !user.proofing_component.review_eligible? + puts 'User is past the 30 day review eligibility' + else + puts 'User was not found pending a review' + end + end + end +end diff --git a/spec/factories/profiles.rb b/spec/factories/profiles.rb index a8152e138e4..0a7730a6b4b 100644 --- a/spec/factories/profiles.rb +++ b/spec/factories/profiles.rb @@ -21,6 +21,11 @@ deactivation_reason { :password_reset } end + trait :threatmetrix_review_pending do + deactivation_reason { :threatmetrix_review_pending } + proofing_components { { threatmetrix_review_status: 'review' } } + end + trait :verification_cancelled do deactivation_reason { :verification_cancelled } end diff --git a/spec/factories/proofing_components.rb b/spec/factories/proofing_components.rb new file mode 100644 index 00000000000..da20ba72b2f --- /dev/null +++ b/spec/factories/proofing_components.rb @@ -0,0 +1,10 @@ +FactoryBot.define do + factory :proofing_component do + association :user, factory: %i[user signed_up] + + trait :eligible_for_review do + verified_at { Time.zone.now } + threatmetrix_review_status { 'review' } + end + end +end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index ac5a86c69fb..9c0598db224 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -210,6 +210,15 @@ end end + trait :deactivated_threatmetrix_profile do + signed_up + + after :build do |user| + create(:profile, :threatmetrix_review_pending, :with_pii, user: user) + create(:proofing_component, :eligible_for_review, user: user) + end + end + trait :deactivated_password_reset_profile do signed_up diff --git a/spec/lib/tasks/review_profile_spec.rb b/spec/lib/tasks/review_profile_spec.rb new file mode 100644 index 00000000000..9af26481232 --- /dev/null +++ b/spec/lib/tasks/review_profile_spec.rb @@ -0,0 +1,33 @@ +require 'rails_helper' +require 'rake' + +describe 'review_profile' do + before do + Rake.application.rake_require('lib/tasks/review_profile', [Rails.root.to_s]) + Rake::Task.define_task(:environment) + end + + describe 'users:review:pass' do + it 'sets threatmetrix_review_status to pass' do + user = create(:user, :deactivated_threatmetrix_profile) + + allow(STDIN).to receive(:getpass) { user.uuid } + + Rake::Task['users:review:pass'].invoke + expect(user.reload.proofing_component.threatmetrix_review_status).to eq('pass') + expect(user.reload.profiles.first.active).to eq(true) + end + end + + describe 'users:review:reject' do + it 'sets threatmetrix_review_status to reject' do + user = create(:user, :deactivated_threatmetrix_profile) + + allow(STDIN).to receive(:getpass) { user.uuid } + + Rake::Task['users:review:reject'].invoke + expect(user.reload.proofing_component.threatmetrix_review_status).to eq('reject') + expect(user.reload.profiles.first.deactivation_reason).to eq('threatmetrix_review_rejected') + end + end +end