From 2576d10e4957191decf1e8d3d40f0055877c66ae Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 17 Nov 2017 11:10:10 +1100 Subject: [PATCH] Create a new payment when none is present --- .../standing_order_payment_updater.rb | 9 ++++++++- .../standing_order_payment_updater_spec.rb | 19 +++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/open_food_network/standing_order_payment_updater.rb b/lib/open_food_network/standing_order_payment_updater.rb index 9804fe8c20..7da37940cf 100644 --- a/lib/open_food_network/standing_order_payment_updater.rb +++ b/lib/open_food_network/standing_order_payment_updater.rb @@ -5,7 +5,7 @@ module OpenFoodNetwork end def update! - return if payment.blank? + create_payment if payment.blank? if card_required? && !card_set? return unless ensure_credit_card @@ -20,6 +20,13 @@ module OpenFoodNetwork @payment ||= @order.pending_payments.last end + def create_payment + @payment = @order.payments.create( + payment_method_id: @order.standing_order.payment_method_id, + amount: @order.outstanding_balance + ) + end + def card_required? payment.payment_method.is_a? Spree::Gateway::StripeConnect end diff --git a/spec/lib/open_food_network/standing_order_payment_updater_spec.rb b/spec/lib/open_food_network/standing_order_payment_updater_spec.rb index bc38c12f68..07d9cbb23d 100644 --- a/spec/lib/open_food_network/standing_order_payment_updater_spec.rb +++ b/spec/lib/open_food_network/standing_order_payment_updater_spec.rb @@ -46,13 +46,24 @@ module OpenFoodNetwork describe "#update!" do let!(:payment){ create(:payment, amount: 10) } - context "when no payment is present" do - before { allow(updater).to receive(:payment) { nil } } - it { expect(updater.update!).to be nil } + context "when no pending payments are present" do + let(:payment_method) { create(:payment_method) } + let(:standing_order) { double(:standing_order, payment_method_id: payment_method.id) } + + before do + allow(order).to receive(:pending_payments).once { [] } + allow(order).to receive(:outstanding_balance) { 5 } + allow(order).to receive(:standing_order) { standing_order } + end + + it "creates a new payment on the order" do + expect{updater.update!}.to change(Spree::Payment, :count).by(1) + expect(order.payments.first.amount).to eq 5 + end end context "when a payment is present" do - before { allow(updater).to receive(:payment) { payment } } + before { allow(order).to receive(:pending_payments).once { [payment] } } context "when a credit card is not required" do before do