solidus_paypal_commerce_platform 0.1.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.github/stale.yml +4 -4
  3. data/.github_changelog_generator +2 -0
  4. data/.rubocop.yml +5 -14
  5. data/CHANGELOG.md +181 -0
  6. data/README.md +26 -25
  7. data/app/controllers/solidus_paypal_commerce_platform/orders_controller.rb +8 -5
  8. data/app/decorators/models/solidus_paypal_commerce_platform/spree/address_decorator.rb +17 -0
  9. data/app/jobs/solidus_paypal_commerce_platform/webhook_job.rb +3 -3
  10. data/app/models/solidus_paypal_commerce_platform/payment_method.rb +4 -1
  11. data/app/models/solidus_paypal_commerce_platform/paypal_address.rb +19 -20
  12. data/app/models/solidus_paypal_commerce_platform/paypal_order.rb +3 -3
  13. data/app/models/solidus_paypal_commerce_platform/pricing_options.rb +1 -1
  14. data/app/models/solidus_paypal_commerce_platform/state_guesser.rb +1 -1
  15. data/bin/sandbox +1 -1
  16. data/lib/generators/solidus_paypal_commerce_platform/install/install_generator.rb +9 -0
  17. data/lib/generators/solidus_paypal_commerce_platform/install/templates/initializer.rb +6 -0
  18. data/lib/solidus_paypal_commerce_platform.rb +7 -5
  19. data/lib/solidus_paypal_commerce_platform/client.rb +2 -2
  20. data/lib/solidus_paypal_commerce_platform/configuration.rb +4 -0
  21. data/lib/solidus_paypal_commerce_platform/{factories.rb → testing_support/factories.rb} +0 -0
  22. data/lib/solidus_paypal_commerce_platform/version.rb +1 -1
  23. data/lib/views/frontend/solidus_paypal_commerce_platform/shared/_javascript_sdk_tag.html.erb +6 -0
  24. data/lib/views/frontend/spree/checkout/payment/_paypal_commerce_platform.html.erb +6 -1
  25. data/lib/views/frontend/spree/orders/payment/_paypal_commerce_platform.html.erb +3 -2
  26. data/lib/views/frontend/spree/products/payment/_paypal_commerce_platform.html.erb +3 -2
  27. data/solidus_paypal_commerce_platform.gemspec +7 -7
  28. data/spec/features/frontend/cart_spec.rb +21 -13
  29. data/spec/features/frontend/checkout_spec.rb +21 -13
  30. data/spec/features/frontend/product_spec.rb +23 -15
  31. data/spec/lib/solidus_paypal_commerce_platform/client_spec.rb +1 -1
  32. data/spec/lib/solidus_paypal_commerce_platform/configuration_spec.rb +10 -4
  33. data/spec/models/solidus_paypal_commerce_platform/payment_method_spec.rb +19 -0
  34. data/spec/models/solidus_paypal_commerce_platform/paypal_address_spec.rb +17 -5
  35. data/spec/requests/solidus_paypal_commerce_platform/orders_controller_spec.rb +2 -2
  36. data/spec/requests/solidus_paypal_commerce_platform/shipping_rates_controller_spec.rb +3 -3
  37. data/spec/requests/solidus_paypal_commerce_platform/wizard_controller_spec.rb +1 -1
  38. data/spec/spec_helper.rb +2 -2
  39. data/spec/support/paypal_sdk_script_tag_helper.rb +13 -0
  40. metadata +33 -21
  41. data/app/decorators/solidus_paypal_commerce_platform/remove_required_phone_from_address.rb +0 -13
@@ -10,7 +10,7 @@ RSpec.describe SolidusPaypalCommercePlatform::Client do
10
10
  let(:status_code) { 201 }
11
11
 
12
12
  it 'forwards to the upstream client adding i18n response messages' do
13
- expect_any_instance_of(PayPal::PayPalHttpClient)
13
+ allow_any_instance_of(PayPal::PayPalHttpClient)
14
14
  .to receive(:execute).with(paypal_request).and_return(paypal_response)
15
15
 
16
16
  response = subject.execute_with_response(paypal_request)
@@ -12,16 +12,16 @@ RSpec.describe SolidusPaypalCommercePlatform::Configuration do
12
12
  it "falls back to Rails.env if ENV['PAYPAL_ENV'] is not set" do
13
13
  expect(ENV).to receive(:[]).with("PAYPAL_ENV").and_return(nil).at_least(:once)
14
14
 
15
- expect(Rails).to receive(:env).and_return("development".inquiry)
15
+ allow(Rails).to receive(:env).and_return("development".inquiry)
16
16
  expect(subject.default_env).to eq("sandbox")
17
17
 
18
- expect(Rails).to receive(:env).and_return("test".inquiry)
18
+ allow(Rails).to receive(:env).and_return("test".inquiry)
19
19
  expect(subject.default_env).to eq("sandbox")
20
20
 
21
- expect(Rails).to receive(:env).and_return("production".inquiry)
21
+ allow(Rails).to receive(:env).and_return("production".inquiry)
22
22
  expect(subject.default_env).to eq("live")
23
23
 
24
- expect(Rails).to receive(:env).and_return("staging".inquiry)
24
+ allow(Rails).to receive(:env).and_return("staging".inquiry)
25
25
  expect{ subject.default_env }.to raise_error(described_class::InvalidEnvironment)
26
26
  end
27
27
  end
@@ -82,4 +82,10 @@ RSpec.describe SolidusPaypalCommercePlatform::Configuration do
82
82
  expect(subject.state_guesser_class).to eq(SolidusPaypalCommercePlatform::BetterStateGuesser)
83
83
  end
84
84
  end
85
+
86
+ describe "#partner_code" do
87
+ it "returns the correct code" do
88
+ expect(subject.partner_code).to eq("Solidus_PCP_SP")
89
+ end
90
+ end
85
91
  end
@@ -92,6 +92,25 @@ RSpec.describe SolidusPaypalCommercePlatform::PaymentMethod, type: :model do
92
92
  expect(url.query.split("&")).to include("commit=true")
93
93
  end
94
94
  end
95
+
96
+ context 'when messaging is turned on' do
97
+ let(:order) { instance_double(Spree::Order, checkout_steps: { "foo" => "bar" }) }
98
+
99
+ it 'includes messaging component' do
100
+ paypal_payment_method.preferences.update(display_credit_messaging: true)
101
+ expect(url.query.split("&")).to include("components=buttons%2Cmessages")
102
+ end
103
+ end
104
+
105
+ context 'when messaging is turned off' do
106
+ let(:order) { instance_double(Spree::Order, checkout_steps: { "foo" => "bar" }) }
107
+
108
+ it 'only includes buttons components' do
109
+ paypal_payment_method.preferences.update(display_credit_messaging: false)
110
+ expect(url.query.split("&")).not_to include("messages")
111
+ expect(url.query.split("&")).to include("components=buttons")
112
+ end
113
+ end
95
114
  end
96
115
 
97
116
  private
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  RSpec.describe SolidusPaypalCommercePlatform::PaypalAddress, type: :model do
4
4
  let(:order) { create(:order) }
5
5
  let(:original_address) { create(:address) }
6
- let(:address) { create(:address) }
6
+ let(:address) { create(:address, name_attributes) }
7
7
  let(:params) {
8
8
  {
9
9
  updated_address: {
@@ -16,8 +16,8 @@ RSpec.describe SolidusPaypalCommercePlatform::PaypalAddress, type: :model do
16
16
  },
17
17
  recipient: {
18
18
  name: {
19
- given_name: address.firstname,
20
- surname: address.lastname
19
+ given_name: "Alexander",
20
+ surname: "Hamilton"
21
21
  }
22
22
  }
23
23
  }
@@ -37,8 +37,12 @@ RSpec.describe SolidusPaypalCommercePlatform::PaypalAddress, type: :model do
37
37
  expect(subject.address2).to eq address.address2
38
38
  expect(subject.zipcode).to eq address.zipcode
39
39
  expect(subject.country).to eq address.country
40
- expect(subject.firstname).to eq address.firstname
41
- expect(subject.lastname).to eq address.lastname
40
+ if SolidusSupport.combined_first_and_last_name_in_address?
41
+ expect(subject.name).to eq address.name
42
+ else
43
+ expect(subject.firstname).to eq address.firstname
44
+ expect(subject.lastname).to eq address.lastname
45
+ end
42
46
  expect(subject.phone).to eq original_address.phone
43
47
  end
44
48
 
@@ -52,4 +56,12 @@ RSpec.describe SolidusPaypalCommercePlatform::PaypalAddress, type: :model do
52
56
  end
53
57
  end
54
58
  end
59
+
60
+ def name_attributes
61
+ if SolidusSupport.combined_first_and_last_name_in_address?
62
+ { name: "Alexander Hamilton" }
63
+ else
64
+ { firstname: "Alexander", lastname: "Hamilton" }
65
+ end
66
+ end
55
67
  end
@@ -15,7 +15,7 @@ RSpec.describe SolidusPaypalCommercePlatform::OrdersController, type: :request d
15
15
 
16
16
  get solidus_paypal_commerce_platform.verify_total_path, params: params
17
17
 
18
- expect(response).to have_http_status(200)
18
+ expect(response).to have_http_status(:ok)
19
19
  end
20
20
  end
21
21
 
@@ -29,7 +29,7 @@ RSpec.describe SolidusPaypalCommercePlatform::OrdersController, type: :request d
29
29
 
30
30
  get solidus_paypal_commerce_platform.verify_total_path, params: params
31
31
 
32
- expect(response).to have_http_status(400)
32
+ expect(response).to have_http_status(:bad_request)
33
33
  end
34
34
  end
35
35
  end
@@ -23,9 +23,9 @@ RSpec.describe SolidusPaypalCommercePlatform::ShippingRatesController, type: :re
23
23
  }
24
24
  end
25
25
 
26
- it "returns a paypal_order with the new address" do
27
- expect(response.body).to include new_address.state.abbr
28
- expect(response.body).not_to include order.ship_address.state.abbr
26
+ it "returns a paypal_order without the simulated address" do
27
+ expect(response.body).not_to include "admin_area_1\":\"#{new_address.state.abbr}\""
28
+ expect(response.body).not_to include "admin_area_1\":\"#{order.ship_address.state.abbr}\""
29
29
  end
30
30
 
31
31
  it "does not modify original address" do
@@ -38,7 +38,7 @@ RSpec.describe SolidusPaypalCommercePlatform::WizardController, type: :request d
38
38
 
39
39
  expect(payment_method.preferred_client_id).to eq("CLIENT-ID")
40
40
  expect(payment_method.preferred_client_secret).to eq("CLIENT-SECRET")
41
- expect(response).to have_http_status(201)
41
+ expect(response).to have_http_status(:created)
42
42
  end
43
43
  end
44
44
  end
data/spec/spec_helper.rb CHANGED
@@ -19,8 +19,8 @@ require 'spree/testing_support/order_walkthrough'
19
19
  # in spec/support/ and its subdirectories.
20
20
  Dir["#{__dir__}/support/**/*.rb"].sort.each { |f| require f }
21
21
 
22
- # Requires factories defined in lib/solidus_paypal_commerce_platform/factories.rb
23
- require 'solidus_paypal_commerce_platform/factories'
22
+ # Requires factories defined in lib/solidus_paypal_commerce_platform/testing_support/factories.rb
23
+ SolidusDevSupport::TestingSupport::Factories.load_for(SolidusPaypalCommercePlatform::Engine)
24
24
 
25
25
  RSpec.configure do |config|
26
26
  config.infer_spec_type_from_file_location!
@@ -0,0 +1,13 @@
1
+ module PaypalSdkScriptTagHelper
2
+ def js_sdk_script_query
3
+ URI(page.find('script[src*="sdk/js?"]', visible: false)[:src]).query.split('&')
4
+ end
5
+
6
+ def js_sdk_script_partner_id
7
+ page.find('script[src*="sdk/js?"]', visible: false)['data-partner-attribution-id']
8
+ end
9
+ end
10
+
11
+ RSpec.configure do |config|
12
+ config.include PaypalSdkScriptTagHelper, type: :feature
13
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_paypal_commerce_platform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Denny
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-09-03 00:00:00.000000000 Z
12
+ date: 2021-04-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: deface
@@ -34,7 +34,7 @@ dependencies:
34
34
  version: 2.0.0
35
35
  - - "<"
36
36
  - !ruby/object:Gem::Version
37
- version: '3'
37
+ version: '4'
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -44,35 +44,41 @@ dependencies:
44
44
  version: 2.0.0
45
45
  - - "<"
46
46
  - !ruby/object:Gem::Version
47
- version: '3'
47
+ version: '4'
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: solidus_support
50
50
  requirement: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.8.0
55
+ - - "<"
53
56
  - !ruby/object:Gem::Version
54
- version: '0.5'
57
+ version: '1'
55
58
  type: :runtime
56
59
  prerelease: false
57
60
  version_requirements: !ruby/object:Gem::Requirement
58
61
  requirements:
59
- - - "~>"
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.8.0
65
+ - - "<"
60
66
  - !ruby/object:Gem::Version
61
- version: '0.5'
67
+ version: '1'
62
68
  - !ruby/object:Gem::Dependency
63
69
  name: solidus_webhooks
64
70
  requirement: !ruby/object:Gem::Requirement
65
71
  requirements:
66
72
  - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: 0.2.0
74
+ version: '0.2'
69
75
  type: :runtime
70
76
  prerelease: false
71
77
  version_requirements: !ruby/object:Gem::Requirement
72
78
  requirements:
73
79
  - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: 0.2.0
81
+ version: '0.2'
76
82
  - !ruby/object:Gem::Dependency
77
83
  name: paypal-checkout-sdk
78
84
  requirement: !ruby/object:Gem::Requirement
@@ -105,16 +111,16 @@ dependencies:
105
111
  name: solidus_dev_support
106
112
  requirement: !ruby/object:Gem::Requirement
107
113
  requirements:
108
- - - ">="
114
+ - - "~>"
109
115
  - !ruby/object:Gem::Version
110
- version: '0'
116
+ version: '2.1'
111
117
  type: :development
112
118
  prerelease: false
113
119
  version_requirements: !ruby/object:Gem::Requirement
114
120
  requirements:
115
- - - ">="
121
+ - - "~>"
116
122
  - !ruby/object:Gem::Version
117
- version: '0'
123
+ version: '2.1'
118
124
  description:
119
125
  email: contact@solidus.io
120
126
  executables: []
@@ -124,9 +130,11 @@ files:
124
130
  - ".circleci/config.yml"
125
131
  - ".gem_release.yml"
126
132
  - ".github/stale.yml"
133
+ - ".github_changelog_generator"
127
134
  - ".gitignore"
128
135
  - ".rspec"
129
136
  - ".rubocop.yml"
137
+ - CHANGELOG.md
130
138
  - Gemfile
131
139
  - LICENSE
132
140
  - README.md
@@ -145,7 +153,7 @@ files:
145
153
  - app/controllers/solidus_paypal_commerce_platform/paypal_orders_controller.rb
146
154
  - app/controllers/solidus_paypal_commerce_platform/shipping_rates_controller.rb
147
155
  - app/controllers/solidus_paypal_commerce_platform/wizard_controller.rb
148
- - app/decorators/solidus_paypal_commerce_platform/remove_required_phone_from_address.rb
156
+ - app/decorators/models/solidus_paypal_commerce_platform/spree/address_decorator.rb
149
157
  - app/helpers/solidus_paypal_commerce_platform/button_options_helper.rb
150
158
  - app/jobs/solidus_paypal_commerce_platform/application_job.rb
151
159
  - app/jobs/solidus_paypal_commerce_platform/webhook_job.rb
@@ -179,13 +187,14 @@ files:
179
187
  - config/routes.rb
180
188
  - db/migrate/20200521190038_add_paypal_commerce_platform_sources.rb
181
189
  - lib/generators/solidus_paypal_commerce_platform/install/install_generator.rb
190
+ - lib/generators/solidus_paypal_commerce_platform/install/templates/initializer.rb
182
191
  - lib/solidus_paypal_commerce_platform.rb
183
192
  - lib/solidus_paypal_commerce_platform/access_token_authorization_request.rb
184
193
  - lib/solidus_paypal_commerce_platform/client.rb
185
194
  - lib/solidus_paypal_commerce_platform/configuration.rb
186
195
  - lib/solidus_paypal_commerce_platform/engine.rb
187
- - lib/solidus_paypal_commerce_platform/factories.rb
188
196
  - lib/solidus_paypal_commerce_platform/fetch_merchant_credentials_request.rb
197
+ - lib/solidus_paypal_commerce_platform/testing_support/factories.rb
189
198
  - lib/solidus_paypal_commerce_platform/version.rb
190
199
  - lib/views/api/spree/api/payments/source_views/_paypal_commerce_platform.json.jbuilder
191
200
  - lib/views/backend/spree/admin/payments/source_forms/_paypal_commerce_platform.html.erb
@@ -194,6 +203,7 @@ files:
194
203
  - lib/views/frontend/solidus_paypal_commerce_platform/cart/_cart_buttons.html.erb
195
204
  - lib/views/frontend/solidus_paypal_commerce_platform/payments/_payment.html.erb
196
205
  - lib/views/frontend/solidus_paypal_commerce_platform/product/_product_buttons.html.erb
206
+ - lib/views/frontend/solidus_paypal_commerce_platform/shared/_javascript_sdk_tag.html.erb
197
207
  - lib/views/frontend/spree/checkout/payment/_paypal_commerce_platform.html.erb
198
208
  - lib/views/frontend/spree/orders/payment/_paypal_commerce_platform.html.erb
199
209
  - lib/views/frontend/spree/products/payment/_paypal_commerce_platform.html.erb
@@ -223,12 +233,13 @@ files:
223
233
  - spec/requests/solidus_paypal_commerce_platform/wizard_controller_spec.rb
224
234
  - spec/spec_helper.rb
225
235
  - spec/support/capybara.rb
226
- homepage: https://github.com/solidusio-contrib/solidus_paypal_commerce_platform#readme
236
+ - spec/support/paypal_sdk_script_tag_helper.rb
237
+ homepage: https://github.com/solidusio-contrib/solidus_paypal_commerce_platform
227
238
  licenses:
228
239
  - BSD-3-Clause
229
240
  metadata:
230
- homepage_uri: https://github.com/solidusio-contrib/solidus_paypal_commerce_platform#readme
231
- source_code_uri: https://github.com/solidusio-contrib/solidus_paypal_commerce_platform#readme
241
+ homepage_uri: https://github.com/solidusio-contrib/solidus_paypal_commerce_platform
242
+ source_code_uri: https://github.com/solidusio-contrib/solidus_paypal_commerce_platform
232
243
  changelog_uri: https://github.com/solidusio-contrib/solidus_paypal_commerce_platform/releases
233
244
  post_install_message:
234
245
  rdoc_options: []
@@ -236,7 +247,7 @@ require_paths:
236
247
  - lib
237
248
  required_ruby_version: !ruby/object:Gem::Requirement
238
249
  requirements:
239
- - - "~>"
250
+ - - ">="
240
251
  - !ruby/object:Gem::Version
241
252
  version: '2.5'
242
253
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -245,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
256
  - !ruby/object:Gem::Version
246
257
  version: '0'
247
258
  requirements: []
248
- rubygems_version: 3.1.2
259
+ rubygems_version: 3.1.4
249
260
  signing_key:
250
261
  specification_version: 4
251
262
  summary: Integrate Solidus with Paypal Commerce Platform
@@ -275,3 +286,4 @@ test_files:
275
286
  - spec/requests/solidus_paypal_commerce_platform/wizard_controller_spec.rb
276
287
  - spec/spec_helper.rb
277
288
  - spec/support/capybara.rb
289
+ - spec/support/paypal_sdk_script_tag_helper.rb
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RemoveRequiredPhoneFromAddress
4
- # PayPal doesn't use the phone number, so in cases where the user checks out via
5
- # PayPal, this field will be unpopulated. If you want to require phone numbers,
6
- # you'll need to turn off cart & product page displays on the payment method edit
7
- # page.
8
- def require_phone?
9
- super && false
10
- end
11
-
12
- ::Spree::Address.prepend self
13
- end