From 7da516b637f7bee3da5ddcd2bb0e26943f798fee Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 6 Feb 2024 16:56:29 +1100 Subject: [PATCH] Update pending payment for completed order Update pending payment for cash order, so we can take into account any changes affecting order toral (shipments, line item quantity etc...). This is to allow payment capture to cover the order total, not just the amount due at checkout. --- .../app/services/order_management/order/updater.rb | 5 ++++- .../order_management/order/updater_spec.rb | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/engines/order_management/app/services/order_management/order/updater.rb b/engines/order_management/app/services/order_management/order/updater.rb index 497991d18f..97b77ace28 100644 --- a/engines/order_management/app/services/order_management/order/updater.rb +++ b/engines/order_management/app/services/order_management/order/updater.rb @@ -234,7 +234,10 @@ module OrderManagement end def update_pending_payment - return unless order.state.in? ["payment", "confirmation"] + # We only want to update complete order pending payment when it's a cash payment. We assume + # that if the payment was a credit card it would alread have been processed, so we don't + # bother checking the payment type + return unless order.state.in? ["payment", "confirmation", "complete"] return unless order.pending_payments.any? order.pending_payments.first.update_attribute :amount, order.total diff --git a/engines/order_management/spec/services/order_management/order/updater_spec.rb b/engines/order_management/spec/services/order_management/order/updater_spec.rb index 127b678ece..3dab32c37e 100644 --- a/engines/order_management/spec/services/order_management/order/updater_spec.rb +++ b/engines/order_management/spec/services/order_management/order/updater_spec.rb @@ -105,6 +105,20 @@ module OrderManagement expect(shipment).to receive(:update!).with(order) updater.update_shipments end + + context "whith pending payments" do + let(:order) { create(:completed_order_with_totals) } + + it "updates pending payments" do + payment = create(:payment, order: , amount: order.total) + + # update order so the order total will change + update_order_quantity(order) + order.payments.reload + + expect { updater.update }.to change { payment.reload.amount }.from(50).to(60) + end + end end context "incompleted order" do