solidus_paypal_commerce_platform 0.1.0 → 0.3.1

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.
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