mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-08 22:56:06 +00:00
Replace broken order data
Bugsnag expects a string as value, not an ActiveRecord object. The result was just "filtered" data, not showing any of the order's attributes. Since wanting to share the order data seems a common pattern, I added a convenience method for it.
This commit is contained in:
@@ -50,9 +50,7 @@ module OrderCompletion
|
||||
end
|
||||
|
||||
def order_invalid!
|
||||
Alert.raise("Notice: invalid order loaded during checkout") do |payload|
|
||||
payload.add_metadata :order, :order, @order
|
||||
end
|
||||
Alert.raise_with_record("Notice: invalid order loaded during checkout", @order)
|
||||
|
||||
flash[:error] = t('checkout.order_not_loaded')
|
||||
redirect_to main_app.shop_path
|
||||
@@ -92,9 +90,7 @@ module OrderCompletion
|
||||
end
|
||||
|
||||
def notify_failure(error = RuntimeError.new(order_processing_error))
|
||||
Alert.raise(error) do |payload|
|
||||
payload.add_metadata :order, @order
|
||||
end
|
||||
Alert.raise_with_record(error, @order)
|
||||
flash[:error] = order_processing_error if flash.blank?
|
||||
end
|
||||
|
||||
|
||||
@@ -20,9 +20,7 @@ module OrderStockCheck
|
||||
def check_order_cycle_expiry
|
||||
return unless current_order_cycle&.closed?
|
||||
|
||||
Alert.raise("Notice: order cycle closed during checkout completion") do |payload|
|
||||
payload.add_metadata :order, :order, current_order
|
||||
end
|
||||
Alert.raise_with_record("Notice: order cycle closed during checkout completion", current_order)
|
||||
current_order.empty!
|
||||
current_order.set_order_cycle! nil
|
||||
|
||||
|
||||
@@ -19,9 +19,7 @@ class BackorderJob < ApplicationJob
|
||||
rescue StandardError => e
|
||||
# Errors here shouldn't affect the checkout. So let's report them
|
||||
# separately:
|
||||
Alert.raise(e) do |payload|
|
||||
payload.add_metadata(:order, :order, order)
|
||||
end
|
||||
Alert.raise_with_record(e, order)
|
||||
end
|
||||
|
||||
def perform(order)
|
||||
|
||||
@@ -16,9 +16,7 @@ class StockSyncJob < ApplicationJob
|
||||
rescue StandardError => e
|
||||
# Errors here shouldn't affect the shopping. So let's report them
|
||||
# separately:
|
||||
Alert.raise(e) do |payload|
|
||||
payload.add_metadata(:order, :order, order)
|
||||
end
|
||||
Alert.raise_with_record(e, order)
|
||||
end
|
||||
|
||||
def self.sync_linked_catalogs_now(order)
|
||||
@@ -29,9 +27,7 @@ class StockSyncJob < ApplicationJob
|
||||
rescue StandardError => e
|
||||
# Errors here shouldn't affect the shopping. So let's report them
|
||||
# separately:
|
||||
Alert.raise(e) do |payload|
|
||||
payload.add_metadata(:order, :order, order)
|
||||
end
|
||||
Alert.raise_with_record(e, order)
|
||||
end
|
||||
|
||||
def self.catalog_ids(order)
|
||||
|
||||
@@ -28,4 +28,11 @@ class Alert
|
||||
block.call(payload)
|
||||
end
|
||||
end
|
||||
|
||||
def self.raise_with_record(error, record, &)
|
||||
metadata = {
|
||||
record.class.name => record&.attributes || { record_was_nil: true }
|
||||
}
|
||||
self.raise(error, metadata, &)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -24,9 +24,7 @@ class PlaceProxyOrder
|
||||
send_placement_email
|
||||
rescue StandardError => e
|
||||
summarizer.record_and_log_error(:processing, order, e.message)
|
||||
Alert.raise(e) do |payload|
|
||||
payload.add_metadata :order, :order, order
|
||||
end
|
||||
Alert.raise_with_record(e, order)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -51,6 +51,23 @@ RSpec.describe Alert do
|
||||
end
|
||||
end
|
||||
|
||||
it "sends ActiveRecord objects" do
|
||||
order = Spree::Order.new(number: "ABC123")
|
||||
|
||||
expect_any_instance_of(Bugsnag::Report).to receive(:add_metadata).with(
|
||||
"Spree::Order", hash_including("number" => "ABC123")
|
||||
)
|
||||
|
||||
Alert.raise_with_record("Wrong order", order)
|
||||
end
|
||||
|
||||
it "notifies Bugsnag when ActiveRecord object is missing" do
|
||||
expect_any_instance_of(Bugsnag::Report).to receive(:add_metadata).with(
|
||||
"NilClass", { record_was_nil: true }
|
||||
)
|
||||
Alert.raise_with_record("Wrong order", nil)
|
||||
end
|
||||
|
||||
it "reaches the Bugsnag service for real", :vcr do
|
||||
# You need to have a valid Bugsnag API key to record this test.
|
||||
# And after recording, you need to check the Bugsnag account for the right
|
||||
|
||||
Reference in New Issue
Block a user