From 57a94d64f2893a6381cef2c7d18299fc88e9c4b8 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Fri, 26 Nov 2021 16:31:25 +0100 Subject: [PATCH 1/2] Revoke adjustment if payment is cancelled --- app/models/spree/payment.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/spree/payment.rb b/app/models/spree/payment.rb index 3212aab007..b185795f3e 100644 --- a/app/models/spree/payment.rb +++ b/app/models/spree/payment.rb @@ -138,7 +138,7 @@ module Spree end def ensure_correct_adjustment - revoke_adjustment_eligibility if ['failed', 'invalid'].include?(state) + revoke_adjustment_eligibility if ['failed', 'invalid', 'void'].include?(state) return if adjustment.try(:finalized?) if adjustment From 58ea420626d563ffee0664214e667b3a3fa2623d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Tue, 30 Nov 2021 09:42:10 +0100 Subject: [PATCH 2/2] Voiding a payment should revoke any payment fees ... and create a new one if a new payment is then linked to the order. --- spec/models/spree/payment_spec.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 27c6700cf1..8ae18a4611 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -356,6 +356,22 @@ describe Spree::Payment do payment.void_transaction! end end + + context "if payment has any adjustment" do + let!(:order) { create(:order) } + let!(:payment_method) { create(:payment_method, calculator: ::Calculator::FlatRate.new(preferred_amount: 10)) } + + it "should create another adjustment and revoke the previous one" do + payment = create(:payment, order: order, payment_method: payment_method) + expect(order.all_adjustments.payment_fee.eligible.length).to eq(1) + + payment.void_transaction! + expect(order.all_adjustments.payment_fee.eligible.length).to eq(0) + + payment = create(:payment, order: order, payment_method: payment_method) + expect(order.all_adjustments.payment_fee.eligible.length).to eq(1) + end + end end context "#credit" do