diff --git a/core/app/models/spree/in_memory_order_updater.rb b/core/app/models/spree/in_memory_order_updater.rb index 5f5255a169f..4922eab980e 100644 --- a/core/app/models/spree/in_memory_order_updater.rb +++ b/core/app/models/spree/in_memory_order_updater.rb @@ -19,7 +19,7 @@ def initialize(order) def recalculate(persist: true) order.transaction do update_item_count - update_shipment_amounts + update_shipment_amounts(persist:) update_totals if order.completed? update_payment_state @@ -132,8 +132,8 @@ def update_totals update_adjustment_total end - def update_shipment_amounts - shipments.each(&:update_amounts) + def update_shipment_amounts(persist:) + shipments.each { _1.update_amounts(persist:) } end # give each of the shipments a chance to update themselves diff --git a/core/spec/models/spree/in_memory_order_updater_spec.rb b/core/spec/models/spree/in_memory_order_updater_spec.rb index 2e9020825dd..0bdb503a9bd 100644 --- a/core/spec/models/spree/in_memory_order_updater_spec.rb +++ b/core/spec/models/spree/in_memory_order_updater_spec.rb @@ -37,6 +37,30 @@ module Spree expect(order.item_count).to eq 1 expect(order.reload.item_count).to eq 0 end + + context 'when a shipment is attached to the order' do + let(:shipment) { create(:shipment) } + + before do + order.shipments << shipment + end + + it 'does not make manipulative database queries' do + expect { + subject + }.not_to make_database_queries(manipulative: true) + end + + context 'when the shipment has a selected shipping rate' do + let(:shipment) { create(:shipment, shipping_rates: [build(:shipping_rate, selected: true)]) } + + it 'does not make manipulative database queries' do + expect { + subject + }.not_to make_database_queries(manipulative: true) + end + end + end end context "when the persist flag is set to 'true'" do