mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-25 05:45:15 +00:00
Deal with edge cases where an adjustment is left referencing a deleted item
This commit is contained in:
@@ -100,6 +100,11 @@ module Spree
|
||||
def update_adjustment!(calculable = nil, force: false)
|
||||
return amount if immutable? && !force
|
||||
|
||||
if calculable.nil? && adjustable.nil?
|
||||
self.delete
|
||||
return 0.0
|
||||
end
|
||||
|
||||
if originator.present?
|
||||
amount = originator.compute_amount(calculable || adjustable)
|
||||
update_columns(
|
||||
|
||||
@@ -64,6 +64,23 @@ module Spree
|
||||
expect(adjustment).not_to receive(:update_columns)
|
||||
adjustment.update_adjustment!
|
||||
end
|
||||
|
||||
context "where the adjustable has been deleted" do
|
||||
let(:line_item) { create(:line_item, price: 10) }
|
||||
let!(:adjustment) { create(:adjustment, adjustable: line_item) }
|
||||
|
||||
it "returns zero" do
|
||||
line_item.delete
|
||||
expect(adjustment.reload.update_adjustment!).to eq 0.0
|
||||
end
|
||||
|
||||
it "removes orphaned adjustments" do
|
||||
expect {
|
||||
line_item.delete
|
||||
adjustment.reload.update_adjustment!
|
||||
}.to change{ Spree::Adjustment.count }.by -1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "adjustment state" do
|
||||
|
||||
Reference in New Issue
Block a user