mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Add some logic to check whether a saved card has been selected before making a request from Stripe
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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"}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user