From dfc8cc0f9e53951e59bc5e4b08d24f3cc4853839 Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Thu, 28 Feb 2019 12:14:38 +1100 Subject: [PATCH 1/4] Add failing test for calculation of payment fee --- spec/models/spree/payment_spec.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 6f84fb5cc4..64a25489c0 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -133,6 +133,28 @@ module Spree order.reload.update! end + context "when order-based calculator" do + let!(:shop) { create(:enterprise) } + let!(:payment_method) { create(:payment_method, calculator: calculator) } + + let!(:calculator) do + Spree::Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) + end + + context "when order complete and inventory tracking enabled" do + let!(:order) { create(:completed_order_with_totals, distributor: shop) } + let!(:variant) { order.line_items.first.variant } + let!(:inventory_item) { create(:inventory_item, enterprise: shop, variant: variant) } + + it "creates adjustment" do + payment = create(:payment, order: order, payment_method: payment_method, + amount: order.total) + expect(payment.adjustment).to be_present + expect(payment.adjustment.amount).not_to eq(0) + end + end + end + context "to Stripe payments" do let(:shop) { create(:enterprise) } let(:payment_method) { create(:stripe_payment_method, distributor_ids: [create(:distributor_enterprise).id], preferred_enterprise_id: shop.id) } From ce658e9dfab63d2ba8f11cc4beeed6fdd3f55747 Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Thu, 28 Feb 2019 12:16:47 +1100 Subject: [PATCH 2/4] Fix error computing payment fee when order-based --- app/models/spree/payment_decorator.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/spree/payment_decorator.rb b/app/models/spree/payment_decorator.rb index 8aab22a7bb..6b5f954a10 100644 --- a/app/models/spree/payment_decorator.rb +++ b/app/models/spree/payment_decorator.rb @@ -33,7 +33,8 @@ module Spree # This is called by the calculator of a payment method def line_items if order.complete? && Spree::Config[:track_inventory_levels] - order.line_items.select { |li| inventory_units.pluck(:variant_id).include?(li.variant_id) } + inventory_item_ids = order.distributor.inventory_items.pluck(:variant_id) + order.line_items.select { |li| inventory_item_ids.include?(li.variant_id) } else order.line_items end From bd586677474d1fb77540ffc13f157789dc4a34f8 Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Thu, 28 Feb 2019 09:24:29 +0800 Subject: [PATCH 3/4] Remove stock check done for payment fees --- app/models/spree/payment_decorator.rb | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/models/spree/payment_decorator.rb b/app/models/spree/payment_decorator.rb index 6b5f954a10..cd78e2b155 100644 --- a/app/models/spree/payment_decorator.rb +++ b/app/models/spree/payment_decorator.rb @@ -32,12 +32,7 @@ module Spree # This is called by the calculator of a payment method def line_items - if order.complete? && Spree::Config[:track_inventory_levels] - inventory_item_ids = order.distributor.inventory_items.pluck(:variant_id) - order.line_items.select { |li| inventory_item_ids.include?(li.variant_id) } - else - order.line_items - end + order.line_items end # Pin payments lacks void and credit methods, but it does have refund From 36e4a22b58f5b357890351317d98edba9f347789 Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Thu, 28 Feb 2019 09:52:56 +0800 Subject: [PATCH 4/4] Use delegate for Payment#line_items --- app/models/spree/payment_decorator.rb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/models/spree/payment_decorator.rb b/app/models/spree/payment_decorator.rb index cd78e2b155..9c57df884a 100644 --- a/app/models/spree/payment_decorator.rb +++ b/app/models/spree/payment_decorator.rb @@ -4,6 +4,8 @@ module Spree Payment.class_eval do extend Spree::LocalizedNumber + delegate :line_items, to: :order + has_one :adjustment, as: :source, dependent: :destroy after_save :ensure_correct_adjustment, :update_order @@ -30,11 +32,6 @@ module Spree I18n.t('payment_method_fee') end - # This is called by the calculator of a payment method - def line_items - order.line_items - end - # Pin payments lacks void and credit methods, but it does have refund # Here we swap credit out for refund and remove void as a possible action def actions_with_pin_payment_adaptations