braintree 4.14.0 → 4.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/braintree/credit_card.rb +13 -0
- data/lib/braintree/credit_card_gateway.rb +15 -3
- data/lib/braintree/payment_method_gateway.rb +15 -3
- data/lib/braintree/test/nonce.rb +1 -0
- data/lib/braintree/test/venmo_sdk.rb +2 -0
- data/lib/braintree/transaction/credit_card_details.rb +3 -0
- data/lib/braintree/transaction/local_payment_details.rb +2 -0
- data/lib/braintree/transaction.rb +5 -4
- data/lib/braintree/transaction_gateway.rb +15 -3
- data/lib/braintree/transaction_search.rb +6 -5
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/webhook_notification.rb +1 -0
- data/lib/braintree/webhook_testing_gateway.rb +17 -0
- data/spec/integration/braintree/add_on_spec.rb +9 -9
- data/spec/integration/braintree/address_spec.rb +69 -69
- data/spec/integration/braintree/advanced_search_spec.rb +45 -45
- data/spec/integration/braintree/apple_pay_spec.rb +8 -8
- data/spec/integration/braintree/client_api/client_token_spec.rb +15 -15
- data/spec/integration/braintree/credit_card_spec.rb +223 -223
- data/spec/integration/braintree/credit_card_verification_search_spec.rb +16 -16
- data/spec/integration/braintree/credit_card_verification_spec.rb +52 -52
- data/spec/integration/braintree/customer_search_spec.rb +20 -20
- data/spec/integration/braintree/customer_spec.rb +313 -313
- data/spec/integration/braintree/disbursement_spec.rb +2 -2
- data/spec/integration/braintree/discount_spec.rb +9 -9
- data/spec/integration/braintree/dispute_spec.rb +87 -87
- data/spec/integration/braintree/document_upload_spec.rb +17 -17
- data/spec/integration/braintree/error_codes_spec.rb +2 -2
- data/spec/integration/braintree/http_spec.rb +28 -28
- data/spec/integration/braintree/merchant_account_spec.rb +127 -127
- data/spec/integration/braintree/merchant_spec.rb +103 -103
- data/spec/integration/braintree/oauth_spec.rb +61 -61
- data/spec/integration/braintree/payment_method_nonce_spec.rb +73 -73
- data/spec/integration/braintree/payment_method_spec.rb +389 -389
- data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +78 -78
- data/spec/integration/braintree/paypal_account_spec.rb +38 -38
- data/spec/integration/braintree/plan_spec.rb +15 -15
- data/spec/integration/braintree/samsung_pay_card_spec.rb +65 -65
- data/spec/integration/braintree/sepa_direct_debit_account_spec.rb +51 -51
- data/spec/integration/braintree/settlement_batch_summary_spec.rb +11 -11
- data/spec/integration/braintree/subscription_spec.rb +364 -364
- data/spec/integration/braintree/test/transaction_amounts_spec.rb +2 -2
- data/spec/integration/braintree/test_transaction_spec.rb +19 -19
- data/spec/integration/braintree/transaction_line_item_spec.rb +6 -6
- data/spec/integration/braintree/transaction_search_spec.rb +198 -165
- data/spec/integration/braintree/transaction_spec.rb +1315 -1149
- data/spec/integration/braintree/transaction_us_bank_account_spec.rb +32 -32
- data/spec/integration/braintree/us_bank_account_spec.rb +30 -30
- data/spec/integration/braintree/us_bank_account_verification_search_spec.rb +18 -18
- data/spec/integration/braintree/us_bank_account_verification_spec.rb +33 -33
- data/spec/integration/braintree/visa_checkout_card_spec.rb +57 -57
- data/spec/spec_helper.rb +9 -8
- data/spec/unit/braintree/address_spec.rb +8 -8
- data/spec/unit/braintree/base_module_spec.rb +4 -4
- data/spec/unit/braintree/client_token_spec.rb +2 -2
- data/spec/unit/braintree/configuration_spec.rb +57 -57
- data/spec/unit/braintree/credentials_parser_spec.rb +6 -6
- data/spec/unit/braintree/credit_card_spec.rb +31 -29
- data/spec/unit/braintree/credit_card_verification_gateway_spec.rb +28 -28
- data/spec/unit/braintree/credit_card_verification_search_spec.rb +9 -9
- data/spec/unit/braintree/credit_card_verification_spec.rb +17 -17
- data/spec/unit/braintree/customer_spec.rb +41 -40
- data/spec/unit/braintree/digest_spec.rb +5 -5
- data/spec/unit/braintree/disbursement_spec.rb +11 -11
- data/spec/unit/braintree/dispute_search_spec.rb +2 -2
- data/spec/unit/braintree/dispute_spec.rb +56 -56
- data/spec/unit/braintree/document_upload_spec.rb +8 -8
- data/spec/unit/braintree/enriched_customer_data_spec.rb +2 -2
- data/spec/unit/braintree/error_result_spec.rb +5 -5
- data/spec/unit/braintree/errors_spec.rb +9 -9
- data/spec/unit/braintree/http_spec.rb +8 -8
- data/spec/unit/braintree/local_payment_completed_spec.rb +11 -11
- data/spec/unit/braintree/local_payment_expired_spec.rb +2 -2
- data/spec/unit/braintree/local_payment_funded_spec.rb +6 -6
- data/spec/unit/braintree/merchant_account_spec.rb +4 -4
- data/spec/unit/braintree/modification_spec.rb +1 -1
- data/spec/unit/braintree/payment_method_customer_data_updated_metadata_spec.rb +6 -6
- data/spec/unit/braintree/payment_method_nonce_details_payer_info_spec.rb +7 -7
- data/spec/unit/braintree/payment_method_nonce_details_spec.rb +14 -14
- data/spec/unit/braintree/payment_method_spec.rb +19 -19
- data/spec/unit/braintree/paypal_account_spec.rb +4 -4
- data/spec/unit/braintree/resource_collection_spec.rb +7 -7
- data/spec/unit/braintree/sepa_debit_account_nonce_details_spec.rb +1 -1
- data/spec/unit/braintree/sha256_digest_spec.rb +1 -1
- data/spec/unit/braintree/signature_service_spec.rb +2 -2
- data/spec/unit/braintree/subscription_search_spec.rb +17 -17
- data/spec/unit/braintree/subscription_spec.rb +8 -8
- data/spec/unit/braintree/successful_result_spec.rb +5 -5
- data/spec/unit/braintree/three_d_secure_info_spec.rb +20 -20
- data/spec/unit/braintree/transaction/credit_card_details_spec.rb +5 -5
- data/spec/unit/braintree/transaction/customer_details_spec.rb +1 -1
- data/spec/unit/braintree/transaction/deposit_details_spec.rb +2 -2
- data/spec/unit/braintree/transaction/local_payment_details_spec.rb +30 -0
- data/spec/unit/braintree/transaction_gateway_spec.rb +9 -6
- data/spec/unit/braintree/transaction_search_spec.rb +2 -2
- data/spec/unit/braintree/transaction_spec.rb +101 -93
- data/spec/unit/braintree/unknown_payment_method_spec.rb +4 -4
- data/spec/unit/braintree/us_bank_account_spec.rb +2 -2
- data/spec/unit/braintree/us_bank_account_verification_search_spec.rb +7 -7
- data/spec/unit/braintree/us_bank_account_verification_spec.rb +7 -7
- data/spec/unit/braintree/util_spec.rb +27 -27
- data/spec/unit/braintree/validation_error_collection_spec.rb +34 -34
- data/spec/unit/braintree/validation_error_spec.rb +4 -4
- data/spec/unit/braintree/venmo_profile_data_spec.rb +5 -5
- data/spec/unit/braintree/webhook_notification_spec.rb +206 -191
- data/spec/unit/braintree/xml/libxml_spec.rb +5 -5
- data/spec/unit/braintree/xml/parser_spec.rb +8 -8
- data/spec/unit/braintree/xml/rexml_spec.rb +5 -5
- data/spec/unit/braintree/xml_spec.rb +17 -17
- data/spec/unit/braintree_spec.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71fab9e9404ac3f2c30216aca3642baecbd01c942a25c16c70b6748563f32435
|
4
|
+
data.tar.gz: b8900d8aa7aac3716db035478510532bb82edd40ba599626d7cbe770fa939849
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9470b1e652814a7ae2fda1250b2c9f670069f1ef98a601ce2a382a4e3430017eaeaeaf7dabe4bc1b456c755d1b0fb258b06fc0593432d2b35c2ce9fc02671d5a
|
7
|
+
data.tar.gz: e376876f7c6ae2c5a1ce588c847d3494e828b29c4f2aee273d5e2c97348577db364b4bcc48ba0588074d87644a39f771b45c7eb56e7865be1cec730a76e72162
|
@@ -23,6 +23,16 @@ module Braintree
|
|
23
23
|
All = constants.map { |c| const_get(c) }
|
24
24
|
end
|
25
25
|
|
26
|
+
module DebitNetwork
|
27
|
+
Accel = "ACCEL"
|
28
|
+
Nyce = "NYCE"
|
29
|
+
Pulse = "PULSE"
|
30
|
+
Star = "STAR"
|
31
|
+
Star_Access = "STAR_ACCESS"
|
32
|
+
|
33
|
+
All = constants.map { |c| const_get(c) }
|
34
|
+
end
|
35
|
+
|
26
36
|
module CustomerLocation
|
27
37
|
International = "international"
|
28
38
|
US = "us"
|
@@ -160,7 +170,10 @@ module Braintree
|
|
160
170
|
end
|
161
171
|
|
162
172
|
# Returns true if the card is associated with Venmo SDK
|
173
|
+
# NEXT_MAJOR_VERSION Remove this method
|
174
|
+
# The old venmo SDK class has been deprecated
|
163
175
|
def venmo_sdk?
|
176
|
+
warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
|
164
177
|
@venmo_sdk
|
165
178
|
end
|
166
179
|
|
@@ -12,6 +12,10 @@ module Braintree
|
|
12
12
|
if attributes.has_key?(:expiration_date) && (attributes.has_key?(:expiration_month) || attributes.has_key?(:expiration_year))
|
13
13
|
raise ArgumentError.new("create with both expiration_month and expiration_year or only expiration_date")
|
14
14
|
end
|
15
|
+
# NEXT_MAJOR_VERSION remove this check
|
16
|
+
if attributes.has_key?(:venmo_sdk_payment_method_code) || attributes.has_key?(:venmo_sdk_session)
|
17
|
+
warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
|
18
|
+
end
|
15
19
|
Util.verify_keys(CreditCardGateway._create_signature, attributes)
|
16
20
|
_do_create("/payment_methods", :credit_card => attributes)
|
17
21
|
end
|
@@ -61,6 +65,10 @@ module Braintree
|
|
61
65
|
end
|
62
66
|
|
63
67
|
def update(token, attributes)
|
68
|
+
# NEXT_MAJOR_VERSION remove this check
|
69
|
+
if attributes.has_key?(:venmo_sdk_payment_method_code) || attributes.has_key?(:venmo_sdk_session)
|
70
|
+
warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
|
71
|
+
end
|
64
72
|
Util.verify_keys(CreditCardGateway._update_signature, attributes)
|
65
73
|
_do_update(:put, "/payment_methods/credit_card/#{token}", :credit_card => attributes)
|
66
74
|
end
|
@@ -79,21 +87,25 @@ module Braintree
|
|
79
87
|
|
80
88
|
def self._signature(type) # :nodoc:
|
81
89
|
billing_address_params = AddressGateway._shared_signature
|
90
|
+
# NEXT_MAJOR_VERSION Remove venmo_sdk_session
|
91
|
+
# The old venmo SDK class has been deprecated
|
82
92
|
options = [
|
83
93
|
:fail_on_duplicate_payment_method,
|
84
94
|
:make_default,
|
85
95
|
:skip_advanced_fraud_checking,
|
86
|
-
:venmo_sdk_session,
|
96
|
+
:venmo_sdk_session, # Deprecated
|
87
97
|
:verification_account_type,
|
88
98
|
:verification_amount,
|
89
99
|
:verification_currency_iso_code,
|
90
100
|
:verification_merchant_account_id,
|
91
101
|
:verify_card
|
92
102
|
]
|
103
|
+
# NEXT_MAJOR_VERSION Remove venmo_sdk_payment_method_code
|
104
|
+
# The old venmo SDK class has been deprecated
|
93
105
|
signature = [
|
94
106
|
:billing_address_id, :cardholder_name, :cvv, :expiration_date, :expiration_month,
|
95
|
-
:expiration_year, :number, :token, :venmo_sdk_payment_method_code,
|
96
|
-
:payment_method_nonce,
|
107
|
+
:expiration_year, :number, :token, :venmo_sdk_payment_method_code, # Deprecated
|
108
|
+
:device_data, :payment_method_nonce,
|
97
109
|
{:external_vault => [:network_transaction_id]},
|
98
110
|
{:options => options},
|
99
111
|
{:billing_address => billing_address_params}
|
@@ -9,6 +9,10 @@ module Braintree
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def create(attributes)
|
12
|
+
# NEXT_MAJOR_VERSION remove this check
|
13
|
+
if attributes.has_key?(:venmo_sdk_payment_method_code) || attributes.has_key?(:venmo_sdk_session)
|
14
|
+
warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
|
15
|
+
end
|
12
16
|
Util.verify_keys(PaymentMethodGateway._create_signature, attributes)
|
13
17
|
_do_create("/payment_methods", :payment_method => attributes)
|
14
18
|
end
|
@@ -60,6 +64,10 @@ module Braintree
|
|
60
64
|
end
|
61
65
|
|
62
66
|
def update(token, attributes)
|
67
|
+
# NEXT_MAJOR_VERSION remove this check
|
68
|
+
if attributes.has_key?(:venmo_sdk_payment_method_code) || attributes.has_key?(:venmo_sdk_session)
|
69
|
+
warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
|
70
|
+
end
|
63
71
|
Util.verify_keys(PaymentMethodGateway._update_signature, attributes)
|
64
72
|
_do_update(:put, "/payment_methods/any/#{token}", :payment_method => attributes)
|
65
73
|
end
|
@@ -149,11 +157,13 @@ module Braintree
|
|
149
157
|
def self._signature(type) # :nodoc:
|
150
158
|
billing_address_params = AddressGateway._shared_signature
|
151
159
|
paypal_options_shipping_signature = AddressGateway._shared_signature
|
160
|
+
# NEXT_MAJOR_VERSION Remove venmo_sdk_session
|
161
|
+
# The old venmo SDK class has been deprecated
|
152
162
|
options = [
|
153
163
|
:make_default,
|
154
164
|
:skip_advanced_fraud_checking,
|
155
165
|
:us_bank_account_verification_method,
|
156
|
-
:venmo_sdk_session,
|
166
|
+
:venmo_sdk_session, # Deprecated
|
157
167
|
:verification_account_type,
|
158
168
|
:verification_amount,
|
159
169
|
:verification_currency_iso_code,
|
@@ -168,10 +178,12 @@ module Braintree
|
|
168
178
|
{:shipping => paypal_options_shipping_signature}
|
169
179
|
],
|
170
180
|
]
|
181
|
+
# NEXT_MAJOR_VERSION Remove venmo_sdk_payment_method_code
|
182
|
+
# The old venmo SDK class has been deprecated
|
171
183
|
signature = [
|
172
184
|
:billing_address_id, :cardholder_name, :cvv, :expiration_date, :expiration_month,
|
173
|
-
:expiration_year, :number, :token, :venmo_sdk_payment_method_code,
|
174
|
-
:payment_method_nonce,
|
185
|
+
:expiration_year, :number, :token, :venmo_sdk_payment_method_code, # Deprecated
|
186
|
+
:device_data, :payment_method_nonce,
|
175
187
|
{:options => options},
|
176
188
|
{:billing_address => billing_address_params}
|
177
189
|
]
|
data/lib/braintree/test/nonce.rb
CHANGED
@@ -53,6 +53,7 @@ module Braintree
|
|
53
53
|
TransactableCountryOfIssuanceUSA = "fake-valid-country-of-issuance-usa-nonce"
|
54
54
|
TransactableCountryOfIssuanceCAD = "fake-valid-country-of-issuance-cad-nonce"
|
55
55
|
TransactableIssuingBankNetworkOnly = "fake-valid-issuing-bank-network-only-nonce"
|
56
|
+
TransactablePinlessDebitVisa = "fake-pinless-debit-visa-nonce"
|
56
57
|
ProcessorDeclinedVisa = "fake-processor-declined-visa-nonce"
|
57
58
|
ProcessorDeclinedMasterCard = "fake-processor-declined-mastercard-nonce"
|
58
59
|
ProcessorDeclinedAmEx = "fake-processor-declined-amex-nonce"
|
@@ -64,7 +64,10 @@ module Braintree
|
|
64
64
|
"#{bin}******#{last_4}"
|
65
65
|
end
|
66
66
|
|
67
|
+
# NEXT_MAJOR_VERSION Remove this method
|
68
|
+
# The old venmo SDK class has been deprecated
|
67
69
|
def venmo_sdk?
|
70
|
+
warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
|
68
71
|
@venmo_sdk
|
69
72
|
end
|
70
73
|
|
@@ -8,6 +8,8 @@ module Braintree
|
|
8
8
|
attr_reader :debug_id
|
9
9
|
attr_reader :description
|
10
10
|
attr_reader :funding_source
|
11
|
+
attr_reader :implicitly_vaulted_payment_method_global_id
|
12
|
+
attr_reader :implicitly_vaulted_payment_method_token
|
11
13
|
attr_reader :payer_id
|
12
14
|
attr_reader :payment_id
|
13
15
|
attr_reader :refund_from_transaction_fee_amount
|
@@ -91,8 +91,9 @@ module Braintree
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
attr_reader :acquirer_reference_number
|
95
94
|
attr_reader :ach_return_code
|
95
|
+
attr_reader :ach_return_responses
|
96
|
+
attr_reader :acquirer_reference_number
|
96
97
|
attr_reader :add_ons
|
97
98
|
attr_reader :additional_processor_response # The raw response from the processor.
|
98
99
|
attr_reader :amount
|
@@ -111,6 +112,7 @@ module Braintree
|
|
111
112
|
attr_reader :custom_fields
|
112
113
|
attr_reader :customer_details
|
113
114
|
attr_reader :cvv_response_code
|
115
|
+
attr_reader :debit_network
|
114
116
|
attr_reader :descriptor
|
115
117
|
attr_reader :disbursement_details
|
116
118
|
attr_reader :discount_amount
|
@@ -150,8 +152,8 @@ module Braintree
|
|
150
152
|
attr_reader :purchase_order_number
|
151
153
|
attr_reader :recurring
|
152
154
|
attr_reader :refund_ids
|
153
|
-
attr_reader :refunded_transaction_id
|
154
155
|
attr_reader :refunded_installments
|
156
|
+
attr_reader :refunded_transaction_id
|
155
157
|
attr_reader :retried
|
156
158
|
attr_reader :retried_transaction_id # the primary/parent transaction id of any retried transaction
|
157
159
|
attr_reader :retrieval_reference_number
|
@@ -159,9 +161,9 @@ module Braintree
|
|
159
161
|
attr_reader :risk_data
|
160
162
|
attr_reader :samsung_pay_card_details
|
161
163
|
attr_reader :sca_exemption_requested
|
162
|
-
attr_reader :service_fee_amount
|
163
164
|
attr_reader :sepa_direct_debit_account_details
|
164
165
|
attr_reader :sepa_direct_debit_return_code
|
166
|
+
attr_reader :service_fee_amount
|
165
167
|
attr_reader :settlement_batch_id
|
166
168
|
attr_reader :shipping_amount
|
167
169
|
attr_reader :shipping_details
|
@@ -179,7 +181,6 @@ module Braintree
|
|
179
181
|
attr_reader :venmo_account_details
|
180
182
|
attr_reader :visa_checkout_card_details
|
181
183
|
attr_reader :voice_referral_number
|
182
|
-
attr_reader :ach_return_responses
|
183
184
|
|
184
185
|
def self.adjust_authorization(*args)
|
185
186
|
Configuration.gateway.transaction.adjust_authorization(*args)
|
@@ -9,6 +9,14 @@ module Braintree
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def create(attributes)
|
12
|
+
# NEXT_MAJOR_VERSION remove this check
|
13
|
+
if attributes.has_key?(:venmo_sdk_payment_method_code) || attributes.has_key?(:venmo_sdk_session)
|
14
|
+
warn "[DEPRECATED] The Venmo SDK integration is Unsupported. Please update your integration to use Pay with Venmo instead."
|
15
|
+
end
|
16
|
+
# NEXT_MAJOR_VERSION remove this check
|
17
|
+
if attributes.has_key?(:three_d_secure_token)
|
18
|
+
warn "[DEPRECATED] Passing :three_d_secure_token to create is deprecated. Please use :three_d_secure_authentication_id"
|
19
|
+
end
|
12
20
|
Util.verify_keys(TransactionGateway._create_signature, attributes)
|
13
21
|
_do_create "/transactions", :transaction => attributes
|
14
22
|
end
|
@@ -183,6 +191,10 @@ module Braintree
|
|
183
191
|
[:amount, :channel, {:options => [:submit_for_settlement]}]
|
184
192
|
end
|
185
193
|
|
194
|
+
|
195
|
+
# NEXT_MAJOR_VERSION Remove venmo_sdk_payment_method_code, venmo_sdk_session, and three_d_secure_token
|
196
|
+
# The old venmo SDK class has been deprecated
|
197
|
+
# three_d_secure_token has been deprecated in favor of three_d_secure_authentication_id
|
186
198
|
def self._create_signature # :nodoc:
|
187
199
|
[
|
188
200
|
:amount, :billing_address_id, :channel, :customer_id, :device_data, :discount_amount,
|
@@ -190,8 +202,8 @@ module Braintree
|
|
190
202
|
:product_sku, :purchase_order_number, :service_fee_amount, :shared_billing_address_id,
|
191
203
|
:shared_customer_id, :shared_payment_method_nonce, :shared_payment_method_token,
|
192
204
|
:shared_shipping_address_id, :shipping_address_id, :shipping_amount,
|
193
|
-
:ships_from_postal_code, :tax_amount, :tax_exempt, :three_d_secure_authentication_id,
|
194
|
-
:
|
205
|
+
:ships_from_postal_code, :tax_amount, :tax_exempt, :three_d_secure_authentication_id,:three_d_secure_token, #Deprecated
|
206
|
+
:transaction_source, :type, :venmo_sdk_payment_method_code, # Deprecated
|
195
207
|
:sca_exemption, :currency_iso_code, :exchange_rate_quote_id,
|
196
208
|
{:line_items => [:quantity, :name, :description, :kind, :unit_amount, :unit_tax_amount, :total_amount, :discount_amount, :tax_amount, :unit_of_measure, :product_code, :commodity_code, :url]},
|
197
209
|
{:risk_data => [:customer_browser, :customer_device_id, :customer_ip, :customer_location_zip, :customer_tenure]},
|
@@ -222,7 +234,7 @@ module Braintree
|
|
222
234
|
:submit_for_settlement,
|
223
235
|
:add_billing_address_to_payment_method,
|
224
236
|
:store_shipping_address_in_vault,
|
225
|
-
:venmo_sdk_session,
|
237
|
+
:venmo_sdk_session, # Deprecated
|
226
238
|
:payee_id,
|
227
239
|
:payee_email,
|
228
240
|
:skip_advanced_fraud_checking,
|
@@ -54,15 +54,16 @@ module Braintree
|
|
54
54
|
CreditCard::CustomerLocation::International,
|
55
55
|
CreditCard::CustomerLocation::US
|
56
56
|
]
|
57
|
+
multiple_value_field :debit_network, :allows => CreditCard::DebitNetwork::All
|
57
58
|
multiple_value_field :ids
|
58
|
-
multiple_value_field :payment_instrument_type
|
59
|
-
multiple_value_field :user
|
60
59
|
multiple_value_field :merchant_account_id
|
61
|
-
multiple_value_field :
|
60
|
+
multiple_value_field :payment_instrument_type
|
61
|
+
multiple_value_field :reason_code
|
62
62
|
multiple_value_field :source
|
63
|
-
multiple_value_field :
|
63
|
+
multiple_value_field :status, :allows => Transaction::Status::All
|
64
64
|
multiple_value_field :store_ids
|
65
|
-
multiple_value_field :
|
65
|
+
multiple_value_field :type, :allows => Transaction::Type::All
|
66
|
+
multiple_value_field :user
|
66
67
|
|
67
68
|
key_value_fields :refund
|
68
69
|
|
data/lib/braintree/version.rb
CHANGED
@@ -45,6 +45,7 @@ module Braintree
|
|
45
45
|
|
46
46
|
RecipientUpdatedGrantedPaymentMethod = "recipient_updated_granted_payment_method"
|
47
47
|
|
48
|
+
SubscriptionBillingSkipped = "subscription_billing_skipped"
|
48
49
|
SubscriptionCanceled = "subscription_canceled"
|
49
50
|
SubscriptionChargedSuccessfully = "subscription_charged_successfully"
|
50
51
|
SubscriptionChargedUnsuccessfully = "subscription_charged_unsuccessfully"
|
@@ -72,6 +72,8 @@ module Braintree
|
|
72
72
|
_disbursement_exception_sample_xml(id)
|
73
73
|
when Braintree::WebhookNotification::Kind::Disbursement
|
74
74
|
_disbursement_sample_xml(id)
|
75
|
+
when Braintree::WebhookNotification::Kind::SubscriptionBillingSkipped
|
76
|
+
_subscription_billing_skipped(id)
|
75
77
|
when Braintree::WebhookNotification::Kind::SubscriptionChargedSuccessfully
|
76
78
|
_subscription_charged_successfully(id)
|
77
79
|
when Braintree::WebhookNotification::Kind::SubscriptionChargedUnsuccessfully
|
@@ -112,6 +114,21 @@ module Braintree
|
|
112
114
|
XML
|
113
115
|
end
|
114
116
|
|
117
|
+
def _subscription_billing_skipped(id)
|
118
|
+
|
119
|
+
<<-XML
|
120
|
+
<subscription>
|
121
|
+
<id>#{id}</id>
|
122
|
+
<transactions type="array">
|
123
|
+
</transactions>
|
124
|
+
<add_ons type="array">
|
125
|
+
</add_ons>
|
126
|
+
<discounts type="array">
|
127
|
+
</discounts>
|
128
|
+
</subscription>
|
129
|
+
XML
|
130
|
+
end
|
131
|
+
|
115
132
|
def _subscription_charged_successfully(id)
|
116
133
|
|
117
134
|
<<-XML
|
@@ -20,15 +20,15 @@ describe Braintree::AddOn do
|
|
20
20
|
add_ons = Braintree::AddOn.all
|
21
21
|
add_on = add_ons.select { |add_on| add_on.id == id }.first
|
22
22
|
|
23
|
-
add_on.
|
24
|
-
add_on.amount.
|
25
|
-
add_on.created_at.
|
26
|
-
add_on.description.
|
27
|
-
add_on.kind.
|
28
|
-
add_on.name.
|
29
|
-
add_on.never_expires.
|
30
|
-
add_on.number_of_billing_cycles.
|
31
|
-
add_on.updated_at.
|
23
|
+
expect(add_on).not_to be_nil
|
24
|
+
expect(add_on.amount).to eq(BigDecimal(expected[:amount]))
|
25
|
+
expect(add_on.created_at).not_to be_nil
|
26
|
+
expect(add_on.description).to eq(expected[:description])
|
27
|
+
expect(add_on.kind).to eq(expected[:kind])
|
28
|
+
expect(add_on.name).to eq(expected[:name])
|
29
|
+
expect(add_on.never_expires).to eq(expected[:never_expires])
|
30
|
+
expect(add_on.number_of_billing_cycles).to eq(expected[:number_of_billing_cycles])
|
31
|
+
expect(add_on.updated_at).not_to be_nil
|
32
32
|
end
|
33
33
|
|
34
34
|
it "raises with a helpful error if public_key and private_key are not set" do
|
@@ -18,21 +18,21 @@ describe Braintree::Address do
|
|
18
18
|
:postal_code => "60622",
|
19
19
|
:country_name => "United States of America",
|
20
20
|
)
|
21
|
-
result.success
|
22
|
-
result.address.customer_id.
|
23
|
-
result.address.first_name.
|
24
|
-
result.address.last_name.
|
25
|
-
result.address.company.
|
26
|
-
result.address.street_address.
|
27
|
-
result.address.extended_address.
|
28
|
-
result.address.locality.
|
29
|
-
result.address.region.
|
30
|
-
result.address.phone_number.
|
31
|
-
result.address.postal_code.
|
32
|
-
result.address.country_name.
|
33
|
-
result.address.country_code_alpha2.
|
34
|
-
result.address.country_code_alpha3.
|
35
|
-
result.address.country_code_numeric.
|
21
|
+
expect(result.success?).to eq(true)
|
22
|
+
expect(result.address.customer_id).to eq(customer.id)
|
23
|
+
expect(result.address.first_name).to eq("Ben")
|
24
|
+
expect(result.address.last_name).to eq("Moore")
|
25
|
+
expect(result.address.company).to eq("Moore Co.")
|
26
|
+
expect(result.address.street_address).to eq("1811 E Main St")
|
27
|
+
expect(result.address.extended_address).to eq("Suite 200")
|
28
|
+
expect(result.address.locality).to eq("Chicago")
|
29
|
+
expect(result.address.region).to eq("Illinois")
|
30
|
+
expect(result.address.phone_number).to eq("5551231234")
|
31
|
+
expect(result.address.postal_code).to eq("60622")
|
32
|
+
expect(result.address.country_name).to eq("United States of America")
|
33
|
+
expect(result.address.country_code_alpha2).to eq("US")
|
34
|
+
expect(result.address.country_code_alpha3).to eq("USA")
|
35
|
+
expect(result.address.country_code_numeric).to eq("840")
|
36
36
|
end
|
37
37
|
|
38
38
|
it "accepts country_codes" do
|
@@ -43,11 +43,11 @@ describe Braintree::Address do
|
|
43
43
|
:country_code_alpha3 => "ASM",
|
44
44
|
:country_code_numeric => "16",
|
45
45
|
)
|
46
|
-
result.success
|
47
|
-
result.address.country_name.
|
48
|
-
result.address.country_code_alpha2.
|
49
|
-
result.address.country_code_alpha3.
|
50
|
-
result.address.country_code_numeric.
|
46
|
+
expect(result.success?).to eq(true)
|
47
|
+
expect(result.address.country_name).to eq("American Samoa")
|
48
|
+
expect(result.address.country_code_alpha2).to eq("AS")
|
49
|
+
expect(result.address.country_code_alpha3).to eq("ASM")
|
50
|
+
expect(result.address.country_code_numeric).to eq("016")
|
51
51
|
end
|
52
52
|
|
53
53
|
it "accepts utf-8 country names" do
|
@@ -56,8 +56,8 @@ describe Braintree::Address do
|
|
56
56
|
:customer_id => customer.id,
|
57
57
|
:country_name => "Åland",
|
58
58
|
)
|
59
|
-
result.success
|
60
|
-
result.address.country_name.
|
59
|
+
expect(result.success?).to eq(true)
|
60
|
+
expect(result.address.country_name).to eq("Åland")
|
61
61
|
end
|
62
62
|
|
63
63
|
it "returns an error response given inconsistent country codes" do
|
@@ -67,8 +67,8 @@ describe Braintree::Address do
|
|
67
67
|
:country_code_alpha2 => "AS",
|
68
68
|
:country_code_alpha3 => "USA",
|
69
69
|
)
|
70
|
-
result.success
|
71
|
-
result.errors.for(:address).on(:base).map { |e| e.code }.
|
70
|
+
expect(result.success?).to eq(false)
|
71
|
+
expect(result.errors.for(:address).on(:base).map { |e| e.code }).to include(Braintree::ErrorCodes::Address::InconsistentCountry)
|
72
72
|
end
|
73
73
|
|
74
74
|
it "returns an error response given an invalid country_code_alpha2" do
|
@@ -77,8 +77,8 @@ describe Braintree::Address do
|
|
77
77
|
:customer_id => customer.id,
|
78
78
|
:country_code_alpha2 => "zz",
|
79
79
|
)
|
80
|
-
result.success
|
81
|
-
result.errors.for(:address).on(:country_code_alpha2).map { |e| e.code }.
|
80
|
+
expect(result.success?).to eq(false)
|
81
|
+
expect(result.errors.for(:address).on(:country_code_alpha2).map { |e| e.code }).to include(Braintree::ErrorCodes::Address::CountryCodeAlpha2IsNotAccepted)
|
82
82
|
end
|
83
83
|
|
84
84
|
it "returns an error response given an invalid country_code_alpha3" do
|
@@ -87,8 +87,8 @@ describe Braintree::Address do
|
|
87
87
|
:customer_id => customer.id,
|
88
88
|
:country_code_alpha3 => "zzz",
|
89
89
|
)
|
90
|
-
result.success
|
91
|
-
result.errors.for(:address).on(:country_code_alpha3).map { |e| e.code }.
|
90
|
+
expect(result.success?).to eq(false)
|
91
|
+
expect(result.errors.for(:address).on(:country_code_alpha3).map { |e| e.code }).to include(Braintree::ErrorCodes::Address::CountryCodeAlpha3IsNotAccepted)
|
92
92
|
end
|
93
93
|
|
94
94
|
it "returns an error response given an invalid country_code_numeric" do
|
@@ -97,8 +97,8 @@ describe Braintree::Address do
|
|
97
97
|
:customer_id => customer.id,
|
98
98
|
:country_code_numeric => "zz",
|
99
99
|
)
|
100
|
-
result.success
|
101
|
-
result.errors.for(:address).on(:country_code_numeric).map { |e| e.code }.
|
100
|
+
expect(result.success?).to eq(false)
|
101
|
+
expect(result.errors.for(:address).on(:country_code_numeric).map { |e| e.code }).to include(Braintree::ErrorCodes::Address::CountryCodeNumericIsNotAccepted)
|
102
102
|
end
|
103
103
|
|
104
104
|
it "returns an error response if invalid" do
|
@@ -107,8 +107,8 @@ describe Braintree::Address do
|
|
107
107
|
:customer_id => customer.id,
|
108
108
|
:country_name => "United States of Invalid",
|
109
109
|
)
|
110
|
-
result.success
|
111
|
-
result.errors.for(:address).on(:country_name)[0].message.
|
110
|
+
expect(result.success?).to eq(false)
|
111
|
+
expect(result.errors.for(:address).on(:country_name)[0].message).to eq("Country name is not an accepted country.")
|
112
112
|
end
|
113
113
|
|
114
114
|
it "allows -, _, A-Z, a-z, and 0-9 in customer_id without raising an ArgumentError" do
|
@@ -137,14 +137,14 @@ describe Braintree::Address do
|
|
137
137
|
:postal_code => "60623",
|
138
138
|
:country_name => "United States of America",
|
139
139
|
)
|
140
|
-
address.customer_id.
|
141
|
-
address.street_address.
|
142
|
-
address.extended_address.
|
143
|
-
address.locality.
|
144
|
-
address.region.
|
145
|
-
address.phone_number.
|
146
|
-
address.postal_code.
|
147
|
-
address.country_name.
|
140
|
+
expect(address.customer_id).to eq(customer.id)
|
141
|
+
expect(address.street_address).to eq("1812 E Main St")
|
142
|
+
expect(address.extended_address).to eq("Suite 201")
|
143
|
+
expect(address.locality).to eq("Bartlett")
|
144
|
+
expect(address.region).to eq("IL")
|
145
|
+
expect(address.phone_number).to eq("5551231234")
|
146
|
+
expect(address.postal_code).to eq("60623")
|
147
|
+
expect(address.country_name).to eq("United States of America")
|
148
148
|
end
|
149
149
|
|
150
150
|
it "raises a ValidationsFailed if invalid" do
|
@@ -162,7 +162,7 @@ describe Braintree::Address do
|
|
162
162
|
it "deletes the address given a customer id and an address id" do
|
163
163
|
customer = Braintree::Customer.create!(:last_name => "Wilson")
|
164
164
|
address = Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
|
165
|
-
Braintree::Address.delete(customer.id, address.id).success
|
165
|
+
expect(Braintree::Address.delete(customer.id, address.id).success?).to eq(true)
|
166
166
|
expect do
|
167
167
|
Braintree::Address.find(customer.id, address.id)
|
168
168
|
end.to raise_error(Braintree::NotFoundError)
|
@@ -171,7 +171,7 @@ describe Braintree::Address do
|
|
171
171
|
it "deletes the address given a customer and an address id" do
|
172
172
|
customer = Braintree::Customer.create!(:last_name => "Wilson")
|
173
173
|
address = Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
|
174
|
-
Braintree::Address.delete(customer, address.id).success
|
174
|
+
expect(Braintree::Address.delete(customer, address.id).success?).to eq(true)
|
175
175
|
expect do
|
176
176
|
Braintree::Address.find(customer.id, address.id)
|
177
177
|
end.to raise_error(Braintree::NotFoundError)
|
@@ -182,13 +182,13 @@ describe Braintree::Address do
|
|
182
182
|
it "finds the address given a customer and an address id" do
|
183
183
|
customer = Braintree::Customer.create!(:last_name => "Wilson")
|
184
184
|
address = Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
|
185
|
-
Braintree::Address.find(customer, address.id).
|
185
|
+
expect(Braintree::Address.find(customer, address.id)).to eq(address)
|
186
186
|
end
|
187
187
|
|
188
188
|
it "finds the address given a customer id and an address id" do
|
189
189
|
customer = Braintree::Customer.create!(:last_name => "Wilson")
|
190
190
|
address = Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
|
191
|
-
Braintree::Address.find(customer.id, address.id).
|
191
|
+
expect(Braintree::Address.find(customer.id, address.id)).to eq(address)
|
192
192
|
end
|
193
193
|
|
194
194
|
it "raises a NotFoundError if it cannot be found because of customer id" do
|
@@ -242,16 +242,16 @@ describe Braintree::Address do
|
|
242
242
|
:postal_code => "60621",
|
243
243
|
:country_name => "United States of America",
|
244
244
|
)
|
245
|
-
result.success
|
246
|
-
result.address.street_address.
|
247
|
-
result.address.extended_address.
|
248
|
-
result.address.locality.
|
249
|
-
result.address.region.
|
250
|
-
result.address.postal_code.
|
251
|
-
result.address.country_name.
|
252
|
-
result.address.country_code_alpha2.
|
253
|
-
result.address.country_code_alpha3.
|
254
|
-
result.address.country_code_numeric.
|
245
|
+
expect(result.success?).to eq(true)
|
246
|
+
expect(result.address.street_address).to eq("123 E New St")
|
247
|
+
expect(result.address.extended_address).to eq("New Suite 3")
|
248
|
+
expect(result.address.locality).to eq("Chicago")
|
249
|
+
expect(result.address.region).to eq("Illinois")
|
250
|
+
expect(result.address.postal_code).to eq("60621")
|
251
|
+
expect(result.address.country_name).to eq("United States of America")
|
252
|
+
expect(result.address.country_code_alpha2).to eq("US")
|
253
|
+
expect(result.address.country_code_alpha3).to eq("USA")
|
254
|
+
expect(result.address.country_code_numeric).to eq("840")
|
255
255
|
end
|
256
256
|
|
257
257
|
it "accepts country_codes" do
|
@@ -266,11 +266,11 @@ describe Braintree::Address do
|
|
266
266
|
:country_name => "Azerbaijan",
|
267
267
|
)
|
268
268
|
|
269
|
-
result.success
|
270
|
-
result.address.country_name.
|
271
|
-
result.address.country_code_alpha2.
|
272
|
-
result.address.country_code_alpha3.
|
273
|
-
result.address.country_code_numeric.
|
269
|
+
expect(result.success?).to eq(true)
|
270
|
+
expect(result.address.country_name).to eq("Azerbaijan")
|
271
|
+
expect(result.address.country_code_alpha2).to eq("AZ")
|
272
|
+
expect(result.address.country_code_alpha3).to eq("AZE")
|
273
|
+
expect(result.address.country_code_numeric).to eq("031")
|
274
274
|
end
|
275
275
|
|
276
276
|
it "returns an error response if invalid" do
|
@@ -285,8 +285,8 @@ describe Braintree::Address do
|
|
285
285
|
:street_address => "123 E New St",
|
286
286
|
:country_name => "United States of Invalid",
|
287
287
|
)
|
288
|
-
result.success
|
289
|
-
result.errors.for(:address).on(:country_name)[0].message.
|
288
|
+
expect(result.success?).to eq(false)
|
289
|
+
expect(result.errors.for(:address).on(:country_name)[0].message).to eq("Country name is not an accepted country.")
|
290
290
|
end
|
291
291
|
end
|
292
292
|
|
@@ -320,13 +320,13 @@ describe Braintree::Address do
|
|
320
320
|
:postal_code => "60621",
|
321
321
|
:country_name => "United States of America",
|
322
322
|
)
|
323
|
-
updated_address.
|
324
|
-
updated_address.street_address.
|
325
|
-
updated_address.extended_address.
|
326
|
-
updated_address.locality.
|
327
|
-
updated_address.region.
|
328
|
-
updated_address.postal_code.
|
329
|
-
updated_address.country_name.
|
323
|
+
expect(updated_address).to eq(address)
|
324
|
+
expect(updated_address.street_address).to eq("123 E New St")
|
325
|
+
expect(updated_address.extended_address).to eq("New Suite 3")
|
326
|
+
expect(updated_address.locality).to eq("Chicago")
|
327
|
+
expect(updated_address.region).to eq("Illinois")
|
328
|
+
expect(updated_address.postal_code).to eq("60621")
|
329
|
+
expect(updated_address.country_name).to eq("United States of America")
|
330
330
|
end
|
331
331
|
|
332
332
|
it "raises a ValidationsFailed invalid" do
|
@@ -352,7 +352,7 @@ describe Braintree::Address do
|
|
352
352
|
customer = Braintree::Customer.create!(:last_name => "Wilson")
|
353
353
|
address = Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
|
354
354
|
result = Braintree::Address.delete(customer.id, address.id)
|
355
|
-
result.success
|
355
|
+
expect(result.success?).to eq(true)
|
356
356
|
expect do
|
357
357
|
Braintree::Address.find(customer.id, address.id)
|
358
358
|
end.to raise_error(Braintree::NotFoundError)
|