solidus_paypal_braintree 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +40 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.gitignore +18 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +68 -0
  8. data/CHANGELOG.md +258 -0
  9. data/Gemfile +43 -0
  10. data/LICENSE +2 -2
  11. data/README.md +77 -23
  12. data/Rakefile +4 -25
  13. data/app/assets/javascripts/solidus_paypal_braintree/checkout.js +32 -3
  14. data/app/assets/javascripts/solidus_paypal_braintree/client.js +23 -4
  15. data/app/assets/javascripts/solidus_paypal_braintree/constants.js +19 -0
  16. data/app/assets/javascripts/solidus_paypal_braintree/frontend.js +1 -0
  17. data/app/assets/javascripts/solidus_paypal_braintree/hosted_form.js +15 -5
  18. data/app/assets/javascripts/solidus_paypal_braintree/paypal_button.js +47 -20
  19. data/app/assets/javascripts/solidus_paypal_braintree/paypal_messaging.js +22 -0
  20. data/app/decorators/controllers/solidus_paypal_braintree/admin_payments_controller_decorator.rb +11 -0
  21. data/app/decorators/controllers/solidus_paypal_braintree/checkout_controller_decorator.rb +11 -0
  22. data/app/decorators/controllers/solidus_paypal_braintree/client_tokens_controller.rb +41 -0
  23. data/app/decorators/controllers/solidus_paypal_braintree/orders_controller_decorator.rb +11 -0
  24. data/app/decorators/models/solidus_paypal_braintree/spree/store_decorator.rb +20 -0
  25. data/app/decorators/models/solidus_paypal_braintree/spree/user_decorator.rb +13 -0
  26. data/app/helpers/solidus_paypal_braintree/braintree_admin_helper.rb +23 -0
  27. data/app/helpers/solidus_paypal_braintree/braintree_checkout_helper.rb +46 -0
  28. data/app/models/application_record.rb +2 -0
  29. data/app/models/solidus_paypal_braintree/address.rb +30 -0
  30. data/app/models/solidus_paypal_braintree/configuration.rb +26 -3
  31. data/app/models/solidus_paypal_braintree/customer.rb +7 -3
  32. data/app/models/solidus_paypal_braintree/gateway.rb +52 -20
  33. data/app/models/solidus_paypal_braintree/response.rb +3 -2
  34. data/app/models/solidus_paypal_braintree/source.rb +21 -7
  35. data/app/models/solidus_paypal_braintree/transaction.rb +2 -0
  36. data/app/models/solidus_paypal_braintree/transaction_address.rb +30 -12
  37. data/app/models/solidus_paypal_braintree/transaction_import.rb +13 -9
  38. data/app/views/spree/api/payments/source_views/_paypal_braintree.json.jbuilder +3 -0
  39. data/app/views/spree/checkout/existing_payment/_paypal_braintree.html.erb +10 -0
  40. data/app/views/spree/shared/_apple_pay_button.html.erb +2 -2
  41. data/app/views/spree/shared/_braintree_errors.html.erb +11 -17
  42. data/app/views/spree/shared/_braintree_hosted_fields.html.erb +24 -9
  43. data/app/views/spree/shared/_paypal_braintree_head_scripts.html.erb +9 -6
  44. data/app/views/spree/shared/_paypal_cart_button.html.erb +16 -2
  45. data/app/views/spree/shared/_paypal_messaging.html.erb +13 -0
  46. data/bin/console +17 -0
  47. data/bin/rails +15 -0
  48. data/bin/setup +8 -0
  49. data/config/locales/en.yml +10 -0
  50. data/config/locales/it.yml +51 -8
  51. data/config/routes.rb +2 -0
  52. data/db/migrate/20160906201711_create_solidus_paypal_braintree_customers.rb +3 -1
  53. data/db/migrate/20161125172005_add_braintree_configuration_to_stores.rb +5 -7
  54. data/db/migrate/20170505193712_add_null_constraint_to_sources.rb +3 -1
  55. data/db/migrate/20190705115327_add_paypal_button_preferences_to_braintree_configurations.rb +5 -0
  56. data/db/migrate/20190911141712_add_3d_secure_to_braintree_configuration.rb +5 -0
  57. data/lib/controllers/backend/solidus_paypal_braintree/configurations_controller.rb +20 -5
  58. data/lib/controllers/frontend/solidus_paypal_braintree/checkouts_controller.rb +25 -21
  59. data/lib/controllers/frontend/solidus_paypal_braintree/transactions_controller.rb +55 -51
  60. data/lib/generators/solidus_paypal_braintree/install/install_generator.rb +7 -5
  61. data/lib/solidus_paypal_braintree.rb +4 -0
  62. data/lib/solidus_paypal_braintree/country_mapper.rb +4 -2
  63. data/lib/solidus_paypal_braintree/engine.rb +11 -11
  64. data/lib/solidus_paypal_braintree/factories.rb +8 -4
  65. data/lib/solidus_paypal_braintree/request_protection.rb +3 -0
  66. data/lib/solidus_paypal_braintree/version.rb +3 -1
  67. data/lib/views/backend/solidus_paypal_braintree/configurations/list.html.erb +30 -5
  68. data/lib/views/backend/spree/admin/payments/source_forms/_paypal_braintree.html.erb +2 -2
  69. data/lib/views/backend/spree/admin/payments/source_views/_paypal_braintree.html.erb +2 -2
  70. data/lib/views/backend_v1.2/spree/admin/payments/source_forms/_paypal_braintree.html.erb +2 -2
  71. data/lib/views/frontend/spree/checkout/payment/_paypal_braintree.html.erb +4 -2
  72. data/lib/views/frontend/spree/shared/_paypal_checkout_button.html.erb +30 -0
  73. data/solidus_paypal_braintree.gemspec +42 -0
  74. data/spec/controllers/solidus_paypal_braintree/checkouts_controller_spec.rb +99 -0
  75. data/spec/controllers/solidus_paypal_braintree/client_tokens_controller_spec.rb +55 -0
  76. data/spec/controllers/solidus_paypal_braintree/configurations_controller_spec.rb +73 -0
  77. data/spec/controllers/solidus_paypal_braintree/transactions_controller_spec.rb +183 -0
  78. data/spec/features/backend/configuration_spec.rb +23 -0
  79. data/spec/features/backend/new_payment_spec.rb +137 -0
  80. data/spec/features/frontend/braintree_credit_card_checkout_spec.rb +187 -0
  81. data/spec/features/frontend/paypal_checkout_spec.rb +166 -0
  82. data/spec/fixtures/cassettes/admin/invalid_credit_card.yml +63 -0
  83. data/spec/fixtures/cassettes/admin/resubmit_credit_card.yml +352 -0
  84. data/spec/fixtures/cassettes/admin/valid_credit_card.yml +412 -0
  85. data/spec/fixtures/cassettes/braintree/create_profile.yml +71 -0
  86. data/spec/fixtures/cassettes/braintree/generate_token.yml +63 -0
  87. data/spec/fixtures/cassettes/braintree/token.yml +63 -0
  88. data/spec/fixtures/cassettes/checkout/invalid_credit_card.yml +63 -0
  89. data/spec/fixtures/cassettes/checkout/resubmit_credit_card.yml +216 -0
  90. data/spec/fixtures/cassettes/checkout/update.yml +71 -0
  91. data/spec/fixtures/cassettes/checkout/valid_credit_card.yml +156 -0
  92. data/spec/fixtures/cassettes/gateway/authorize.yml +86 -0
  93. data/spec/fixtures/cassettes/gateway/authorize/credit_card/address.yml +86 -0
  94. data/spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml +154 -0
  95. data/spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml +90 -0
  96. data/spec/fixtures/cassettes/gateway/authorize/paypal/address.yml +90 -0
  97. data/spec/fixtures/cassettes/gateway/authorized_transaction.yml +73 -0
  98. data/spec/fixtures/cassettes/gateway/cancel/missing.yml +63 -0
  99. data/spec/fixtures/cassettes/gateway/cancel/refunds.yml +272 -0
  100. data/spec/fixtures/cassettes/gateway/cancel/void.yml +201 -0
  101. data/spec/fixtures/cassettes/gateway/capture.yml +141 -0
  102. data/spec/fixtures/cassettes/gateway/complete.yml +157 -0
  103. data/spec/fixtures/cassettes/gateway/credit.yml +208 -0
  104. data/spec/fixtures/cassettes/gateway/purchase.yml +87 -0
  105. data/spec/fixtures/cassettes/gateway/settled_transaction.yml +140 -0
  106. data/spec/fixtures/cassettes/gateway/void.yml +137 -0
  107. data/spec/fixtures/cassettes/source/card_type.yml +267 -0
  108. data/spec/fixtures/cassettes/source/last4.yml +267 -0
  109. data/spec/fixtures/cassettes/transaction/import/valid.yml +71 -0
  110. data/spec/fixtures/cassettes/transaction/import/valid/capture.yml +224 -0
  111. data/spec/fixtures/views/spree/orders/edit.html.erb +50 -0
  112. data/spec/helpers/solidus_paypal_braintree/braintree_admin_helper_spec.rb +17 -0
  113. data/spec/models/solidus_paypal_braintree/address_spec.rb +51 -0
  114. data/spec/models/solidus_paypal_braintree/avs_result_spec.rb +317 -0
  115. data/spec/models/solidus_paypal_braintree/gateway_spec.rb +692 -0
  116. data/spec/models/solidus_paypal_braintree/response_spec.rb +280 -0
  117. data/spec/models/solidus_paypal_braintree/source_spec.rb +360 -0
  118. data/spec/models/solidus_paypal_braintree/transaction_address_spec.rb +253 -0
  119. data/spec/models/solidus_paypal_braintree/transaction_import_spec.rb +283 -0
  120. data/spec/models/solidus_paypal_braintree/transaction_spec.rb +85 -0
  121. data/spec/models/spree/store_spec.rb +14 -0
  122. data/spec/requests/spree/api/orders_controller_spec.rb +36 -0
  123. data/spec/spec_helper.rb +26 -0
  124. data/spec/support/capybara.rb +7 -0
  125. data/spec/support/factories.rb +2 -0
  126. data/spec/support/gateway_helpers.rb +29 -0
  127. data/spec/support/order_ready_for_payment.rb +37 -0
  128. data/spec/support/vcr.rb +42 -0
  129. data/spec/support/views.rb +1 -0
  130. metadata +182 -194
  131. data/app/controllers/solidus_paypal_braintree/client_tokens_controller.rb +0 -22
  132. data/app/helpers/braintree_admin_helper.rb +0 -18
  133. data/app/models/spree/store_decorator.rb +0 -11
  134. data/app/views/spree/shared/_paypal_checkout_button.html.erb +0 -27
  135. data/config/initializers/braintree.rb +0 -1
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe SolidusPaypalBraintree::Transaction do
4
+ describe "#valid?" do
5
+ subject { transaction.valid? }
6
+
7
+ let(:valid_attributes) do
8
+ {
9
+ nonce: 'abcde-fghjkl-lmnop',
10
+ payment_method: SolidusPaypalBraintree::Gateway.new,
11
+ payment_type: 'ApplePayCard',
12
+ email: "test@example.com"
13
+ }
14
+ end
15
+ let(:valid_address_attributes) do
16
+ {
17
+ address_attributes: {
18
+ name: "Bruce Wayne",
19
+ address_line_1: "42 Spruce Lane",
20
+ city: "Gotham",
21
+ zip: "98201",
22
+ state_code: "WA",
23
+ country_code: "US"
24
+ }
25
+ }
26
+ end
27
+ let(:transaction) { described_class.new(valid_attributes) }
28
+
29
+ before do
30
+ create(:country, iso: "US")
31
+ end
32
+
33
+ it { is_expected.to be true }
34
+
35
+ context 'without nonce' do
36
+ let(:valid_attributes) { super().except(:nonce) }
37
+
38
+ it { is_expected.to be false }
39
+ end
40
+
41
+ context 'without gateway' do
42
+ let(:valid_attributes) { super().except(:payment_method) }
43
+
44
+ it { is_expected.to be false }
45
+ end
46
+
47
+ context 'with bad gateway' do
48
+ let(:valid_attributes) { super().merge(payment_method: Spree::PaymentMethod.new) }
49
+
50
+ it { is_expected.to be false }
51
+ end
52
+
53
+ context 'without payment_type' do
54
+ let(:valid_attributes) { super().except(:payment_type) }
55
+
56
+ it { is_expected.to be false }
57
+ end
58
+
59
+ context 'without email' do
60
+ let(:valid_attributes) { super().except(:email) }
61
+
62
+ it { is_expected.to be false }
63
+ end
64
+
65
+ context "with valid address" do
66
+ let(:valid_attributes) { super().merge(valid_address_attributes) }
67
+
68
+ it { is_expected.to be true }
69
+ end
70
+
71
+ context "with invalid address" do
72
+ let(:valid_attributes) { super().merge(valid_address_attributes) }
73
+
74
+ before { valid_address_attributes[:address_attributes][:zip] = nil }
75
+
76
+ it { is_expected.to be false }
77
+
78
+ it "sets useful error messages" do
79
+ transaction.valid?
80
+ expect(transaction.errors.full_messages).
81
+ to eq ["Address zip can't be blank"]
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Store do
4
+ describe 'before_create :build_default_configuration' do
5
+ context 'when a braintree_configuration record already exists' do
6
+ it 'does not overwrite it' do
7
+ store = build(:store)
8
+ custom_braintree_configuration = store.build_braintree_configuration
9
+ store.save!
10
+ expect(store.braintree_configuration).to be custom_braintree_configuration
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Api::OrdersController, type: :request do
4
+ stub_authorization!
5
+
6
+ describe 'get show' do
7
+ let(:gateway) { create_gateway }
8
+ let(:order) { create(:order_with_line_items) }
9
+ let(:source) do
10
+ SolidusPaypalBraintree::Source.new(
11
+ nonce: 'fake-valid-nonce',
12
+ user: order.user,
13
+ payment_type: SolidusPaypalBraintree::Source::PAYPAL,
14
+ payment_method: gateway
15
+ )
16
+ end
17
+
18
+ context 'when using braintree as the payment' do
19
+ before do
20
+ allow_any_instance_of(Spree::Payment).to receive(:create_payment_profile).and_return(true)
21
+
22
+ order.payments.create!(
23
+ payment_method: gateway,
24
+ source: source,
25
+ amount: 55
26
+ )
27
+ end
28
+
29
+ it "can be rendered correctly" do
30
+ get "/api/orders/#{order.number}"
31
+
32
+ expect(response.status).to eq 200
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Configure Rails Environment
4
+ ENV['RAILS_ENV'] ||= 'test'
5
+
6
+ # Run Coverage report
7
+ require 'solidus_dev_support/rspec/coverage'
8
+
9
+ require File.expand_path('dummy/config/environment.rb', __dir__)
10
+
11
+ # Requires factories and other useful helpers defined in spree_core.
12
+ require 'solidus_dev_support/rspec/feature_helper'
13
+
14
+ # Requires supporting ruby files with custom matchers and macros, etc,
15
+ # in spec/support/ and its subdirectories.
16
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].sort.each { |f| require f }
17
+
18
+ # Requires factories defined in lib/solidus_paypal_braintree/factories.rb
19
+ require 'solidus_paypal_braintree/factories'
20
+
21
+ RSpec.configure do |config|
22
+ config.infer_spec_type_from_file_location!
23
+ config.use_transactional_fixtures = false
24
+ config.raise_errors_for_deprecations!
25
+ config.example_status_persistence_file_path = "./spec/examples.txt"
26
+ end
@@ -0,0 +1,7 @@
1
+ RSpec.configure do |config|
2
+ config.before(:each, type: :feature, js: true) do
3
+ page.driver.browser.manage.window.resize_to(1600, 1024)
4
+ end
5
+ end
6
+
7
+ Capybara.javascript_driver = (ENV['CAPYBARA_DRIVER'] || :selenium_chrome).to_sym
@@ -0,0 +1,2 @@
1
+ # Requires factories defined in lib/solidus_paypal_braintree/factories.rb
2
+ require 'solidus_paypal_braintree/factories'
@@ -0,0 +1,29 @@
1
+ module SolidusPaypalBraintree
2
+ module GatewayHelpers
3
+ def new_gateway(opts = {})
4
+ SolidusPaypalBraintree::Gateway.new({
5
+ name: "Braintree",
6
+ preferences: {
7
+ environment: 'sandbox',
8
+ public_key: ENV.fetch('BRAINTREE_PUBLIC_KEY', 'dummy_public_key'),
9
+ private_key: ENV.fetch('BRAINTREE_PRIVATE_KEY', 'dummy_private_key'),
10
+ merchant_id: ENV.fetch('BRAINTREE_MERCHANT_ID', 'dummy_merchant_id'),
11
+ merchant_currency_map: {
12
+ 'EUR' => 'stembolt_EUR'
13
+ },
14
+ paypal_payee_email_map: {
15
+ 'EUR' => ENV.fetch('BRAINTREE_PAYPAL_PAYEE_EMAIL', 'paypal+europe@example.com')
16
+ }
17
+ }
18
+ }.merge(opts))
19
+ end
20
+
21
+ def create_gateway(opts = {})
22
+ new_gateway(opts).tap(&:save!)
23
+ end
24
+ end
25
+ end
26
+
27
+ RSpec.configure do |config|
28
+ config.include SolidusPaypalBraintree::GatewayHelpers
29
+ end
@@ -0,0 +1,37 @@
1
+ shared_context 'when order is ready for payment' do
2
+ let!(:country) { create :country }
3
+
4
+ let(:user) { create :user }
5
+ let(:address) { create :address, zipcode: "90210", lastname: "Doe", country: country }
6
+
7
+ before do
8
+ create :shipping_method, cost: 5
9
+ end
10
+
11
+ let(:gateway) do
12
+ new_gateway(auto_capture: true)
13
+ end
14
+
15
+ let(:order) do
16
+ order = Spree::Order.create!(
17
+ line_items: [create(:line_item, price: 50)],
18
+ email: 'test@example.com',
19
+ bill_address: address,
20
+ ship_address: address,
21
+ user: user
22
+ )
23
+ order.recalculate
24
+
25
+ expect(order.state).to eq "cart"
26
+
27
+ # push through cart, address and delivery
28
+ # its sadly unsafe to use any reasonable factory here accross
29
+ # supported solidus versions
30
+ order.next!
31
+ order.next!
32
+ order.next!
33
+
34
+ expect(order.state).to eq "payment"
35
+ order
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ require 'vcr'
2
+ require 'webmock'
3
+
4
+ VCR.configure do |c|
5
+ c.cassette_library_dir = "spec/fixtures/cassettes"
6
+ c.hook_into :webmock
7
+ c.configure_rspec_metadata!
8
+ c.default_cassette_options = {
9
+ match_requests_on: [:method, :uri, :body]
10
+ }
11
+ c.allow_http_connections_when_no_cassette = false
12
+ c.ignore_localhost = true
13
+ c.ignore_hosts 'chromedriver.storage.googleapis.com'
14
+
15
+ # client token used for the fronted JS lib cannot be mocked:
16
+ # it contains a cryptographically signed string containing the merchant id
17
+ # that's sent back to braintree's server by the JS lib
18
+ c.ignore_request do |request|
19
+ !(request.uri =~ %r{/merchants/\w+/client_token\z}).nil?
20
+ end
21
+
22
+ # match a request to Braintree sandbox APIs by ignoring the merchant ID
23
+ # in the request URI
24
+ c.register_request_matcher :braintree_uri do |request1, request2|
25
+ extract_url_resource = lambda do |uri|
26
+ uri_match_pattern =
27
+ %r{\Ahttps://api\.sandbox\.braintreegateway\.com/merchants/\w+(/.*)\z}
28
+
29
+ if match = uri.match(uri_match_pattern)
30
+ match.captures.first
31
+ end
32
+ end
33
+ r1_resource = extract_url_resource.call(request1.uri)
34
+ r2_resource = extract_url_resource.call(request2.uri)
35
+
36
+ !r1_resource.nil? && r1_resource == r2_resource
37
+ end
38
+
39
+ # https://github.com/titusfortner/webdrivers/wiki/Using-with-VCR-or-WebMock
40
+ driver_hosts = Webdrivers::Common.subclasses.map { |driver| URI(driver.base_url).host }
41
+ c.ignore_hosts(*driver_hosts)
42
+ end
@@ -0,0 +1 @@
1
+ ApplicationController.prepend_view_path "spec/fixtures/views"
metadata CHANGED
@@ -1,49 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_paypal_braintree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stembolt
8
- autorequire:
9
- bindir: bin
8
+ autorequire:
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-20 00:00:00.000000000 Z
11
+ date: 2020-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: solidus
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '3'
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '1.0'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '3'
33
- - !ruby/object:Gem::Dependency
34
- name: solidus_support
14
+ name: activemerchant
35
15
  requirement: !ruby/object:Gem::Requirement
36
16
  requirements:
37
- - - ">="
17
+ - - "~>"
38
18
  - !ruby/object:Gem::Version
39
- version: 0.1.3
19
+ version: '1.48'
40
20
  type: :runtime
41
21
  prerelease: false
42
22
  version_requirements: !ruby/object:Gem::Requirement
43
23
  requirements:
44
- - - ">="
24
+ - - "~>"
45
25
  - !ruby/object:Gem::Version
46
- version: 0.1.3
26
+ version: '1.48'
47
27
  - !ruby/object:Gem::Dependency
48
28
  name: braintree
49
29
  requirement: !ruby/object:Gem::Requirement
@@ -59,175 +39,61 @@ dependencies:
59
39
  - !ruby/object:Gem::Version
60
40
  version: '2.65'
61
41
  - !ruby/object:Gem::Dependency
62
- name: activemerchant
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '1.48'
68
- type: :runtime
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '1.48'
75
- - !ruby/object:Gem::Dependency
76
- name: capybara
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- - !ruby/object:Gem::Dependency
90
- name: puma
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- - !ruby/object:Gem::Dependency
104
- name: capybara-screenshot
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
- - !ruby/object:Gem::Dependency
118
- name: launchy
42
+ name: solidus_api
119
43
  requirement: !ruby/object:Gem::Requirement
120
44
  requirements:
121
45
  - - ">="
122
46
  - !ruby/object:Gem::Version
123
- version: '0'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: '0'
131
- - !ruby/object:Gem::Dependency
132
- name: poltergeist
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- version: '0'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - ">="
143
- - !ruby/object:Gem::Version
144
- version: '0'
145
- - !ruby/object:Gem::Dependency
146
- name: coffee-rails
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
47
+ version: 2.0.0
48
+ - - "<"
150
49
  - !ruby/object:Gem::Version
151
- version: '0'
152
- type: :development
50
+ version: '3'
51
+ type: :runtime
153
52
  prerelease: false
154
53
  version_requirements: !ruby/object:Gem::Requirement
155
54
  requirements:
156
55
  - - ">="
157
56
  - !ruby/object:Gem::Version
158
- version: '0'
159
- - !ruby/object:Gem::Dependency
160
- name: sass-rails
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - ">="
164
- - !ruby/object:Gem::Version
165
- version: '0'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - ">="
57
+ version: 2.0.0
58
+ - - "<"
171
59
  - !ruby/object:Gem::Version
172
- version: '0'
60
+ version: '3'
173
61
  - !ruby/object:Gem::Dependency
174
- name: database_cleaner
62
+ name: solidus_core
175
63
  requirement: !ruby/object:Gem::Requirement
176
64
  requirements:
177
65
  - - ">="
178
66
  - !ruby/object:Gem::Version
179
- version: '0'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - ">="
185
- - !ruby/object:Gem::Version
186
- version: '0'
187
- - !ruby/object:Gem::Dependency
188
- name: factory_bot
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - ">="
67
+ version: 2.0.0
68
+ - - "<"
192
69
  - !ruby/object:Gem::Version
193
- version: '0'
194
- type: :development
70
+ version: '3'
71
+ type: :runtime
195
72
  prerelease: false
196
73
  version_requirements: !ruby/object:Gem::Requirement
197
74
  requirements:
198
75
  - - ">="
199
76
  - !ruby/object:Gem::Version
200
- version: '0'
201
- - !ruby/object:Gem::Dependency
202
- name: rspec-rails
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- version: '0'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - ">="
77
+ version: 2.0.0
78
+ - - "<"
213
79
  - !ruby/object:Gem::Version
214
- version: '0'
80
+ version: '3'
215
81
  - !ruby/object:Gem::Dependency
216
- name: rubocop
82
+ name: solidus_support
217
83
  requirement: !ruby/object:Gem::Requirement
218
84
  requirements:
219
85
  - - "~>"
220
86
  - !ruby/object:Gem::Version
221
- version: 0.53.0
222
- type: :development
87
+ version: 0.5.0
88
+ type: :runtime
223
89
  prerelease: false
224
90
  version_requirements: !ruby/object:Gem::Requirement
225
91
  requirements:
226
92
  - - "~>"
227
93
  - !ruby/object:Gem::Version
228
- version: 0.53.0
94
+ version: 0.5.0
229
95
  - !ruby/object:Gem::Dependency
230
- name: rubocop-rspec
96
+ name: selenium-webdriver
231
97
  requirement: !ruby/object:Gem::Requirement
232
98
  requirements:
233
99
  - - ">="
@@ -241,7 +107,7 @@ dependencies:
241
107
  - !ruby/object:Gem::Version
242
108
  version: '0'
243
109
  - !ruby/object:Gem::Dependency
244
- name: simplecov
110
+ name: solidus_dev_support
245
111
  requirement: !ruby/object:Gem::Requirement
246
112
  requirements:
247
113
  - - ">="
@@ -255,7 +121,7 @@ dependencies:
255
121
  - !ruby/object:Gem::Version
256
122
  version: '0'
257
123
  - !ruby/object:Gem::Dependency
258
- name: sqlite3
124
+ name: vcr
259
125
  requirement: !ruby/object:Gem::Requirement
260
126
  requirements:
261
127
  - - ">="
@@ -282,26 +148,20 @@ dependencies:
282
148
  - - ">="
283
149
  - !ruby/object:Gem::Version
284
150
  version: '0'
285
- - !ruby/object:Gem::Dependency
286
- name: vcr
287
- requirement: !ruby/object:Gem::Requirement
288
- requirements:
289
- - - ">="
290
- - !ruby/object:Gem::Version
291
- version: '0'
292
- type: :development
293
- prerelease: false
294
- version_requirements: !ruby/object:Gem::Requirement
295
- requirements:
296
- - - ">="
297
- - !ruby/object:Gem::Version
298
- version: '0'
299
151
  description: Uses the javascript API for seamless braintree payments
300
152
  email: braintree+gemfile@stembolt.com
301
153
  executables: []
302
154
  extensions: []
303
155
  extra_rdoc_files: []
304
156
  files:
157
+ - ".circleci/config.yml"
158
+ - ".gem_release.yml"
159
+ - ".github/stale.yml"
160
+ - ".gitignore"
161
+ - ".rspec"
162
+ - ".rubocop.yml"
163
+ - CHANGELOG.md
164
+ - Gemfile
305
165
  - LICENSE
306
166
  - README.md
307
167
  - Rakefile
@@ -312,15 +172,23 @@ files:
312
172
  - app/assets/javascripts/solidus_paypal_braintree/frontend.js
313
173
  - app/assets/javascripts/solidus_paypal_braintree/hosted_form.js
314
174
  - app/assets/javascripts/solidus_paypal_braintree/paypal_button.js
175
+ - app/assets/javascripts/solidus_paypal_braintree/paypal_messaging.js
315
176
  - app/assets/javascripts/solidus_paypal_braintree/promise.js
316
177
  - app/assets/javascripts/spree/backend/solidus_paypal_braintree.js
317
178
  - app/assets/javascripts/spree/frontend/paypal_button.js
318
179
  - app/assets/javascripts/spree/frontend/solidus_paypal_braintree.js
319
180
  - app/assets/stylesheets/spree/backend/solidus_paypal_braintree.scss
320
181
  - app/assets/stylesheets/spree/frontend/solidus_paypal_braintree.css
321
- - app/controllers/solidus_paypal_braintree/client_tokens_controller.rb
322
- - app/helpers/braintree_admin_helper.rb
182
+ - app/decorators/controllers/solidus_paypal_braintree/admin_payments_controller_decorator.rb
183
+ - app/decorators/controllers/solidus_paypal_braintree/checkout_controller_decorator.rb
184
+ - app/decorators/controllers/solidus_paypal_braintree/client_tokens_controller.rb
185
+ - app/decorators/controllers/solidus_paypal_braintree/orders_controller_decorator.rb
186
+ - app/decorators/models/solidus_paypal_braintree/spree/store_decorator.rb
187
+ - app/decorators/models/solidus_paypal_braintree/spree/user_decorator.rb
188
+ - app/helpers/solidus_paypal_braintree/braintree_admin_helper.rb
189
+ - app/helpers/solidus_paypal_braintree/braintree_checkout_helper.rb
323
190
  - app/models/application_record.rb
191
+ - app/models/solidus_paypal_braintree/address.rb
324
192
  - app/models/solidus_paypal_braintree/avs_result.rb
325
193
  - app/models/solidus_paypal_braintree/configuration.rb
326
194
  - app/models/solidus_paypal_braintree/customer.rb
@@ -330,14 +198,17 @@ files:
330
198
  - app/models/solidus_paypal_braintree/transaction.rb
331
199
  - app/models/solidus_paypal_braintree/transaction_address.rb
332
200
  - app/models/solidus_paypal_braintree/transaction_import.rb
333
- - app/models/spree/store_decorator.rb
201
+ - app/views/spree/api/payments/source_views/_paypal_braintree.json.jbuilder
202
+ - app/views/spree/checkout/existing_payment/_paypal_braintree.html.erb
334
203
  - app/views/spree/shared/_apple_pay_button.html.erb
335
204
  - app/views/spree/shared/_braintree_errors.html.erb
336
205
  - app/views/spree/shared/_braintree_hosted_fields.html.erb
337
206
  - app/views/spree/shared/_paypal_braintree_head_scripts.html.erb
338
207
  - app/views/spree/shared/_paypal_cart_button.html.erb
339
- - app/views/spree/shared/_paypal_checkout_button.html.erb
340
- - config/initializers/braintree.rb
208
+ - app/views/spree/shared/_paypal_messaging.html.erb
209
+ - bin/console
210
+ - bin/rails
211
+ - bin/setup
341
212
  - config/locales/en.yml
342
213
  - config/locales/it.yml
343
214
  - config/routes.rb
@@ -348,6 +219,8 @@ files:
348
219
  - db/migrate/20170203191030_add_credit_card_to_braintree_configuration.rb
349
220
  - db/migrate/20170505193712_add_null_constraint_to_sources.rb
350
221
  - db/migrate/20170508085402_add_not_null_constraint_to_sources_payment_type.rb
222
+ - db/migrate/20190705115327_add_paypal_button_preferences_to_braintree_configurations.rb
223
+ - db/migrate/20190911141712_add_3d_secure_to_braintree_configuration.rb
351
224
  - lib/controllers/backend/solidus_paypal_braintree/configurations_controller.rb
352
225
  - lib/controllers/frontend/solidus_paypal_braintree/checkouts_controller.rb
353
226
  - lib/controllers/frontend/solidus_paypal_braintree/transactions_controller.rb
@@ -364,28 +237,143 @@ files:
364
237
  - lib/views/backend_v1.2/spree/admin/payments/source_forms/_paypal_braintree.html.erb
365
238
  - lib/views/backend_v2.4/spree/admin/shared/preference_fields/_hash.html.erb
366
239
  - lib/views/frontend/spree/checkout/payment/_paypal_braintree.html.erb
367
- homepage: https://stembolt.com
240
+ - lib/views/frontend/spree/shared/_paypal_checkout_button.html.erb
241
+ - solidus_paypal_braintree.gemspec
242
+ - spec/controllers/solidus_paypal_braintree/checkouts_controller_spec.rb
243
+ - spec/controllers/solidus_paypal_braintree/client_tokens_controller_spec.rb
244
+ - spec/controllers/solidus_paypal_braintree/configurations_controller_spec.rb
245
+ - spec/controllers/solidus_paypal_braintree/transactions_controller_spec.rb
246
+ - spec/features/backend/configuration_spec.rb
247
+ - spec/features/backend/new_payment_spec.rb
248
+ - spec/features/frontend/braintree_credit_card_checkout_spec.rb
249
+ - spec/features/frontend/paypal_checkout_spec.rb
250
+ - spec/fixtures/cassettes/admin/invalid_credit_card.yml
251
+ - spec/fixtures/cassettes/admin/resubmit_credit_card.yml
252
+ - spec/fixtures/cassettes/admin/valid_credit_card.yml
253
+ - spec/fixtures/cassettes/braintree/create_profile.yml
254
+ - spec/fixtures/cassettes/braintree/generate_token.yml
255
+ - spec/fixtures/cassettes/braintree/token.yml
256
+ - spec/fixtures/cassettes/checkout/invalid_credit_card.yml
257
+ - spec/fixtures/cassettes/checkout/resubmit_credit_card.yml
258
+ - spec/fixtures/cassettes/checkout/update.yml
259
+ - spec/fixtures/cassettes/checkout/valid_credit_card.yml
260
+ - spec/fixtures/cassettes/gateway/authorize.yml
261
+ - spec/fixtures/cassettes/gateway/authorize/credit_card/address.yml
262
+ - spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml
263
+ - spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml
264
+ - spec/fixtures/cassettes/gateway/authorize/paypal/address.yml
265
+ - spec/fixtures/cassettes/gateway/authorized_transaction.yml
266
+ - spec/fixtures/cassettes/gateway/cancel/missing.yml
267
+ - spec/fixtures/cassettes/gateway/cancel/refunds.yml
268
+ - spec/fixtures/cassettes/gateway/cancel/void.yml
269
+ - spec/fixtures/cassettes/gateway/capture.yml
270
+ - spec/fixtures/cassettes/gateway/complete.yml
271
+ - spec/fixtures/cassettes/gateway/credit.yml
272
+ - spec/fixtures/cassettes/gateway/purchase.yml
273
+ - spec/fixtures/cassettes/gateway/settled_transaction.yml
274
+ - spec/fixtures/cassettes/gateway/void.yml
275
+ - spec/fixtures/cassettes/source/card_type.yml
276
+ - spec/fixtures/cassettes/source/last4.yml
277
+ - spec/fixtures/cassettes/transaction/import/valid.yml
278
+ - spec/fixtures/cassettes/transaction/import/valid/capture.yml
279
+ - spec/fixtures/views/spree/orders/edit.html.erb
280
+ - spec/helpers/solidus_paypal_braintree/braintree_admin_helper_spec.rb
281
+ - spec/models/solidus_paypal_braintree/address_spec.rb
282
+ - spec/models/solidus_paypal_braintree/avs_result_spec.rb
283
+ - spec/models/solidus_paypal_braintree/gateway_spec.rb
284
+ - spec/models/solidus_paypal_braintree/response_spec.rb
285
+ - spec/models/solidus_paypal_braintree/source_spec.rb
286
+ - spec/models/solidus_paypal_braintree/transaction_address_spec.rb
287
+ - spec/models/solidus_paypal_braintree/transaction_import_spec.rb
288
+ - spec/models/solidus_paypal_braintree/transaction_spec.rb
289
+ - spec/models/spree/store_spec.rb
290
+ - spec/requests/spree/api/orders_controller_spec.rb
291
+ - spec/spec_helper.rb
292
+ - spec/support/capybara.rb
293
+ - spec/support/factories.rb
294
+ - spec/support/gateway_helpers.rb
295
+ - spec/support/order_ready_for_payment.rb
296
+ - spec/support/vcr.rb
297
+ - spec/support/views.rb
298
+ homepage: https://github.com/solidusio/solidus_paypal_braintree
368
299
  licenses:
369
300
  - BSD-3-Clause
370
- metadata: {}
371
- post_install_message:
301
+ metadata:
302
+ homepage_uri: https://github.com/solidusio/solidus_paypal_braintree
303
+ source_code_uri: https://github.com/solidusio/solidus_paypal_braintree
304
+ post_install_message:
372
305
  rdoc_options: []
373
306
  require_paths:
374
307
  - lib
375
308
  required_ruby_version: !ruby/object:Gem::Requirement
376
309
  requirements:
377
- - - ">="
310
+ - - "~>"
378
311
  - !ruby/object:Gem::Version
379
- version: '0'
312
+ version: '2.4'
380
313
  required_rubygems_version: !ruby/object:Gem::Requirement
381
314
  requirements:
382
315
  - - ">="
383
316
  - !ruby/object:Gem::Version
384
317
  version: '0'
385
318
  requirements: []
386
- rubyforge_project:
387
- rubygems_version: 2.7.6
388
- signing_key:
319
+ rubygems_version: 3.1.4
320
+ signing_key:
389
321
  specification_version: 4
390
322
  summary: Officially supported Paypal/Braintree extension
391
- test_files: []
323
+ test_files:
324
+ - spec/spec_helper.rb
325
+ - spec/features/frontend/braintree_credit_card_checkout_spec.rb
326
+ - spec/features/frontend/paypal_checkout_spec.rb
327
+ - spec/features/backend/configuration_spec.rb
328
+ - spec/features/backend/new_payment_spec.rb
329
+ - spec/models/solidus_paypal_braintree/transaction_import_spec.rb
330
+ - spec/models/solidus_paypal_braintree/gateway_spec.rb
331
+ - spec/models/solidus_paypal_braintree/transaction_address_spec.rb
332
+ - spec/models/solidus_paypal_braintree/transaction_spec.rb
333
+ - spec/models/solidus_paypal_braintree/source_spec.rb
334
+ - spec/models/solidus_paypal_braintree/avs_result_spec.rb
335
+ - spec/models/solidus_paypal_braintree/response_spec.rb
336
+ - spec/models/solidus_paypal_braintree/address_spec.rb
337
+ - spec/models/spree/store_spec.rb
338
+ - spec/requests/spree/api/orders_controller_spec.rb
339
+ - spec/support/capybara.rb
340
+ - spec/support/views.rb
341
+ - spec/support/vcr.rb
342
+ - spec/support/gateway_helpers.rb
343
+ - spec/support/factories.rb
344
+ - spec/support/order_ready_for_payment.rb
345
+ - spec/fixtures/cassettes/transaction/import/valid.yml
346
+ - spec/fixtures/cassettes/transaction/import/valid/capture.yml
347
+ - spec/fixtures/cassettes/braintree/create_profile.yml
348
+ - spec/fixtures/cassettes/braintree/generate_token.yml
349
+ - spec/fixtures/cassettes/braintree/token.yml
350
+ - spec/fixtures/cassettes/source/last4.yml
351
+ - spec/fixtures/cassettes/source/card_type.yml
352
+ - spec/fixtures/cassettes/admin/valid_credit_card.yml
353
+ - spec/fixtures/cassettes/admin/invalid_credit_card.yml
354
+ - spec/fixtures/cassettes/admin/resubmit_credit_card.yml
355
+ - spec/fixtures/cassettes/checkout/valid_credit_card.yml
356
+ - spec/fixtures/cassettes/checkout/invalid_credit_card.yml
357
+ - spec/fixtures/cassettes/checkout/update.yml
358
+ - spec/fixtures/cassettes/checkout/resubmit_credit_card.yml
359
+ - spec/fixtures/cassettes/gateway/cancel/missing.yml
360
+ - spec/fixtures/cassettes/gateway/cancel/refunds.yml
361
+ - spec/fixtures/cassettes/gateway/cancel/void.yml
362
+ - spec/fixtures/cassettes/gateway/capture.yml
363
+ - spec/fixtures/cassettes/gateway/settled_transaction.yml
364
+ - spec/fixtures/cassettes/gateway/authorized_transaction.yml
365
+ - spec/fixtures/cassettes/gateway/void.yml
366
+ - spec/fixtures/cassettes/gateway/credit.yml
367
+ - spec/fixtures/cassettes/gateway/authorize.yml
368
+ - spec/fixtures/cassettes/gateway/authorize/credit_card/address.yml
369
+ - spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml
370
+ - spec/fixtures/cassettes/gateway/authorize/paypal/address.yml
371
+ - spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml
372
+ - spec/fixtures/cassettes/gateway/complete.yml
373
+ - spec/fixtures/cassettes/gateway/purchase.yml
374
+ - spec/fixtures/views/spree/orders/edit.html.erb
375
+ - spec/controllers/solidus_paypal_braintree/configurations_controller_spec.rb
376
+ - spec/controllers/solidus_paypal_braintree/transactions_controller_spec.rb
377
+ - spec/controllers/solidus_paypal_braintree/client_tokens_controller_spec.rb
378
+ - spec/controllers/solidus_paypal_braintree/checkouts_controller_spec.rb
379
+ - spec/helpers/solidus_paypal_braintree/braintree_admin_helper_spec.rb