solidus_paypal_braintree 1.1.0 → 1.1.2

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +4 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +1 -1
  5. data/CHANGELOG.md +70 -1
  6. data/Gemfile +9 -6
  7. data/app/models/solidus_paypal_braintree/gateway.rb +5 -3
  8. data/app/models/solidus_paypal_braintree/transaction.rb +2 -2
  9. data/app/models/solidus_paypal_braintree/transaction_import.rb +2 -2
  10. data/lib/solidus_paypal_braintree/engine.rb +5 -3
  11. data/lib/solidus_paypal_braintree/factories.rb +5 -5
  12. data/lib/solidus_paypal_braintree/version.rb +1 -1
  13. data/lib/views/frontend/solidus_paypal_braintree/payments/_payment.html.erb +3 -3
  14. data/solidus_paypal_braintree.gemspec +0 -1
  15. metadata +4 -122
  16. data/spec/controllers/solidus_paypal_braintree/checkouts_controller_spec.rb +0 -99
  17. data/spec/controllers/solidus_paypal_braintree/client_tokens_controller_spec.rb +0 -55
  18. data/spec/controllers/solidus_paypal_braintree/configurations_controller_spec.rb +0 -73
  19. data/spec/controllers/solidus_paypal_braintree/transactions_controller_spec.rb +0 -183
  20. data/spec/features/backend/configuration_spec.rb +0 -23
  21. data/spec/features/backend/new_payment_spec.rb +0 -137
  22. data/spec/features/frontend/braintree_credit_card_checkout_spec.rb +0 -191
  23. data/spec/features/frontend/paypal_checkout_spec.rb +0 -166
  24. data/spec/features/frontend/venmo_checkout_spec.rb +0 -189
  25. data/spec/fixtures/cassettes/admin/invalid_credit_card.yml +0 -63
  26. data/spec/fixtures/cassettes/admin/resubmit_credit_card.yml +0 -352
  27. data/spec/fixtures/cassettes/admin/valid_credit_card.yml +0 -412
  28. data/spec/fixtures/cassettes/braintree/create_profile.yml +0 -71
  29. data/spec/fixtures/cassettes/braintree/generate_token.yml +0 -63
  30. data/spec/fixtures/cassettes/braintree/token.yml +0 -63
  31. data/spec/fixtures/cassettes/checkout/invalid_credit_card.yml +0 -63
  32. data/spec/fixtures/cassettes/checkout/resubmit_credit_card.yml +0 -216
  33. data/spec/fixtures/cassettes/checkout/update.yml +0 -71
  34. data/spec/fixtures/cassettes/checkout/valid_credit_card.yml +0 -156
  35. data/spec/fixtures/cassettes/checkout/valid_venmo_transaction.yml +0 -599
  36. data/spec/fixtures/cassettes/gateway/authorize/credit_card/address.yml +0 -86
  37. data/spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml +0 -154
  38. data/spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml +0 -90
  39. data/spec/fixtures/cassettes/gateway/authorize/paypal/address.yml +0 -90
  40. data/spec/fixtures/cassettes/gateway/authorize.yml +0 -86
  41. data/spec/fixtures/cassettes/gateway/authorized_transaction.yml +0 -73
  42. data/spec/fixtures/cassettes/gateway/cancel/missing.yml +0 -63
  43. data/spec/fixtures/cassettes/gateway/cancel/refunds.yml +0 -272
  44. data/spec/fixtures/cassettes/gateway/cancel/void.yml +0 -201
  45. data/spec/fixtures/cassettes/gateway/capture.yml +0 -141
  46. data/spec/fixtures/cassettes/gateway/complete.yml +0 -157
  47. data/spec/fixtures/cassettes/gateway/credit.yml +0 -208
  48. data/spec/fixtures/cassettes/gateway/purchase.yml +0 -87
  49. data/spec/fixtures/cassettes/gateway/settled_transaction.yml +0 -140
  50. data/spec/fixtures/cassettes/gateway/void.yml +0 -137
  51. data/spec/fixtures/cassettes/source/card_type.yml +0 -267
  52. data/spec/fixtures/cassettes/source/last4.yml +0 -267
  53. data/spec/fixtures/cassettes/transaction/import/valid/capture.yml +0 -224
  54. data/spec/fixtures/cassettes/transaction/import/valid.yml +0 -71
  55. data/spec/fixtures/views/spree/orders/edit.html.erb +0 -50
  56. data/spec/helpers/solidus_paypal_braintree/braintree_admin_helper_spec.rb +0 -17
  57. data/spec/helpers/solidus_paypal_braintree/braintree_checkout_helper_spec.rb +0 -70
  58. data/spec/models/solidus_paypal_braintree/address_spec.rb +0 -71
  59. data/spec/models/solidus_paypal_braintree/avs_result_spec.rb +0 -317
  60. data/spec/models/solidus_paypal_braintree/gateway_spec.rb +0 -692
  61. data/spec/models/solidus_paypal_braintree/response_spec.rb +0 -280
  62. data/spec/models/solidus_paypal_braintree/source_spec.rb +0 -499
  63. data/spec/models/solidus_paypal_braintree/transaction_address_spec.rb +0 -235
  64. data/spec/models/solidus_paypal_braintree/transaction_import_spec.rb +0 -300
  65. data/spec/models/solidus_paypal_braintree/transaction_spec.rb +0 -85
  66. data/spec/models/spree/store_spec.rb +0 -14
  67. data/spec/requests/spree/api/orders_controller_spec.rb +0 -36
  68. data/spec/spec_helper.rb +0 -29
  69. data/spec/support/capybara.rb +0 -7
  70. data/spec/support/factories.rb +0 -2
  71. data/spec/support/gateway_helpers.rb +0 -29
  72. data/spec/support/order_ready_for_payment.rb +0 -37
  73. data/spec/support/vcr.rb +0 -42
  74. data/spec/support/views.rb +0 -1
@@ -1,166 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Checkout", type: :feature, js: true do
4
- Capybara.default_max_wait_time = 60
5
-
6
- # let!(:store) do
7
- # create(:store, payment_methods: [payment_method]).tap do |s|
8
- # s.braintree_configuration.update!(braintree_preferences)
9
- # end
10
- # end
11
- let(:braintree_preferences) { { paypal: true }.merge(paypal_options) }
12
- let(:paypal_options) { {} }
13
-
14
- let!(:country) { create(:country, states_required: true) }
15
- # let!(:state) { create(:state, country: country, abbr: "CA", name: "California") }
16
- # let!(:shipping_method) { create(:shipping_method) }
17
- # let!(:stock_location) { create(:stock_location) }
18
- let!(:mug) { create(:product, name: "RoR Mug") }
19
- let!(:payment_method) { create_gateway }
20
- # let!(:zone) { create(:zone) }
21
-
22
- before do
23
- create(:store, payment_methods: [payment_method]).tap do |s|
24
- s.braintree_configuration.update!(braintree_preferences)
25
- end
26
- create(:state, country: country, abbr: "CA", name: "California")
27
- create(:shipping_method)
28
- create(:stock_location)
29
- create(:zone)
30
- end
31
-
32
- context "when going through express checkout using paypal cart button" do
33
- before do
34
- payment_method
35
- add_mug_to_cart
36
- end
37
-
38
- it "checks out successfully", skip: "Broken. To be revisited" do
39
- pend_if_paypal_slow do
40
- expect_any_instance_of(Spree::Order).to receive(:restart_checkout_flow)
41
- move_through_paypal_popup
42
- expect(page).to have_content("Shipments")
43
- click_on "Place Order"
44
- expect(page).to have_content("Your order has been processed successfully")
45
- end
46
- end
47
-
48
- context 'when using custom paypal button style' do
49
- let(:paypal_options) { { preferred_paypal_button_color: 'blue' } }
50
-
51
- it 'displays required PayPal button style' do
52
- within_frame find('#paypal-button iframe') do
53
- expect(page).to have_selector('.paypal-button-color-blue')
54
- end
55
- end
56
- end
57
- end
58
-
59
- context "when going through regular checkout using paypal payment method" do
60
- before do
61
- payment_method
62
- add_mug_to_cart
63
- click_button("Checkout")
64
- fill_in("order_email", with: "paypal_buyer@paypaltest.com")
65
- click_button("Continue")
66
- fill_in_address
67
- click_button("Save and Continue")
68
- click_button("Save and Continue")
69
- end
70
-
71
- it "formats the address variable correctly" do
72
- expect(page.evaluate_script("address['recipientName']")).to eq "Ryan Bigg"
73
- end
74
-
75
- it "checks out successfully", skip: "Broken. To be revisited" do
76
- pend_if_paypal_slow do
77
- expect_any_instance_of(Spree::Order).not_to receive(:restart_checkout_flow)
78
- move_through_paypal_popup
79
-
80
- expect(page).to have_content("Shipments")
81
- click_on "Place Order"
82
- expect(page).to have_content("Your order has been processed successfully")
83
- end
84
- end
85
- end
86
-
87
- # Selenium does not clear cookies properly between test runs, even when
88
- # using Capybara.reset_sessions!, see:
89
- # https://github.com/jnicklas/capybara/issues/535
90
- #
91
- # This causes Paypal to remain logged in and not prompt for an email on the
92
- # second test run and causes the test to fail. Adding conditional logic for
93
- # this greatly increases the test time, so it is left out since CI runs
94
- # these with poltergeist.
95
- def move_through_paypal_popup
96
- expect(page).to have_css('#paypal-button .paypal-button')
97
-
98
- sleep 2 # the PayPal button is not immediately ready
99
-
100
- popup = page.window_opened_by do
101
- within_frame find('#paypal-button iframe') do
102
- find('div.paypal-button').click
103
- end
104
- end
105
- page.switch_to_window(popup)
106
-
107
- # We don't control this popup window.
108
- # So javascript errors are not our errors.
109
- begin
110
- expect(page).not_to have_selector('body.loading')
111
- fill_in("login_email", with: "stembolt_buyer@stembolttest.com")
112
- click_on "Next"
113
- fill_in("login_password", with: "test1234")
114
-
115
- expect(page).not_to have_selector('body.loading')
116
- click_button("btnLogin")
117
-
118
- expect(page).not_to have_selector('body.loading')
119
- click_button("Continue")
120
- click_button("Agree & Continue")
121
- rescue Selenium::WebDriver::Error::JavascriptError => e
122
- pending "PayPal had javascript errors in their popup window."
123
- raise e
124
- rescue Capybara::ElementNotFound => e
125
- pending "PayPal delivered unkown HTML in their popup window."
126
- raise e
127
- rescue Selenium::WebDriver::Error::NoSuchWindowError => e
128
- pending "PayPal popup not available."
129
- raise e
130
- end
131
-
132
- page.switch_to_window(page.windows.first)
133
- end
134
-
135
- def fill_in_address
136
- address = "order_bill_address_attributes"
137
- if page.has_css?("##{address}_firstname", wait: 0)
138
- fill_in "#{address}_firstname", with: "Ryan"
139
- fill_in "#{address}_lastname", with: "Bigg"
140
- else
141
- fill_in "#{address}_name", with: "Ryan Bigg"
142
- end
143
- fill_in "#{address}_address1", with: "143 Swan Street"
144
- fill_in "#{address}_city", with: "San Jose"
145
- select "United States of America", from: "#{address}_country_id"
146
- select "California", from: "#{address}_state_id"
147
- fill_in "#{address}_zipcode", with: "95131"
148
- fill_in "#{address}_phone", with: "(555) 555-0111"
149
- end
150
-
151
- def add_mug_to_cart
152
- visit spree.root_path
153
- click_link mug.name
154
- click_button "add-to-cart-button"
155
- end
156
-
157
- def pend_if_paypal_slow
158
- yield
159
- rescue RSpec::Expectations::ExpectationNotMetError => e
160
- pending "PayPal did not answer in #{Capybara.default_max_wait_time} seconds."
161
- raise e
162
- rescue Selenium::WebDriver::Error::JavascriptError => e
163
- pending "PayPal delivered wrong payload because of errors in their popup window."
164
- raise e
165
- end
166
- end
@@ -1,189 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'spree/testing_support/order_walkthrough'
5
-
6
- describe "Checkout", type: :feature, js: true do
7
- let(:braintree_preferences) { { venmo: true }.merge(preferences) }
8
- let(:preferences) { {} }
9
- let(:user) { create(:user) }
10
- let!(:payment_method) { create_gateway }
11
-
12
- before do
13
- create(:store, payment_methods: [payment_method]).tap do |s|
14
- s.braintree_configuration.update!(braintree_preferences)
15
- end
16
-
17
- go_to_payment_checkout_page
18
- end
19
-
20
- context 'with Venmo checkout' do
21
- context 'when Venmo is disabled' do
22
- let(:preferences) { { venmo: false } }
23
-
24
- it 'does not load the Venmo payment button' do
25
- expect(page).not_to have_selector('#venmo-button')
26
- end
27
- end
28
-
29
- context 'when Venmo is enabled' do
30
- it 'loads the Venmo payment button' do
31
- expect(page).to have_selector('#venmo-button')
32
- end
33
- end
34
-
35
- context "when Venmo's button style is customized" do
36
- context 'when venmo_button_color is "blue" and venmo_button_width is "280"' do
37
- let(:preferences) { { preferred_venmo_button_color: 'blue', preferred_venmo_button_width: '280' } }
38
-
39
- it 'has the correct style' do
40
- venmo_button.assert_matches_style(width: '280px', 'background-image': /venmo_blue_button_280x48/)
41
- venmo_button.hover
42
- venmo_button.assert_matches_style('background-image': /venmo_active_blue_button_280x48/)
43
- end
44
- end
45
-
46
- context 'when venmo_button_color is "white" and venmo_button_width is "375"' do
47
- let(:preferences) { { preferred_venmo_button_color: 'white', preferred_venmo_button_width: '375' } }
48
-
49
- it 'has the correct style' do
50
- venmo_button.assert_matches_style(width: '375px', 'background-image': /venmo_white_button_375x48/)
51
- venmo_button.hover
52
- venmo_button.assert_matches_style('background-image': /venmo_active_white_button_375x48/)
53
- end
54
- end
55
- end
56
-
57
- context 'when the Venmo button is clicked' do
58
- before { venmo_button.click }
59
-
60
- it 'opens the QR modal which shows an error when closed' do
61
- within_frame(venmo_frame) do
62
- expect(page).to have_selector('#venmo-qr-code-view')
63
-
64
- click_button('close-icon')
65
-
66
- expect(page).not_to have_selector('#venmo-qr-code-view')
67
- end
68
-
69
- expect(page).to have_content('Venmo authorization was canceled by closing the Venmo Desktop modal.')
70
- end
71
- end
72
-
73
- context 'with Venmo transactions', vcr: { cassette_name: 'checkout/valid_venmo_transaction' } do
74
- before do
75
- fake_venmo_successful_tokenization
76
- end
77
-
78
- context 'with CreditCard disabled' do
79
- it 'can checkout with Venmo' do
80
- next_checkout_step
81
- finalize_checkout
82
-
83
- expect(Spree::Order.last.complete?).to eq(true)
84
- end
85
- end
86
-
87
- # To test that the hosted-fields inputs do not conflict with Venmo's
88
- context 'with CreditCard enabled' do
89
- let(:preferences) { { credit_card: true } }
90
-
91
- it 'can checkout with Venmo' do
92
- disable_hosted_fields_inputs
93
- disable_hosted_fields_form_listener
94
-
95
- next_checkout_step
96
- finalize_checkout
97
-
98
- expect(Spree::Order.last.complete?).to eq(true)
99
- expect(Spree::Payment.last.source.venmo?).to eq(true)
100
- end
101
- end
102
-
103
- # https://developer.paypal.com/braintree/docs/guides/venmo/client-side#custom-integration
104
- it "meet's Braintree's acceptance criteria during checkout", aggregate_failures: true do
105
- next_checkout_step
106
-
107
- expect(page).to have_content('Payment Type: Venmo')
108
-
109
- finalize_checkout
110
-
111
- expect(page).to have_content('Venmo Account: venmojoe')
112
- end
113
-
114
- # the VCR must be based on this test, so it includes HTTP requests of the second order
115
- it 'saves the used Venmo source in the wallet and can be reused' do
116
- next_checkout_step
117
- finalize_checkout
118
- go_to_payment_checkout_page(order_number: 'R300000002')
119
-
120
- expect(Spree::User.first.wallet.wallet_payment_sources).not_to be_empty
121
- expect(page).to have_selector('#existing_cards')
122
- expect(page).to have_content('venmojoe')
123
-
124
- next_checkout_step
125
- finalize_checkout
126
-
127
- expect(Spree::Order.all.all?(&:complete?)).to eq(true)
128
- end
129
- end
130
- end
131
-
132
- private
133
-
134
- def go_to_payment_checkout_page(order_number: 'R300000001' )
135
- order = if Spree.solidus_gem_version >= Gem::Version.new('2.6.0')
136
- Spree::TestingSupport::OrderWalkthrough.up_to(:address)
137
- else
138
- OrderWalkthrough.up_to(:address)
139
- end
140
-
141
- order.update!(user: user, number: order_number) # constant order number for VCRs
142
-
143
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
144
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: Spree::User.first)
145
- allow_any_instance_of(Spree::Payment).to receive(:gateway_order_id).and_return(order_number)
146
-
147
- visit spree.checkout_state_path(order.state)
148
- next_checkout_step
149
- end
150
-
151
- def next_checkout_step
152
- click_button('Save and Continue')
153
- end
154
-
155
- def finalize_checkout
156
- click_button('Place Order')
157
- end
158
-
159
- def venmo_button
160
- find_button('venmo-button', disabled: false)
161
- end
162
-
163
- def venmo_frame
164
- find('#venmo-desktop-iframe')
165
- end
166
-
167
- def fake_venmo_successful_tokenization
168
- enable_venmo_inputs
169
- fake_payment_method_nonce
170
- end
171
-
172
- def enable_venmo_inputs
173
- page.execute_script("$('.venmo-fields input').each(function(_index, input){input.removeAttribute('disabled');});")
174
- end
175
-
176
- def fake_payment_method_nonce
177
- page.execute_script("$('#venmo_payment_method_nonce').val('fake-venmo-account-nonce');")
178
- end
179
-
180
- def disable_hosted_fields_inputs
181
- page.execute_script("$('.hosted-fields input').each(function(_index, input){input.disabled=true;});")
182
- end
183
-
184
- def disable_hosted_fields_form_listener
185
- # Once the submit button is enabled, the submit listener has been added
186
- find("#checkout_form_payment input[type='submit']:not(:disabled)")
187
- page.execute_script("$('#checkout_form_payment').off('submit');")
188
- end
189
- end
@@ -1,63 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/client_token
6
- body:
7
- encoding: UTF-8
8
- string: |
9
- <?xml version="1.0" encoding="UTF-8"?>
10
- <client-token>
11
- <version type="integer">2</version>
12
- </client-token>
13
- headers:
14
- Accept-Encoding:
15
- - gzip
16
- Accept:
17
- - application/xml
18
- User-Agent:
19
- - Braintree Ruby Gem 2.98.0
20
- X-Apiversion:
21
- - '5'
22
- Content-Type:
23
- - application/xml
24
- Authorization:
25
- - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ==
26
- response:
27
- status:
28
- code: 201
29
- message: Created
30
- headers:
31
- Server:
32
- - nginx
33
- Date:
34
- - Fri, 13 Sep 2019 14:27:11 GMT
35
- Content-Type:
36
- - application/xml; charset=utf-8
37
- Transfer-Encoding:
38
- - chunked
39
- X-Authentication:
40
- - server_to_server
41
- Braintree-Service-Origin:
42
- - clientauth
43
- Vary:
44
- - Accept-Encoding
45
- Content-Encoding:
46
- - gzip
47
- Etag:
48
- - W/"c95fd3caa086065297edd0aeeb8e6d55"
49
- Cache-Control:
50
- - max-age=0, private, must-revalidate
51
- X-Request-Id:
52
- - 51cbbac6-bce1-4f90-ab14-6d61a064e77b
53
- X-Runtime:
54
- - '0.200715'
55
- Strict-Transport-Security:
56
- - max-age=31536000; includeSubDomains
57
- body:
58
- encoding: ASCII-8BIT
59
- string: !binary |-
60
- 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
61
- http_version:
62
- recorded_at: Fri, 13 Sep 2019 14:27:11 GMT
63
- recorded_with: VCR 5.0.0