Provide credit card brand to Pin Payments

Spree replaced the Ruby code providing the credit card brand with a
jquery plugin providing it on the checkout screen.

I re-added Ruby code because it's easier and more robust than updating
the user interface with new Javascript.
This commit is contained in:
Maikel Linke
2020-07-15 17:13:46 +10:00
parent a763a5ee0b
commit 25155cab18
2 changed files with 34 additions and 0 deletions

View File

@@ -12,6 +12,8 @@ module Checkout
move_payment_source_to_payment_attributes!
fill_in_card_type
set_amount_in_payments_attributes
construct_saved_card_attributes if @params[:order][:existing_card_id]
@@ -31,6 +33,18 @@ module Checkout
@params[:order][:payments_attributes].first[:source_attributes] = payment_source_params
end
def fill_in_card_type
payment = params[:order][:payments_attributes]&.first&.dig(:source_attributes)
return if payment&.dig(:number).blank?
payment[:cc_type] ||= card_brand(payment[:number])
end
def card_brand(number)
ActiveMerchant::Billing::CreditCard.brand?(number)
end
def delete_payment_source_params!
@params.delete(:payment_source)[
@params[:order][:payments_attributes].first[:payment_method_id].underscore

View File

@@ -36,6 +36,26 @@ describe Checkout::FormDataAdapter do
end
end
describe "and a credit card is provided" do
before do
params[:order][:payments_attributes].first[:source_attributes] = {number: "4444333322221111"}
end
it "fills in missing credit card brand" do
expect(adapter.params[:order][:payments_attributes].first[:source_attributes][:cc_type]).to eq "visa"
end
it "leaves an existing credit card brand" do
params[:order][:payments_attributes].first[:source_attributes][:cc_type] = "test"
expect(adapter.params[:order][:payments_attributes].first[:source_attributes][:cc_type]).to eq "test"
end
it "doesn't touch the credit card brand without a number" do
params[:order][:payments_attributes].first[:source_attributes][:number] = ""
expect(adapter.params[:order][:payments_attributes].first[:source_attributes].key?(:cc_type)).to eq false
end
end
describe "and existing credit card is provided" do
before { params[:order][:existing_card_id] = credit_card.id }