From 8437ba9fcc0ffbcf09e8b8695ca45c7bd0210881 Mon Sep 17 00:00:00 2001 From: Luuk Veenis Date: Tue, 1 Aug 2017 16:26:21 -0700 Subject: [PATCH] Subtract store credit from total sent to PayBright Since PayBright doesn't allow us to modify payments before capturing them like some other payment methods, we need to ensure we send them the correct amount right away. --- lib/solidus_paybright/params_helper.rb | 2 +- .../solidus_paybright/params_helper_spec.rb | 22 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/solidus_paybright/params_helper.rb b/lib/solidus_paybright/params_helper.rb index 9fb200b..dd90a26 100644 --- a/lib/solidus_paybright/params_helper.rb +++ b/lib/solidus_paybright/params_helper.rb @@ -15,7 +15,7 @@ def build_redirect_params params = { # mandatory parameters "x_account_id" => credentials[:api_key], - "x_amount" => order.total.to_money.to_s, + "x_amount" => (order.total - order.total_applicable_store_credit).to_money.to_s, "x_currency" => order.currency, "x_reference" => @payment.id, "x_shop_country" => credentials[:shop_country_code], diff --git a/spec/lib/solidus_paybright/params_helper_spec.rb b/spec/lib/solidus_paybright/params_helper_spec.rb index fe3cd90..e91467e 100644 --- a/spec/lib/solidus_paybright/params_helper_spec.rb +++ b/spec/lib/solidus_paybright/params_helper_spec.rb @@ -1,8 +1,10 @@ require "spec_helper" describe SolidusPaybright::ParamsHelper do - let(:payment_method) { create(:paybright_payment_method, preference_source: "paybright_credentials") } - let(:payment) { create(:paybright_payment, payment_method: payment_method) } + let(:order) { build_stubbed(:order, total: 110, number: "R123456789", email: "user@example.com") } + let(:payment_method) { build_stubbed(:paybright_payment_method, preference_source: "paybright_credentials") } + let(:payment) { build_stubbed(:paybright_payment, order: order, payment_method: payment_method) } + subject { described_class.new(payment) } describe "#new" do @@ -13,14 +15,6 @@ end describe "#build_redirect_params" do - before do - allow_any_instance_of(Spree::Order).to receive_messages( - total: 110, - number: "R123456789", - email: "user@example.com" - ) - end - it "build the correct parameters for the order" do params = subject.build_redirect_params expect(params["x_account_id"]).to eq("api-key") @@ -40,5 +34,13 @@ allow_any_instance_of(Spree::Order).to receive_messages email: "" expect(subject.build_redirect_params.key?("x_customer_email")).to be false end + + context "order has store credit applied" do + before { allow(order).to receive(:total_applicable_store_credit) { 10 } } + + it "subtracts the credit from the total passed to Paybright" do + expect(subject.build_redirect_params["x_amount"]).to eq("100.00") + end + end end end