Rescue unknown checkout errors

This commit is contained in:
Maikel Linke
2020-01-22 10:44:28 +11:00
parent 494cb00774
commit 6763012ee9
3 changed files with 13 additions and 0 deletions

View File

@@ -68,6 +68,10 @@ class CheckoutController < Spree::CheckoutController
render json: { path: order_path(@order) }, status: :ok
end
end
rescue StandardError => error
Bugsnag.notify(error)
flash[:error] = I18n.t("checkout.failed")
update_failed
end
# Clears the cached order. Required for #current_order to return a new order

View File

@@ -1181,6 +1181,7 @@ en:
already_ordered:
cart: "cart"
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
failed: "The checkout failed. Please let us know so that we can process your order."
shops:
hubs:
show_closed_shops: "Show closed shops"

View File

@@ -200,6 +200,14 @@ describe CheckoutController, type: :controller do
expect(response.body).to eq({ path: spree.order_path(order) }.to_json)
end
it "returns an error on unexpected failure" do
allow(order).to receive(:update_attributes).and_raise
spree_post :update, format: :json, order: {}
expect(response.status).to eq(400)
expect(response.body).to eq({ errors: {}, flash: {error: I18n.t("checkout.failed")} }.to_json)
end
describe "stale object handling" do
it "retries when a stale object error is encountered" do
allow(ResetOrderService).to receive(:new).with(controller, order) { reset_order_service }