From 00c4a28d22a927d5f2401ac3e6cc63e268fa941f Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 26 Apr 2021 08:55:14 +0100 Subject: [PATCH] Extract order-updating logic to Order::Updater --- app/models/spree/payment.rb | 14 +------------- .../services/order_management/order/updater.rb | 16 ++++++++++++++++ spec/models/spree/payment_spec.rb | 12 ++++++++++-- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/app/models/spree/payment.rb b/app/models/spree/payment.rb index 111de34e25..8cbb93c1c7 100644 --- a/app/models/spree/payment.rb +++ b/app/models/spree/payment.rb @@ -201,19 +201,7 @@ module Spree end def update_order - if completed? || void? - order.updater.update_payment_total - end - - if order.completed? - order.updater.update_payment_state - order.updater.update_shipments - order.updater.update_shipment_state - end - - if self.completed? || order.completed? - order.updater.persist_totals - end + OrderManagement::Order::Updater.new(order).after_payment_update(self) end # Necessary because some payment gateways will refuse payments with 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 65742b67ad..69eb056922 100644 --- a/engines/order_management/app/services/order_management/order/updater.rb +++ b/engines/order_management/app/services/order_management/order/updater.rb @@ -141,6 +141,22 @@ module OrderManagement order.ship_address = order.address_from_distributor end + def after_payment_update(payment) + if payment.completed? || payment.void? + update_payment_total + end + + if order.completed? + update_payment_state + update_shipments + update_shipment_state + end + + if payment.completed? || order.completed? + persist_totals + end + end + private def round_money(value) diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 91220d5474..230ae645dd 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -556,11 +556,19 @@ describe Spree::Payment do end context "completed orders" do + let(:order_updater) { OrderManagement::Order::Updater.new(order) } + before { allow(order).to receive(:completed?) { true } } it "updates payment_state and shipments" do - expect(order.updater).to receive(:update_payment_state) - expect(order.updater).to receive(:update_shipment_state) + expect(OrderManagement::Order::Updater).to receive(:new).with(order). + and_return(order_updater) + + expect(order_updater).to receive(:after_payment_update).with(kind_of(Spree::Payment)). + and_call_original + + expect(order_updater).to receive(:update_payment_state) + expect(order_updater).to receive(:update_shipment_state) create(:payment, amount: 100, order: order) end end