spree_gateway 3.7.2 → 3.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b3d2209f70f1e1ef9d3dfbaaf18dd0b738f54822839f5b4e37d4cd301fd8d7a
4
- data.tar.gz: da9c496a55da549b4fa7927788c5d1986e0593a150e3d049fa0dda685a07eab0
3
+ metadata.gz: b832706f129c2b7908c038c47257bad79e6d85461dcbf7f8866d3826758d03be
4
+ data.tar.gz: a40bd794bba10b1e0d5607d9819f3380c8cdf6e75fff2e349babc89696a25cd4
5
5
  SHA512:
6
- metadata.gz: 5d60b875f026e7cda13735c783e2ab2c83ff2a03a035827f3be3857b085c299161c69aba30fb3c57757e7dfa3f907afa7159b1fbd06667cabe0fc446820b7179
7
- data.tar.gz: bdcc15e27afd248137fbcbec3a0eb01ca5ecbb3f0feb662ae2e3290d777b47417722c341f25d35ce87fc8766d436d05d71e8125e5072a7eb0ffe8b29edc9da4f
6
+ metadata.gz: 50776548c2b0c3c3e1dcd9558137f8b8967f0147fba3655f37ff9bce37b13209a3c41b550c2f9a9fb84e5cd6add08ab1cc091f8ca99b843c7794572a27cf25e1
7
+ data.tar.gz: b47c03b664274987c52660429a327596450c8fd6594c511a33596e19d7e776beb2dc46f2f9388eed710603c21050843c7362dad64b0383a3c69b5860d27ef056
@@ -1,5 +1,5 @@
1
1
  module SpreeGateway
2
2
  def self.version
3
- '3.7.2'
3
+ '3.7.3'
4
4
  end
5
5
  end
@@ -0,0 +1,79 @@
1
+ <%= render "spree/admin/payments/source_forms/gateway", payment_method: payment_method, previous_cards: payment_method.reusable_sources(@order) %>
2
+
3
+ <script type="text/javascript" src="https://js.stripe.com/v2/"></script>
4
+ <script type="text/javascript">
5
+ Stripe.setPublishableKey("<%= payment_method.preferred_publishable_key %>");
6
+ </script>
7
+
8
+ <script>
9
+ var mapCC, stripeElementResponseHandler;
10
+
11
+ mapCC = function(ccType) {
12
+ if (ccType === 'MasterCard') {
13
+ return 'mastercard';
14
+ } else if (ccType === 'Visa') {
15
+ return 'visa';
16
+ } else if (ccType === 'American Express') {
17
+ return 'amex';
18
+ } else if (ccType === 'Discover') {
19
+ return 'discover';
20
+ } else if (ccType === 'Diners Club') {
21
+ return 'dinersclub';
22
+ } else if (ccType === 'JCB') {
23
+ return 'jcb';
24
+ }
25
+ };
26
+ stripeElementResponseHandler = function(status, response) {
27
+ var paymentMethodId, token;
28
+ if (response.error) {
29
+ $('#stripeError').html(response.error.message);
30
+ var param_map = {
31
+ number: '#card_number',
32
+ exp_month: '#card_expiry',
33
+ exp_year: '#card_expiry',
34
+ cvc: '#card_code'
35
+ }
36
+ if (response.error.param) {
37
+ errorField = Spree.stripeElementsPaymentMethod.find(param_map[response.error.param])
38
+ errorField.addClass('error');
39
+ errorField.parent().addClass('has-error');
40
+ }
41
+ return $('#stripeError').show();
42
+ } else {
43
+ Spree.stripeElementsPaymentMethod.find('#card_number<%= payment_method.id %>, #card_expiry<%= payment_method.id %>, #card_code<%= payment_method.id %>').prop("disabled", true);
44
+ Spree.stripeElementsPaymentMethod.find(".ccType").prop("disabled", false);
45
+ Spree.stripeElementsPaymentMethod.find(".ccType").val(mapCC(response.card.brand));
46
+ token = response['id'];
47
+ paymentMethodId = Spree.stripeElementsPaymentMethod.prop('id').split("_")[2];
48
+ Spree.stripeElementsPaymentMethod.append("<input type='hidden' class='stripeToken' name='payment_source[" + paymentMethodId + "][gateway_payment_profile_id]' value='" + token + "'/>");
49
+ Spree.stripeElementsPaymentMethod.append("<input type='hidden' class='stripeToken' name='payment_source[" + paymentMethodId + "][last_digits]' value='" + response.card.last4 + "'/>");
50
+ Spree.stripeElementsPaymentMethod.append("<input type='hidden' class='stripeToken' name='payment_source[" + paymentMethodId + "][month]' value='" + response.card.exp_month + "'/>");
51
+ Spree.stripeElementsPaymentMethod.append("<input type='hidden' class='stripeToken' name='payment_source[" + paymentMethodId + "][year]' value='" + response.card.exp_year + "'/>");
52
+ return Spree.stripeElementsPaymentMethod.parents("form").trigger('submit');
53
+ }
54
+ };
55
+
56
+ window.addEventListener('DOMContentLoaded', function() {
57
+ Spree.stripeElementsPaymentMethod = $('#payment_method_' + <%= payment_method.id %>);
58
+
59
+ Spree.ready(function() {
60
+ Spree.stripeElementsPaymentMethod.prepend("<div id='stripeError' class='errorExplanation alert alert-danger' style='display:none'></div>");
61
+ return $('#new_payment [data-hook=buttons]').click(function() {
62
+ var expiration, params;
63
+ $('#stripeError').hide();
64
+ Spree.stripeElementsPaymentMethod.find('#card_number, #card_expiry, #card_code').removeClass('error');
65
+ if (Spree.stripeElementsPaymentMethod.is(':visible')) {
66
+ expiration = $('.cardExpiry:visible').payment('cardExpiryVal');
67
+ params = $.extend({
68
+ number: $('.cardNumber:visible').val(),
69
+ cvc: $('.cardCode:visible').val(),
70
+ exp_month: expiration.month || 0,
71
+ exp_year: expiration.year || 0
72
+ }, Spree.stripeAdditionalInfo);
73
+ Stripe.card.createToken(params, stripeElementResponseHandler);
74
+ return false;
75
+ }
76
+ });
77
+ });
78
+ });
79
+ </script>
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Admin Panel Stripe elements payment', type: :feature, :js => true do
4
+ stub_authorization!
5
+
6
+ let!(:country) { create(:country, :states_required => true) }
7
+ let!(:state) { create(:state, :country => country) }
8
+ let!(:shipping_method) { create(:shipping_method) }
9
+ let!(:stock_location) { create(:stock_location) }
10
+ let!(:mug) { create(:product, :name => 'RoR Mug') }
11
+ let!(:zone) { create(:zone) }
12
+ let!(:stripe_elements_payment_method) do
13
+ Spree::Gateway::StripeElementsGateway.create!(
14
+ :name => 'Stripe Element',
15
+ :preferred_secret_key => 'sk_test_VCZnDv3GLU15TRvn8i2EsaAN',
16
+ :preferred_publishable_key => 'pk_test_Cuf0PNtiAkkMpTVC2gwYDMIg'
17
+ )
18
+ end
19
+
20
+ let!(:order) { OrderWalkthrough.up_to(:payment) }
21
+ before { visit spree.new_admin_order_payment_path(order.number) }
22
+
23
+ it 'can process a valid payment' do
24
+ fill_in_stripe_payment
25
+ wait_for { !page.has_current_path?(spree.admin_order_payments_path(order.number)) }
26
+
27
+ expect(page.body).to have_content('Payment has been successfully created!')
28
+ expect(page).to have_current_path spree.admin_order_payments_path(order.number)
29
+ end
30
+
31
+ if Spree.version.to_f >= 4.1
32
+ it 'shows an error with an invalid card name' do
33
+ fill_in_stripe_payment(true)
34
+
35
+ expect(page).to have_content("Credit card Name can't be blank")
36
+ expect(page).to have_current_path spree.admin_order_payments_path(order.number)
37
+ end
38
+ else
39
+ it 'can proces valid payment with invalid card name' do
40
+ fill_in_stripe_payment(true)
41
+ wait_for { !page.has_current_path?(spree.admin_order_payments_path(order.number)) }
42
+
43
+ expect(page.body).to have_content('Payment has been successfully created!')
44
+ expect(page).to have_current_path spree.admin_order_payments_path(order.number)
45
+ end
46
+ end
47
+
48
+ it 'shows an error with an invalid card number' do
49
+ fill_in_stripe_payment(false, true)
50
+
51
+ expect(page).to have_content('The card number is not a valid credit card number.')
52
+ expect(page).to have_current_path spree.new_admin_order_payment_path(order.number)
53
+ end
54
+
55
+ it 'shows an error with an invalid card code' do
56
+ fill_in_stripe_payment(false, false, true)
57
+
58
+ expect(page).to have_content("Your card's security code is invalid.")
59
+ expect(page).to have_current_path spree.new_admin_order_payment_path(order.number)
60
+ end
61
+
62
+ it 'shows an error with an invalid card expiration' do
63
+ fill_in_stripe_payment(false, false, false, true)
64
+
65
+ if Spree.version.to_f >= 4.1
66
+ expect(page).to have_content('Credit card Month is not a number')
67
+ expect(page).to have_content('Credit card Year is not a number')
68
+ expect(page).to have_current_path spree.admin_order_payments_path(order.number)
69
+ else
70
+ expect(page).to have_content("Your card's expiration year is invalid.")
71
+ expect(page).to have_current_path spree.new_admin_order_payment_path(order.number)
72
+ end
73
+ end
74
+
75
+ def fill_in_stripe_payment(invalid_name = false, invalid_number = false, invalid_code = false, invalid_expiration = false)
76
+ fill_in 'Name *', with: invalid_name ? '' : 'Stripe Elements Gateway Payment'
77
+ fill_in_card_number(invalid_number)
78
+ fill_in 'Card Code *', with: invalid_code ? '1' : '123'
79
+ fill_in_card_expiration(invalid_expiration)
80
+
81
+ click_button "Update"
82
+ end
83
+
84
+ def fill_in_card_number(invalid_number)
85
+ number = invalid_number ? '123' : '4242 4242 4242 4242'
86
+ fill_in_field('Card Number *', '#card_number1', number)
87
+ end
88
+
89
+ def fill_in_card_expiration(invalid_expiration)
90
+ card_expiry = invalid_expiration ? '01 / ' : "01 / #{Time.current.year + 1}"
91
+ fill_in_field('Expiration *', '#card_expiry1', card_expiry)
92
+ end
93
+
94
+ def fill_in_field(field_name, field_id, number)
95
+ until page.find(field_id).value == number
96
+ fill_in field_name, with: number
97
+ end
98
+ end
99
+ end
@@ -23,6 +23,7 @@ require 'spree/testing_support/factories'
23
23
  require 'spree/testing_support/order_walkthrough'
24
24
  require 'spree/testing_support/preferences'
25
25
  require 'spree/testing_support/capybara_ext'
26
+ require 'spree/testing_support/authorization_helpers'
26
27
 
27
28
  FactoryBot.find_definitions
28
29
 
@@ -0,0 +1,15 @@
1
+ if Spree.version.to_f < 3.7
2
+ module CapybaraHelper
3
+ def wait_for(options = {})
4
+ default_options = { error: nil, seconds: 5 }.merge(options)
5
+
6
+ Selenium::WebDriver::Wait.new(timeout: default_options[:seconds]).until { yield }
7
+ rescue Selenium::WebDriver::Error::TimeOutError
8
+ default_options[:error].nil? ? false : raise(default_options[:error])
9
+ end
10
+ end
11
+
12
+ RSpec.configure do |config|
13
+ config.include CapybaraHelper, type: :feature
14
+ end
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_gateway
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.2
4
+ version: 3.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spree Commerce
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-24 00:00:00.000000000 Z
11
+ date: 2020-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -410,7 +410,6 @@ files:
410
410
  - db/migrate/20130415222802_update_balanced_payment_method_type.rb
411
411
  - db/migrate/20131008221012_update_paypal_payment_method_type.rb
412
412
  - db/migrate/20131112133401_migrate_stripe_preferences.rb
413
- - gemfiles/spree_3_2.gemfile
414
413
  - gemfiles/spree_3_5.gemfile
415
414
  - gemfiles/spree_3_7.gemfile
416
415
  - gemfiles/spree_4_0.gemfile
@@ -425,12 +424,14 @@ files:
425
424
  - lib/views/backend/spree/admin/log_entries/_stripe.html.erb
426
425
  - lib/views/backend/spree/admin/payments/source_forms/_quickcheckout.html.erb
427
426
  - lib/views/backend/spree/admin/payments/source_forms/_stripe.html.erb
427
+ - lib/views/backend/spree/admin/payments/source_forms/_stripe_elements.html.erb
428
428
  - lib/views/backend/spree/admin/payments/source_views/_stripe.html.erb
429
429
  - lib/views/frontend/spree/checkout/payment/_stripe.html.erb
430
430
  - lib/views/frontend/spree/checkout/payment/_stripe_additional_info.html.erb
431
431
  - lib/views/frontend/spree/checkout/payment/_stripe_apple_pay.html.erb
432
432
  - lib/views/frontend/spree/checkout/payment/_stripe_elements.html.erb
433
433
  - script/rails
434
+ - spec/features/admin/stripe_elements_payment_spec.rb
434
435
  - spec/features/stripe_checkout_spec.rb
435
436
  - spec/models/gateway/authorize_net_cim_spec.rb
436
437
  - spec/models/gateway/authorize_net_spec.rb
@@ -460,6 +461,7 @@ files:
460
461
  - spec/models/spree/order_spec.rb
461
462
  - spec/requests/apple_pay_domain_verification.rb
462
463
  - spec/spec_helper.rb
464
+ - spec/support/capybara_helper.rb
463
465
  - spec/support/wait_for_stripe.rb
464
466
  - spree_gateway.gemspec
465
467
  homepage: https://spreecommerce.org
@@ -487,6 +489,7 @@ signing_key:
487
489
  specification_version: 4
488
490
  summary: Additional Payment Gateways for Spree Commerce
489
491
  test_files:
492
+ - spec/features/admin/stripe_elements_payment_spec.rb
490
493
  - spec/features/stripe_checkout_spec.rb
491
494
  - spec/models/gateway/authorize_net_cim_spec.rb
492
495
  - spec/models/gateway/authorize_net_spec.rb
@@ -516,4 +519,5 @@ test_files:
516
519
  - spec/models/spree/order_spec.rb
517
520
  - spec/requests/apple_pay_domain_verification.rb
518
521
  - spec/spec_helper.rb
522
+ - spec/support/capybara_helper.rb
519
523
  - spec/support/wait_for_stripe.rb
@@ -1,8 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails-controller-testing"
6
- gem "spree", "~> 3.2.0"
7
-
8
- gemspec path: "../"