mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Merge pull request #5751 from luisramos0/subs_jobs
Add rescue statements with bugsnag alerts to subs jobs
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user