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
54 changes: 54 additions & 0 deletions lib/action_account.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require_relative './script_base'

# rubocop:disable Metrics/BlockLength
class ActionAccount
attr_reader :argv, :stdout, :stderr

Expand Down Expand Up @@ -149,13 +150,18 @@ def run(args:, config:)
messages = []

users.each do |user|
profile_fraud_review_pending_at = nil
success = false

log_texts = []

if !user.fraud_review_pending?
log_texts << log_text[:no_pending]
elsif FraudReviewChecker.new(user).fraud_review_eligible?
profile = user.fraud_review_pending_profile
profile_fraud_review_pending_at = profile.fraud_review_pending_at
profile.reject_for_fraud(notify_user: true)
success = true

log_texts << log_text[:rejected_for_fraud]
else
Expand All @@ -170,6 +176,19 @@ def run(args:, config:)
messages:,
)
end
ensure
if !success
analytics_error_hash = { message: log_texts.last }
end

Analytics.new(
user: user, request: nil, session: {}, sp: nil,
).fraud_review_rejected(
success:,
errors: analytics_error_hash,
exception: nil,
profile_fraud_review_pending_at: profile_fraud_review_pending_at,
)
end

if config.include_missing?
Expand All @@ -181,6 +200,14 @@ def run(args:, config:)
messages:,
)
end
Analytics.new(
user: AnonymousUser.new, request: nil, session: {}, sp: nil,
).fraud_review_rejected(
success: false,
errors: { message: log_text[:missing_uuid] },
exception: nil,
profile_fraud_review_pending_at: nil,
)
end

ScriptBase::Result.new(
Expand Down Expand Up @@ -213,12 +240,17 @@ def run(args:, config:)

messages = []
users.each do |user|
profile_fraud_review_pending_at = nil
success = false

log_texts = []
if !user.fraud_review_pending?
log_texts << log_text[:no_pending]
elsif FraudReviewChecker.new(user).fraud_review_eligible?
profile = user.fraud_review_pending_profile
profile_fraud_review_pending_at = profile.fraud_review_pending_at
profile.activate_after_passing_review
success = true

if profile.active?
event, _disavowal_token = UserEventCreator.new(current_user: user).
Expand All @@ -242,6 +274,19 @@ def run(args:, config:)
messages:,
)
end
ensure
if !success
analytics_error_hash = { message: log_texts.last }
end

Analytics.new(
user: user, request: nil, session: {}, sp: nil,
).fraud_review_passed(
success:,
errors: analytics_error_hash,
exception: nil,
profile_fraud_review_pending_at: profile_fraud_review_pending_at,
)
end

if config.include_missing?
Expand All @@ -253,6 +298,14 @@ def run(args:, config:)
messages:,
)
end
Analytics.new(
user: AnonymousUser.new, request: nil, session: {}, sp: nil,
).fraud_review_passed(
success: false,
errors: { message: log_text[:missing_uuid] },
exception: nil,
profile_fraud_review_pending_at: nil,
)
end

ScriptBase::Result.new(
Expand Down Expand Up @@ -288,3 +341,4 @@ def run(args:, config:)
end
end
end
# rubocop:enable Metrics/BlockLength
60 changes: 60 additions & 0 deletions spec/lib/action_account_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -135,12 +135,20 @@
let(:user) { create(:profile, :fraud_review_pending).user }
let(:user_without_profile) { create(:user) }

let(:analytics) { FakeAnalytics.new }

before do
allow(Analytics).to receive(:new).and_return(analytics)
end

let(:args) { [user.uuid, user_without_profile.uuid, 'uuid-does-not-exist'] }
let(:include_missing) { true }
let(:config) { ScriptBase::Config.new(include_missing:) }
subject(:result) { subtask.run(args:, config:) }

it 'Reject a user that has a pending review', aggregate_failures: true do
profile_fraud_review_pending_at = user.pending_profile.fraud_review_pending_at

expect(result.table).to match_array(
[
['uuid', 'status'],
Expand All @@ -152,6 +160,28 @@

expect(result.subtask).to eq('review-reject')
expect(result.uuids).to match_array([user.uuid, user_without_profile.uuid])

expect(analytics).to have_logged_event(
'Fraud: Profile review rejected',
success: true,
errors: nil,
exception: nil,
profile_fraud_review_pending_at: profile_fraud_review_pending_at,
)
expect(analytics).to have_logged_event(
'Fraud: Profile review rejected',
success: false,
errors: { message: 'Error: User does not have a pending fraud review' },
exception: nil,
profile_fraud_review_pending_at: nil,
)
expect(analytics).to have_logged_event(
'Fraud: Profile review rejected',
success: false,
errors: { message: 'Error: Could not find user with that UUID' },
exception: nil,
profile_fraud_review_pending_at: nil,
)
end
end
end
Expand All @@ -163,12 +193,20 @@
let(:user) { create(:profile, :fraud_review_pending).user }
let(:user_without_profile) { create(:user) }

let(:analytics) { FakeAnalytics.new }

before do
allow(Analytics).to receive(:new).and_return(analytics)
end

let(:args) { [user.uuid, user_without_profile.uuid, 'uuid-does-not-exist'] }
let(:include_missing) { true }
let(:config) { ScriptBase::Config.new(include_missing:) }
subject(:result) { subtask.run(args:, config:) }

it 'Pass a user that has a pending review', aggregate_failures: true do
profile_fraud_review_pending_at = user.pending_profile.fraud_review_pending_at

expect(result.table).to match_array(
[
['uuid', 'status'],
Expand All @@ -180,6 +218,28 @@

expect(result.subtask).to eq('review-pass')
expect(result.uuids).to match_array([user.uuid, user_without_profile.uuid])

expect(analytics).to have_logged_event(
'Fraud: Profile review passed',
success: true,
errors: nil,
exception: nil,
profile_fraud_review_pending_at: profile_fraud_review_pending_at,
)
expect(analytics).to have_logged_event(
'Fraud: Profile review passed',
success: false,
errors: { message: 'Error: User does not have a pending fraud review' },
exception: nil,
profile_fraud_review_pending_at: nil,
)
expect(analytics).to have_logged_event(
'Fraud: Profile review passed',
success: false,
errors: { message: 'Error: Could not find user with that UUID' },
exception: nil,
profile_fraud_review_pending_at: nil,
)
end
end
end
Expand Down