Add some logic to check whether a saved card has been selected before making a request from Stripe

This commit is contained in:
stveep
2017-03-19 22:09:16 +00:00
committed by Rob Harrington
parent 300dc3084c
commit 12f4f2d17a
4 changed files with 29 additions and 15 deletions

View File

@@ -5,7 +5,7 @@ Darkswarm.factory 'Checkout', ($injector, CurrentOrder, ShippingMethods, StripeJ
order: CurrentOrder.order
purchase: ->
if @paymentMethod()?.method_type == 'stripe'
if @paymentMethod()?.method_type == 'stripe' && !@secrets.selected_card
StripeJS.requestToken(@secrets, @submit)
else
@submit()
@@ -60,14 +60,21 @@ Darkswarm.factory 'Checkout', ($injector, CurrentOrder, ShippingMethods, StripeJ
}
if @paymentMethod()?.method_type == 'stripe'
angular.extend munged_order.payments_attributes[0], {
source_attributes:
gateway_payment_profile_id: @secrets.token
cc_type: @secrets.cc_type
last_digits: @secrets.card.last4
month: @secrets.card.exp_month
year: @secrets.card.exp_year
}
if @secrets.selected_card
angular.extend munged_order.payments_attributes[0], {
source_attributes:
id: @secrets.selected_card
type: 'Spree::CreditCard'
}
else
angular.extend munged_order.payments_attributes[0], {
source_attributes:
gateway_payment_profile_id: @secrets.token
cc_type: @secrets.cc_type
last_digits: @secrets.card.last4
month: @secrets.card.exp_month
year: @secrets.card.exp_year
}
munged_order

View File

@@ -10,17 +10,17 @@
%input{type: :text, disabled: true, "ng-value" => "order.bill_address.lastname"}
.small-6.columns
= validated_input t(:card_number), "secrets.card_number", "ng-required" => "!selected_card", maxlength: 19, autocomplete: "off", "ng-disabled" => "!!selected_card"
= validated_input t(:card_number), "secrets.card_number", "ng-required" => "!secrets.selected_card", maxlength: 19, autocomplete: "off", "ng-disabled" => "!!secrets.selected_card"
.small-6.columns
= validated_input t(:card_securitycode), "secrets.card_verification_value", "ng-required" => "!selected_card", "ng-disabled" => "!!selected_card"
= validated_input t(:card_securitycode), "secrets.card_verification_value", "ng-required" => "!secrets.selected_card", "ng-disabled" => "!!secrets.selected_card"
.row
.small-12.columns
%label{for: "secrets.card_month"}
= t :card_expiry_date, "ng-disabled" => "!!selected_card"
= t :card_expiry_date, "ng-disabled" => "!!secrets.selected_card"
.row
.small-6.columns
%select{"ng-model" => "secrets.card_month", "ng-options" => "currMonth.value as currMonth.key for currMonth in months", name: "secrets.card_month", "ng-required" => "!selected_card", "ng-disabled" => "!!selected_card"}
%select{"ng-model" => "secrets.card_month", "ng-options" => "currMonth.value as currMonth.key for currMonth in months", name: "secrets.card_month", "ng-required" => "!secrets.selected_card", "ng-disabled" => "!!secrets.selected_card"}
.small-6.columns
%select{"ng-model" => "secrets.card_year", "ng-options" => "year for year in years", name: "secrets.card_year", "ng-required" => "!selected_card", "ng-disabled" => "!!selected_card"}
%select{"ng-model" => "secrets.card_year", "ng-options" => "year for year in years", name: "secrets.card_year", "ng-required" => "!secrets.selected_card", "ng-disabled" => "!!secrets.selected_card"}

View File

@@ -2,7 +2,7 @@
.small-12.columns
%label
= t :previously_used_credit_cards
%select{"ng-model" => "selected_card", "ng-options" => "card.id as card.formatted for card in savedCreditCards", name: "selected_card", required: false}
%select{"ng-model" => "secrets.selected_card", "ng-options" => "card.id as card.formatted for card in savedCreditCards", name: "selected_card", required: false}
= render "spree/checkout/payment/gateway", payment_method: payment_method

View File

@@ -125,6 +125,13 @@ describe 'Checkout service', ->
Checkout.purchase()
expect(StripeJS.requestToken).toHaveBeenCalled()
it "doesn't hit Stripe when reusing a credit card", inject (StripeJS) ->
spyOn(StripeJS, "requestToken")
Checkout.secrets.selected_card = 1
Checkout.purchase()
expect(StripeJS.requestToken).not.toHaveBeenCalled()
describe "data preprocessing", ->
beforeEach ->
Checkout.order.payment_method_id = 99