solidus_stripe 4.2.0 → 4.3.0
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 +4 -4
- data/.circleci/config.yml +5 -0
- data/.gem_release.yml +1 -1
- data/.github/stale.yml +4 -4
- data/.github_changelog_generator +2 -0
- data/.gitignore +3 -2
- data/.rubocop.yml +1 -3
- data/CHANGELOG.md +94 -17
- data/Gemfile +3 -9
- data/LICENSE +2 -1
- data/README.md +52 -47
- data/app/assets/javascripts/spree/frontend/solidus_stripe/stripe-cart-page-checkout.js +1 -0
- data/app/assets/javascripts/spree/frontend/solidus_stripe/stripe-payment-request-button-shared.js +2 -1
- data/app/controllers/solidus_stripe/payment_request_controller.rb +11 -1
- data/app/decorators/models/spree/refund_decorator.rb +1 -1
- data/app/models/solidus_stripe/address_from_params_service.rb +20 -8
- data/app/models/solidus_stripe/create_intents_payment_service.rb +2 -1
- data/app/models/spree/payment_method/stripe_credit_card.rb +26 -4
- data/bin/rails +4 -12
- data/bin/rails-engine +13 -0
- data/bin/rails-sandbox +16 -0
- data/bin/sandbox +2 -0
- data/config/locales/en.yml +5 -0
- data/lib/generators/solidus_stripe/install/install_generator.rb +1 -5
- data/lib/solidus_stripe/configuration.rb +21 -0
- data/lib/solidus_stripe/engine.rb +3 -14
- data/lib/solidus_stripe/testing_support/card_input_helper.rb +34 -0
- data/lib/solidus_stripe/{factories.rb → testing_support/factories.rb} +0 -0
- data/lib/solidus_stripe/version.rb +1 -1
- data/lib/solidus_stripe.rb +5 -5
- data/lib/views/frontend/spree/checkout/payment/v2/_javascript.html.erb +1 -1
- data/lib/views/frontend/spree/checkout/payment/v3/_form_elements.html.erb +2 -1
- data/solidus_stripe.gemspec +5 -5
- data/spec/features/stripe_checkout_spec.rb +31 -111
- data/spec/models/solidus_stripe/address_from_params_service_spec.rb +17 -6
- data/spec/models/solidus_stripe/create_intents_payment_service_spec.rb +1 -1
- data/spec/models/spree/payment_method/stripe_credit_card_spec.rb +29 -0
- data/spec/requests/payment_requests_spec.rb +152 -0
- data/spec/spec_helper.rb +16 -5
- data/spec/support/solidus_address_helper.rb +2 -2
- metadata +24 -16
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
RSpec.describe "Payment Request", type: :request do
|
|
6
|
+
describe "POST /stripe/update_order" do
|
|
7
|
+
it "responds with { success: true } when the order is correctly updated" do
|
|
8
|
+
order = create(:order_ready_to_complete)
|
|
9
|
+
allow_any_instance_of(SolidusStripe::PaymentRequestController).to receive(:current_order).and_return(order)
|
|
10
|
+
|
|
11
|
+
with_disabled_forgery_protection do
|
|
12
|
+
post "/stripe/update_order", params: stripe_update_request_params(order: order)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
json = JSON.parse(response.body)
|
|
16
|
+
expect(json["success"]).to be_truthy
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context "when phone number is provided as param and already set on the address" do
|
|
20
|
+
it "overrides the address field" do
|
|
21
|
+
order = create(:order_ready_to_complete)
|
|
22
|
+
allow_any_instance_of(SolidusStripe::PaymentRequestController).to receive(:current_order).and_return(order)
|
|
23
|
+
|
|
24
|
+
expect {
|
|
25
|
+
with_disabled_forgery_protection do
|
|
26
|
+
post "/stripe/update_order", params: stripe_update_request_params(order: order, shipping_address: default_shipping_address(phone: nil), phone: '911')
|
|
27
|
+
end
|
|
28
|
+
}.to change { order.shipping_address.phone }.to('911')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "when phone number is provided both as shipping address param and main param, and already set on the address" do
|
|
33
|
+
it "overrides the address field giving precedence to the shipping address param" do
|
|
34
|
+
order = create(:order_ready_to_complete)
|
|
35
|
+
allow_any_instance_of(SolidusStripe::PaymentRequestController).to receive(:current_order).and_return(order)
|
|
36
|
+
|
|
37
|
+
expect {
|
|
38
|
+
with_disabled_forgery_protection do
|
|
39
|
+
post "/stripe/update_order", params: stripe_update_request_params(order: order, shipping_address: default_shipping_address(phone: '555'), phone: '911')
|
|
40
|
+
end
|
|
41
|
+
}.to change { order.shipping_address.phone }.to('555')
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context "when phone number is not required, not provided as param and not set on the shipping address" do
|
|
46
|
+
it "does not populate the address field" do
|
|
47
|
+
with_address_phone_not_required
|
|
48
|
+
order = create(:order_ready_to_complete, shipping_address: create(:address, phone: nil))
|
|
49
|
+
allow_any_instance_of(SolidusStripe::PaymentRequestController).to receive(:current_order).and_return(order)
|
|
50
|
+
|
|
51
|
+
expect {
|
|
52
|
+
with_disabled_forgery_protection do
|
|
53
|
+
post "/stripe/update_order", params: stripe_update_request_params(order: order, shipping_address: default_shipping_address(phone: nil), phone: nil)
|
|
54
|
+
end
|
|
55
|
+
}.not_to change { order.shipping_address.phone }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
context "when phone number is not required, provided as param and not set on the shipping address" do
|
|
60
|
+
it "populates the address field with the phone passed as param" do
|
|
61
|
+
with_address_phone_not_required
|
|
62
|
+
order = create(:order_ready_to_complete, shipping_address: create(:address, phone: nil))
|
|
63
|
+
allow_any_instance_of(SolidusStripe::PaymentRequestController).to receive(:current_order).and_return(order)
|
|
64
|
+
|
|
65
|
+
expect {
|
|
66
|
+
with_disabled_forgery_protection do
|
|
67
|
+
post "/stripe/update_order", params: stripe_update_request_params(order: order, shipping_address: default_shipping_address(phone: nil), phone: '911')
|
|
68
|
+
end
|
|
69
|
+
}.to change { order.shipping_address.phone }.from(nil).to('911')
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
context "when phone number is not required, provided as param but already set on the shipping address" do
|
|
74
|
+
it "populates the address field with the phone passed in the shipping field" do
|
|
75
|
+
with_address_phone_not_required
|
|
76
|
+
order = create(:order_ready_to_complete, shipping_address: create(:address, phone: nil))
|
|
77
|
+
allow_any_instance_of(SolidusStripe::PaymentRequestController).to receive(:current_order).and_return(order)
|
|
78
|
+
|
|
79
|
+
expect {
|
|
80
|
+
with_disabled_forgery_protection do
|
|
81
|
+
post "/stripe/update_order", params: stripe_update_request_params(order: order, shipping_address: default_shipping_address(phone: '555'), phone: '911')
|
|
82
|
+
end
|
|
83
|
+
}.to change { order.shipping_address.phone }.from(nil).to('555')
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
private
|
|
89
|
+
|
|
90
|
+
def with_address_phone_not_required
|
|
91
|
+
if Spree::Config.respond_to?(:address_requires_phone)
|
|
92
|
+
stub_spree_preferences(address_requires_phone: false)
|
|
93
|
+
else
|
|
94
|
+
allow_any_instance_of(Spree::Address).to receive(:require_phone?).and_return(false)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def with_disabled_forgery_protection
|
|
99
|
+
original_allow_forgery_protection_value = ActionController::Base.allow_forgery_protection
|
|
100
|
+
ActionController::Base.allow_forgery_protection = false
|
|
101
|
+
|
|
102
|
+
yield
|
|
103
|
+
|
|
104
|
+
ActionController::Base.allow_forgery_protection = original_allow_forgery_protection_value
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def stripe_update_request_params(
|
|
108
|
+
order:,
|
|
109
|
+
shipping_address: nil,
|
|
110
|
+
name: 'Clark Kent',
|
|
111
|
+
phone: '555-555-0199'
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
{
|
|
115
|
+
shipping_address: shipping_address || default_shipping_address,
|
|
116
|
+
shipping_option: {
|
|
117
|
+
id: order.shipments.first.shipping_rates.first.shipping_method.id
|
|
118
|
+
},
|
|
119
|
+
name: name,
|
|
120
|
+
phone: phone,
|
|
121
|
+
email: order.email
|
|
122
|
+
}
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def default_shipping_address(
|
|
126
|
+
country: nil,
|
|
127
|
+
region: nil,
|
|
128
|
+
recipient: 'Clark Kent',
|
|
129
|
+
city: 'Metropolis',
|
|
130
|
+
postal_code: '12345',
|
|
131
|
+
address_line: ['12, Lincoln Rd'],
|
|
132
|
+
phone: '555-555-0199'
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
if country.blank? || region.blank?
|
|
136
|
+
state = create(:state)
|
|
137
|
+
|
|
138
|
+
country ||= state.country.iso
|
|
139
|
+
region ||= state.abbr
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
{
|
|
143
|
+
country: country,
|
|
144
|
+
region: region,
|
|
145
|
+
recipient: recipient,
|
|
146
|
+
city: city,
|
|
147
|
+
postalCode: postal_code,
|
|
148
|
+
addressLine: address_line,
|
|
149
|
+
phone: phone
|
|
150
|
+
}
|
|
151
|
+
end
|
|
152
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -6,21 +6,32 @@ ENV['RAILS_ENV'] = 'test'
|
|
|
6
6
|
# Run Coverage report
|
|
7
7
|
require 'solidus_dev_support/rspec/coverage'
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
# Create the dummy app if it's still missing.
|
|
10
|
+
dummy_env = "#{__dir__}/dummy/config/environment.rb"
|
|
11
|
+
system 'bin/rake extension:test_app' unless File.exist? dummy_env
|
|
12
|
+
require dummy_env
|
|
10
13
|
|
|
11
14
|
# Requires factories and other useful helpers defined in spree_core.
|
|
12
15
|
require 'solidus_dev_support/rspec/feature_helper'
|
|
13
16
|
|
|
14
17
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
15
18
|
# in spec/support/ and its subdirectories.
|
|
16
|
-
Dir[
|
|
19
|
+
Dir["#{__dir__}/support/**/*.rb"].sort.each { |f| require f }
|
|
17
20
|
|
|
18
|
-
# Requires factories defined in lib/solidus_stripe/factories.rb
|
|
19
|
-
|
|
21
|
+
# Requires factories defined in lib/solidus_stripe/testing_support/factories.rb
|
|
22
|
+
SolidusDevSupport::TestingSupport::Factories.load_for(SolidusStripe::Engine)
|
|
23
|
+
|
|
24
|
+
# Requires card input helper defined in lib/solidus_stripe/testing_support/card_input_helper.rb
|
|
25
|
+
require 'solidus_stripe/testing_support/card_input_helper'
|
|
20
26
|
|
|
21
27
|
RSpec.configure do |config|
|
|
22
28
|
config.infer_spec_type_from_file_location!
|
|
23
|
-
FactoryBot.find_definitions
|
|
24
29
|
config.use_transactional_fixtures = false
|
|
30
|
+
|
|
25
31
|
config.include SolidusAddressNameHelper, type: :feature
|
|
32
|
+
config.include SolidusCardInputHelper, type: :feature
|
|
33
|
+
|
|
34
|
+
if Spree.solidus_gem_version < Gem::Version.new('2.11')
|
|
35
|
+
config.extend Spree::TestingSupport::AuthorizationHelpers::Request, type: :system
|
|
36
|
+
end
|
|
26
37
|
end
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# Since https://github.com/solidusio/solidus/pull/3524 was merged,
|
|
4
4
|
# we need to verify if we're using the single "Name" field or the
|
|
5
|
-
#
|
|
5
|
+
# previous first/last name combination.
|
|
6
6
|
module SolidusAddressNameHelper
|
|
7
7
|
def fill_in_name
|
|
8
|
-
if
|
|
8
|
+
if SolidusSupport.combined_first_and_last_name_in_address?
|
|
9
9
|
fill_in "Name", with: "Han Solo"
|
|
10
10
|
else
|
|
11
11
|
fill_in "First Name", with: "Han"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: solidus_stripe
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Solidus Team
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-10-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: solidus_core
|
|
@@ -19,7 +19,7 @@ dependencies:
|
|
|
19
19
|
version: '2.3'
|
|
20
20
|
- - "<"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '
|
|
22
|
+
version: '4'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -29,49 +29,49 @@ dependencies:
|
|
|
29
29
|
version: '2.3'
|
|
30
30
|
- - "<"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
32
|
+
version: '4'
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: solidus_support
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '0.
|
|
39
|
+
version: '0.8'
|
|
40
40
|
type: :runtime
|
|
41
41
|
prerelease: false
|
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
43
|
requirements:
|
|
44
44
|
- - "~>"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '0.
|
|
46
|
+
version: '0.8'
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: activemerchant
|
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - ">="
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '1.
|
|
53
|
+
version: '1.105'
|
|
54
54
|
type: :runtime
|
|
55
55
|
prerelease: false
|
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - ">="
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '1.
|
|
60
|
+
version: '1.105'
|
|
61
61
|
- !ruby/object:Gem::Dependency
|
|
62
62
|
name: solidus_dev_support
|
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
|
-
- - "
|
|
65
|
+
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '
|
|
67
|
+
version: '2.3'
|
|
68
68
|
type: :development
|
|
69
69
|
prerelease: false
|
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
|
-
- - "
|
|
72
|
+
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '
|
|
74
|
+
version: '2.3'
|
|
75
75
|
description: Stripe Payment Method for Solidus
|
|
76
76
|
email: contact@solidus.io
|
|
77
77
|
executables: []
|
|
@@ -81,6 +81,7 @@ files:
|
|
|
81
81
|
- ".circleci/config.yml"
|
|
82
82
|
- ".gem_release.yml"
|
|
83
83
|
- ".github/stale.yml"
|
|
84
|
+
- ".github_changelog_generator"
|
|
84
85
|
- ".gitignore"
|
|
85
86
|
- ".rspec"
|
|
86
87
|
- ".rubocop.yml"
|
|
@@ -111,18 +112,23 @@ files:
|
|
|
111
112
|
- bin/console
|
|
112
113
|
- bin/r
|
|
113
114
|
- bin/rails
|
|
115
|
+
- bin/rails-engine
|
|
116
|
+
- bin/rails-sandbox
|
|
114
117
|
- bin/rake
|
|
115
118
|
- bin/sandbox
|
|
116
119
|
- bin/sandbox_rails
|
|
117
120
|
- bin/setup
|
|
121
|
+
- config/locales/en.yml
|
|
118
122
|
- config/routes.rb
|
|
119
123
|
- db/migrate/20181010123508_update_stripe_payment_method_type_to_credit_card.rb
|
|
120
124
|
- db/seeds.rb
|
|
121
125
|
- lib/assets/stylesheets/spree/frontend/solidus_stripe.scss
|
|
122
126
|
- lib/generators/solidus_stripe/install/install_generator.rb
|
|
123
127
|
- lib/solidus_stripe.rb
|
|
128
|
+
- lib/solidus_stripe/configuration.rb
|
|
124
129
|
- lib/solidus_stripe/engine.rb
|
|
125
|
-
- lib/solidus_stripe/
|
|
130
|
+
- lib/solidus_stripe/testing_support/card_input_helper.rb
|
|
131
|
+
- lib/solidus_stripe/testing_support/factories.rb
|
|
126
132
|
- lib/solidus_stripe/version.rb
|
|
127
133
|
- lib/tasks/solidus_stripe/db/seed.rake
|
|
128
134
|
- lib/views/api/spree/api/payments/source_views/_stripe.json.jbuilder
|
|
@@ -144,6 +150,7 @@ files:
|
|
|
144
150
|
- spec/models/solidus_stripe/prepare_order_for_payment_service_spec.rb
|
|
145
151
|
- spec/models/solidus_stripe/shipping_rates_service_spec.rb
|
|
146
152
|
- spec/models/spree/payment_method/stripe_credit_card_spec.rb
|
|
153
|
+
- spec/requests/payment_requests_spec.rb
|
|
147
154
|
- spec/spec_helper.rb
|
|
148
155
|
- spec/support/solidus_address_helper.rb
|
|
149
156
|
homepage: https://github.com/solidusio/solidus_stripe#readme
|
|
@@ -159,16 +166,16 @@ require_paths:
|
|
|
159
166
|
- lib
|
|
160
167
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
168
|
requirements:
|
|
162
|
-
- - "
|
|
169
|
+
- - ">="
|
|
163
170
|
- !ruby/object:Gem::Version
|
|
164
|
-
version:
|
|
171
|
+
version: 2.4.0
|
|
165
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
173
|
requirements:
|
|
167
174
|
- - ">="
|
|
168
175
|
- !ruby/object:Gem::Version
|
|
169
176
|
version: '0'
|
|
170
177
|
requirements: []
|
|
171
|
-
rubygems_version: 3.
|
|
178
|
+
rubygems_version: 3.2.20
|
|
172
179
|
signing_key:
|
|
173
180
|
specification_version: 4
|
|
174
181
|
summary: Stripe Payment Method for Solidus
|
|
@@ -179,5 +186,6 @@ test_files:
|
|
|
179
186
|
- spec/models/solidus_stripe/prepare_order_for_payment_service_spec.rb
|
|
180
187
|
- spec/models/solidus_stripe/shipping_rates_service_spec.rb
|
|
181
188
|
- spec/models/spree/payment_method/stripe_credit_card_spec.rb
|
|
189
|
+
- spec/requests/payment_requests_spec.rb
|
|
182
190
|
- spec/spec_helper.rb
|
|
183
191
|
- spec/support/solidus_address_helper.rb
|