Merge pull request #5751 from luisramos0/subs_jobs

Add rescue statements with bugsnag alerts to subs jobs
This commit is contained in:
Pau Pérez Fabregat
2020-08-10 12:50:54 +02:00
committed by GitHub
4 changed files with 38 additions and 20 deletions

View File

@@ -45,27 +45,33 @@ class SubscriptionConfirmJob
def confirm_order!(order)
record_order(order)
if process_payment!(order)
send_confirmation_email(order)
else
process_payment!(order)
send_confirmation_email(order)
rescue StandardError => e
if order.errors.any?
send_failed_payment_email(order)
else
Bugsnag.notify(e, order: order)
send_failed_payment_email(order, e.message)
end
end
# Process the order payment and raise if it's not successful
def process_payment!(order)
return false if order.errors.present?
return true unless order.payment_required?
raise if order.errors.present?
return unless order.payment_required?
prepare_for_payment!(order)
order.process_payments!
raise if order.errors.any?
end
def prepare_for_payment!(order)
setup_payment!(order)
return false if order.errors.any?
raise if order.errors.any?
authorize_payment!(order)
return false if order.errors.any?
order.process_payments!
return false if order.errors.any?
true
raise if order.errors.any?
end
def setup_payment!(order)
@@ -87,9 +93,11 @@ class SubscriptionConfirmJob
SubscriptionMailer.confirmation_email(order).deliver
end
def send_failed_payment_email(order)
def send_failed_payment_email(order, error_message = nil)
order.update!
record_and_log_error(:failed_payment, order)
record_and_log_error(:failed_payment, order, error_message)
SubscriptionMailer.failed_payment_email(order).deliver
rescue StandardError => e
Bugsnag.notify(e, order: order, error_message: error_message)
end
end

View File

@@ -29,10 +29,16 @@ class SubscriptionPlacementJob
def place_order_for(proxy_order)
JobLogger.logger.info("Placing Order for Proxy Order #{proxy_order.id}")
proxy_order.initialise_order!
initialise_order(proxy_order)
place_order(proxy_order.order)
end
def initialise_order(proxy_order)
proxy_order.initialise_order!
rescue StandardError => e
Bugsnag.notify(e, subscription: proxy_order.subscription, proxy_order: proxy_order)
end
def place_order(order)
record_order(order)
return record_issue(:complete, order) if order.completed?
@@ -42,8 +48,9 @@ class SubscriptionPlacementJob
move_to_completion(order)
send_placement_email(order, changes)
rescue StateMachine::InvalidTransition
record_and_log_error(:processing, order)
rescue StandardError => e
record_and_log_error(:processing, order, e.message)
Bugsnag.notify(e, order: order)
end
def cap_quantity_and_store_changes(order)

View File

@@ -22,12 +22,15 @@ module OrderManagement
summary_for(order).record_issue(type, order, message)
end
def record_and_log_error(type, order)
def record_and_log_error(type, order, error_message = nil)
return record_issue(type, order) unless order.errors.any?
error = "Subscription#{type.to_s.camelize}Error"
line1 = "#{error}: Cannot process order #{order.number} due to errors"
line2 = "Errors: #{order.errors.full_messages.join(', ')}"
error_message ||= order.errors.full_messages.join(', ')
line2 = "Errors: #{error_message}"
JobLogger.logger.info("#{line1}\n#{line2}")
record_issue(type, order, line2)
end

View File

@@ -216,7 +216,7 @@ describe SubscriptionConfirmJob do
it "records and logs an error and sends the email" do
expect(order).to receive(:update!)
expect(job).to receive(:record_and_log_error).with(:failed_payment, order).once
expect(job).to receive(:record_and_log_error).with(:failed_payment, order, nil).once
job.send(:send_failed_payment_email, order)
expect(SubscriptionMailer).to have_received(:failed_payment_email).with(order)
expect(mail_mock).to have_received(:deliver)