braintree 4.12.0 → 4.13.0
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.
- checksums.yaml +4 -4
- data/lib/braintree/apple_pay_card.rb +2 -0
- data/lib/braintree/test/nonce.rb +1 -0
- data/lib/braintree/transaction/apple_pay_details.rb +12 -10
- data/lib/braintree/transaction.rb +2 -0
- data/lib/braintree/transaction_gateway.rb +17 -1
- data/lib/braintree/version.rb +1 -1
- data/spec/integration/braintree/payment_method_spec.rb +61 -0
- data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +0 -163
- data/spec/integration/braintree/transaction_spec.rb +385 -172
- data/spec/integration/braintree/transaction_us_bank_account_spec.rb +0 -242
- data/spec/unit/braintree/apple_pay_card_spec.rb +9 -0
- data/spec/unit/braintree/transaction_gateway_spec.rb +2 -1
- data/spec/unit/braintree/transaction_spec.rb +11 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44371fa440317aa474b358a279682d0e79ad05565d4b1f583dabb77c237a5d34
|
4
|
+
data.tar.gz: 8487685b45da286097e7f366ca1b26820f89da15008a1f6555409e1c2605f61a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0584f71fb953b0b73071bb368481873e3948fb55a3de2cc91b8d2c443aaf2544b739534d4283e6d50ad85d532eb3cfe2126338eebb92359c74f19185f55ceaf9'
|
7
|
+
data.tar.gz: 2d98c343dd94fdb128fdc09bd1e1688e12b82f0055b9666869c9f88c5fe74d9accf736f8ec3876e8d6ef6965874a3a8618a8bbe63df0e5146e30d2c7d723956e
|
@@ -28,10 +28,12 @@ module Braintree
|
|
28
28
|
attr_reader :image_url
|
29
29
|
attr_reader :issuing_bank
|
30
30
|
attr_reader :last_4
|
31
|
+
attr_reader :merchant_token_identifier
|
31
32
|
attr_reader :payment_instrument_name
|
32
33
|
attr_reader :payroll
|
33
34
|
attr_reader :prepaid
|
34
35
|
attr_reader :product_id
|
36
|
+
attr_reader :source_card_last4
|
35
37
|
attr_reader :source_description
|
36
38
|
attr_reader :subscriptions
|
37
39
|
attr_reader :token
|
data/lib/braintree/test/nonce.rb
CHANGED
@@ -11,6 +11,7 @@ module Braintree
|
|
11
11
|
ApplePayVisa = "fake-apple-pay-visa-nonce"
|
12
12
|
ApplePayMasterCard = "fake-apple-pay-mastercard-nonce"
|
13
13
|
ApplePayAmEx = "fake-apple-pay-amex-nonce"
|
14
|
+
ApplePayMpan = "fake-apple-pay-mpan-nonce"
|
14
15
|
AbstractTransactable = "fake-abstract-transactable-nonce"
|
15
16
|
Europe = "fake-europe-bank-account-nonce"
|
16
17
|
GooglePayDiscover = "fake-android-pay-discover-nonce"
|
@@ -6,23 +6,25 @@ module Braintree
|
|
6
6
|
attr_reader :bin
|
7
7
|
attr_reader :card_type
|
8
8
|
attr_reader :cardholder_name
|
9
|
+
attr_reader :commercial
|
10
|
+
attr_reader :country_of_issuance
|
11
|
+
attr_reader :debit
|
12
|
+
attr_reader :durbin_regulated
|
9
13
|
attr_reader :expiration_month
|
10
14
|
attr_reader :expiration_year
|
15
|
+
attr_reader :global_id
|
16
|
+
attr_reader :healthcare
|
11
17
|
attr_reader :image_url
|
18
|
+
attr_reader :issuing_bank
|
12
19
|
attr_reader :last_4
|
20
|
+
attr_reader :merchant_token_identifier
|
13
21
|
attr_reader :payment_instrument_name
|
14
|
-
attr_reader :source_description
|
15
|
-
attr_reader :token
|
16
|
-
attr_reader :prepaid
|
17
|
-
attr_reader :healthcare
|
18
|
-
attr_reader :debit
|
19
|
-
attr_reader :durbin_regulated
|
20
|
-
attr_reader :commercial
|
21
22
|
attr_reader :payroll
|
22
|
-
attr_reader :
|
23
|
-
attr_reader :country_of_issuance
|
23
|
+
attr_reader :prepaid
|
24
24
|
attr_reader :product_id
|
25
|
-
attr_reader :
|
25
|
+
attr_reader :source_card_last4
|
26
|
+
attr_reader :source_description
|
27
|
+
attr_reader :token
|
26
28
|
|
27
29
|
def initialize(attributes)
|
28
30
|
set_instance_variables_from_hash attributes unless attributes.nil?
|
@@ -152,7 +152,9 @@ module Braintree
|
|
152
152
|
attr_reader :refunded_transaction_id
|
153
153
|
attr_reader :refunded_installments
|
154
154
|
attr_reader :retried
|
155
|
+
attr_reader :retried_transaction_id # the primary/parent transaction id of any retried transaction
|
155
156
|
attr_reader :retrieval_reference_number
|
157
|
+
attr_reader :retry_ids # all retried transactions ids for a primary transaction
|
156
158
|
attr_reader :risk_data
|
157
159
|
attr_reader :samsung_pay_card_details
|
158
160
|
attr_reader :sca_exemption_requested
|
@@ -229,6 +229,7 @@ module Braintree
|
|
229
229
|
:skip_avs,
|
230
230
|
:skip_cvv,
|
231
231
|
{:paypal => [:custom_field, :payee_id, :payee_email, :description, {:supplementary_data => :_any_key_}]},
|
232
|
+
{:processing_overrides => [:customer_email, :customer_first_name, :customer_last_name, :customer_tax_identifier]},
|
232
233
|
{:three_d_secure => [:required]},
|
233
234
|
{:amex_rewards => [:request_id, :points, :currency_amount, :currency_iso_code]},
|
234
235
|
{:venmo => [:profile_id]},
|
@@ -247,7 +248,7 @@ module Braintree
|
|
247
248
|
{:data => [
|
248
249
|
:folio_number, :check_in_date, :check_out_date, :travel_package, :lodging_check_in_date, :lodging_check_out_date, :departure_date, :lodging_name, :room_rate, :room_tax,
|
249
250
|
:passenger_first_name, :passenger_last_name, :passenger_middle_initial, :passenger_title, :issued_date, :travel_agency_name, :travel_agency_code, :ticket_number,
|
250
|
-
:issuing_carrier_code, :customer_code, :fare_amount, :fee_amount, :tax_amount, :restricted_ticket, :no_show, :advanced_deposit, :fire_safe, :property_phone,
|
251
|
+
:issuing_carrier_code, :customer_code, :fare_amount, :fee_amount, :tax_amount, :restricted_ticket, :no_show, :advanced_deposit, :fire_safe, :property_phone, :ticket_issuer_address, :arrival_date,
|
251
252
|
{:legs => [
|
252
253
|
:conjunction_ticket, :exchange_ticket, :coupon_number, :service_class, :carrier_code, :fare_basis_code, :flight_number, :departure_date, :departure_airport_code, :departure_time,
|
253
254
|
:arrival_airport_code, :arrival_time, :stopover_permitted, :fare_amount, :fee_amount, :tax_amount, :endorsement_or_restrictions,
|
@@ -267,6 +268,21 @@ module Braintree
|
|
267
268
|
[
|
268
269
|
:order_id,
|
269
270
|
{:descriptor => [:name, :phone, :url]},
|
271
|
+
{:industry => [
|
272
|
+
:industry_type,
|
273
|
+
{:data => [
|
274
|
+
:folio_number, :check_in_date, :check_out_date, :travel_package, :lodging_check_in_date, :lodging_check_out_date, :departure_date, :lodging_name, :room_rate, :room_tax,
|
275
|
+
:passenger_first_name, :passenger_last_name, :passenger_middle_initial, :passenger_title, :issued_date, :travel_agency_name, :travel_agency_code, :ticket_number,
|
276
|
+
:issuing_carrier_code, :customer_code, :fare_amount, :fee_amount, :tax_amount, :restricted_ticket, :no_show, :advanced_deposit, :fire_safe, :property_phone, :ticket_issuer_address, :arrival_date,
|
277
|
+
{:legs => [
|
278
|
+
:conjunction_ticket, :exchange_ticket, :coupon_number, :service_class, :carrier_code, :fare_basis_code, :flight_number, :departure_date, :departure_airport_code, :departure_time,
|
279
|
+
:arrival_airport_code, :arrival_time, :stopover_permitted, :fare_amount, :fee_amount, :tax_amount, :endorsement_or_restrictions,
|
280
|
+
]},
|
281
|
+
{:additional_charges => [
|
282
|
+
:kind, :amount,
|
283
|
+
]},
|
284
|
+
]},
|
285
|
+
]},
|
270
286
|
:purchase_order_number,
|
271
287
|
:tax_amount,
|
272
288
|
:tax_exempt,
|
data/lib/braintree/version.rb
CHANGED
@@ -110,6 +110,42 @@ describe Braintree::PaymentMethod do
|
|
110
110
|
apple_pay_card.product_id.should_not be_nil
|
111
111
|
end
|
112
112
|
|
113
|
+
it "creates a payment method from a fake apple pay mpan nonce" do
|
114
|
+
customer = Braintree::Customer.create.customer
|
115
|
+
token = SecureRandom.hex(16)
|
116
|
+
result = Braintree::PaymentMethod.create(
|
117
|
+
:payment_method_nonce => Braintree::Test::Nonce::ApplePayMpan,
|
118
|
+
:customer_id => customer.id,
|
119
|
+
:token => token,
|
120
|
+
)
|
121
|
+
|
122
|
+
result.should be_success
|
123
|
+
apple_pay_card = result.payment_method
|
124
|
+
apple_pay_card.should be_a(Braintree::ApplePayCard)
|
125
|
+
apple_pay_card.should_not be_nil
|
126
|
+
apple_pay_card.bin.should_not be_nil
|
127
|
+
apple_pay_card.token.should == token
|
128
|
+
apple_pay_card.card_type.should == Braintree::ApplePayCard::CardType::Visa
|
129
|
+
apple_pay_card.payment_instrument_name.should == "Visa 8886"
|
130
|
+
apple_pay_card.source_description.should == "Visa 8886"
|
131
|
+
apple_pay_card.default.should == true
|
132
|
+
apple_pay_card.image_url.should =~ /apple_pay/
|
133
|
+
apple_pay_card.expiration_month.to_i.should > 0
|
134
|
+
apple_pay_card.expiration_year.to_i.should > 0
|
135
|
+
apple_pay_card.customer_id.should == customer.id
|
136
|
+
apple_pay_card.commercial.should_not be_nil
|
137
|
+
apple_pay_card.country_of_issuance.should_not be_nil
|
138
|
+
apple_pay_card.debit.should_not be_nil
|
139
|
+
apple_pay_card.durbin_regulated.should_not be_nil
|
140
|
+
apple_pay_card.healthcare.should_not be_nil
|
141
|
+
apple_pay_card.issuing_bank.should_not be_nil
|
142
|
+
apple_pay_card.payroll.should_not be_nil
|
143
|
+
apple_pay_card.prepaid.should_not be_nil
|
144
|
+
apple_pay_card.product_id.should_not be_nil
|
145
|
+
apple_pay_card.merchant_token_identifier.should_not be_nil
|
146
|
+
apple_pay_card.source_card_last4.should_not be_nil
|
147
|
+
end
|
148
|
+
|
113
149
|
it "creates a payment method from a fake google pay proxy card nonce" do
|
114
150
|
customer = Braintree::Customer.create.customer
|
115
151
|
token = SecureRandom.hex(16)
|
@@ -1143,6 +1179,31 @@ describe Braintree::PaymentMethod do
|
|
1143
1179
|
apple_pay_card.source_description.should == "AmEx 41002"
|
1144
1180
|
apple_pay_card.customer_id.should == customer.id
|
1145
1181
|
end
|
1182
|
+
|
1183
|
+
it "finds the payment method with the given mpan token" do
|
1184
|
+
customer = Braintree::Customer.create!
|
1185
|
+
payment_method_token = make_token
|
1186
|
+
result = Braintree::PaymentMethod.create(
|
1187
|
+
:payment_method_nonce => Braintree::Test::Nonce::ApplePayMpan,
|
1188
|
+
:customer_id => customer.id,
|
1189
|
+
:token => payment_method_token,
|
1190
|
+
)
|
1191
|
+
result.should be_success
|
1192
|
+
|
1193
|
+
apple_pay_card = Braintree::PaymentMethod.find(payment_method_token)
|
1194
|
+
apple_pay_card.should be_a(Braintree::ApplePayCard)
|
1195
|
+
apple_pay_card.should_not be_nil
|
1196
|
+
apple_pay_card.token.should == payment_method_token
|
1197
|
+
apple_pay_card.card_type.should == Braintree::ApplePayCard::CardType::Visa
|
1198
|
+
apple_pay_card.default.should == true
|
1199
|
+
apple_pay_card.image_url.should =~ /apple_pay/
|
1200
|
+
apple_pay_card.expiration_month.to_i.should > 0
|
1201
|
+
apple_pay_card.expiration_year.to_i.should > 0
|
1202
|
+
apple_pay_card.source_description.should == "Visa 8886"
|
1203
|
+
apple_pay_card.customer_id.should == customer.id
|
1204
|
+
apple_pay_card.merchant_token_identifier == "DNITHE302308980427388297"
|
1205
|
+
apple_pay_card.source_card_last4 == "2006"
|
1206
|
+
end
|
1146
1207
|
end
|
1147
1208
|
|
1148
1209
|
context "venmo accounts" do
|
@@ -10,89 +10,6 @@ describe Braintree::PaymentMethod do
|
|
10
10
|
Braintree::Configuration.private_key = "integration2_private_key"
|
11
11
|
end
|
12
12
|
|
13
|
-
context "plaid verified nonce" do
|
14
|
-
let(:nonce) { generate_valid_plaid_us_bank_account_nonce }
|
15
|
-
|
16
|
-
# we are temporarily skipping this test until we have a more stable CI env
|
17
|
-
xit "succeeds" do
|
18
|
-
customer = Braintree::Customer.create.customer
|
19
|
-
result = Braintree::PaymentMethod.create(
|
20
|
-
:payment_method_nonce => nonce,
|
21
|
-
:customer_id => customer.id,
|
22
|
-
:options => {
|
23
|
-
:verification_merchant_account_id => SpecHelper::AnotherUsBankMerchantAccountId,
|
24
|
-
},
|
25
|
-
)
|
26
|
-
|
27
|
-
result.should be_success
|
28
|
-
us_bank_account = result.payment_method
|
29
|
-
us_bank_account.should be_a(Braintree::UsBankAccount)
|
30
|
-
us_bank_account.routing_number.should == "011000015"
|
31
|
-
us_bank_account.last_4.should == "0000"
|
32
|
-
us_bank_account.account_type.should == "checking"
|
33
|
-
us_bank_account.account_holder_name.should == "PayPal, Inc."
|
34
|
-
us_bank_account.bank_name.should == "FEDERAL RESERVE BANK"
|
35
|
-
us_bank_account.default.should == true
|
36
|
-
us_bank_account.ach_mandate.text.should == "cl mandate text"
|
37
|
-
us_bank_account.ach_mandate.accepted_at.should be_a Time
|
38
|
-
|
39
|
-
us_bank_account.verifications.count.should == 1
|
40
|
-
us_bank_account.verifications.first.status.should == Braintree::UsBankAccountVerification::Status::Verified
|
41
|
-
us_bank_account.verifications.first.verification_method.should == Braintree::UsBankAccountVerification::VerificationMethod::TokenizedCheck
|
42
|
-
us_bank_account.verifications.first.id.should_not be_empty
|
43
|
-
us_bank_account.verifications.first.verification_determined_at.should be_a Time
|
44
|
-
us_bank_account.verified.should == true
|
45
|
-
|
46
|
-
Braintree::PaymentMethod.find(us_bank_account.token).should be_a(Braintree::UsBankAccount)
|
47
|
-
end
|
48
|
-
|
49
|
-
[
|
50
|
-
Braintree::UsBankAccountVerification::VerificationMethod::IndependentCheck,
|
51
|
-
Braintree::UsBankAccountVerification::VerificationMethod::NetworkCheck,
|
52
|
-
].each do |method|
|
53
|
-
# we are temporarily skipping this test until we have a more stable CI env
|
54
|
-
xit "succeeds and verifies via #{method}" do
|
55
|
-
customer = Braintree::Customer.create.customer
|
56
|
-
result = Braintree::PaymentMethod.create(
|
57
|
-
:payment_method_nonce => nonce,
|
58
|
-
:customer_id => customer.id,
|
59
|
-
:options => {
|
60
|
-
:us_bank_account_verification_method => method,
|
61
|
-
:verification_merchant_account_id => SpecHelper::AnotherUsBankMerchantAccountId,
|
62
|
-
},
|
63
|
-
)
|
64
|
-
|
65
|
-
result.should be_success
|
66
|
-
us_bank_account = result.payment_method
|
67
|
-
us_bank_account.should be_a(Braintree::UsBankAccount)
|
68
|
-
us_bank_account.routing_number.should == "011000015"
|
69
|
-
us_bank_account.last_4.should == "0000"
|
70
|
-
us_bank_account.account_type.should == "checking"
|
71
|
-
us_bank_account.account_holder_name.should == "PayPal, Inc."
|
72
|
-
us_bank_account.bank_name.should == "FEDERAL RESERVE BANK"
|
73
|
-
us_bank_account.default.should == true
|
74
|
-
us_bank_account.ach_mandate.text.should == "cl mandate text"
|
75
|
-
us_bank_account.ach_mandate.accepted_at.should be_a Time
|
76
|
-
us_bank_account.verified.should == true
|
77
|
-
|
78
|
-
us_bank_account.verifications.count.should == 2
|
79
|
-
|
80
|
-
us_bank_account.verifications.map(&:verification_method).should contain_exactly(
|
81
|
-
Braintree::UsBankAccountVerification::VerificationMethod::TokenizedCheck,
|
82
|
-
method,
|
83
|
-
)
|
84
|
-
|
85
|
-
us_bank_account.verifications.each do |verification|
|
86
|
-
verification.status.should == Braintree::UsBankAccountVerification::Status::Verified
|
87
|
-
verification.id.should_not be_empty
|
88
|
-
verification.verification_determined_at.should be_a Time
|
89
|
-
end
|
90
|
-
|
91
|
-
Braintree::PaymentMethod.find(us_bank_account.token).should be_a(Braintree::UsBankAccount)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
13
|
context "non plaid verified nonce" do
|
97
14
|
let(:nonce) { generate_non_plaid_us_bank_account_nonce }
|
98
15
|
|
@@ -176,86 +93,6 @@ describe Braintree::PaymentMethod do
|
|
176
93
|
end
|
177
94
|
|
178
95
|
context "exempt merchant" do
|
179
|
-
context "plaid verified nonce" do
|
180
|
-
before do
|
181
|
-
Braintree::Configuration.merchant_id = "integration_merchant_id"
|
182
|
-
Braintree::Configuration.public_key = "integration_public_key"
|
183
|
-
Braintree::Configuration.private_key = "integration_private_key"
|
184
|
-
end
|
185
|
-
|
186
|
-
let(:nonce) { generate_valid_plaid_us_bank_account_nonce }
|
187
|
-
|
188
|
-
# we are temporarily skipping this test until we have a more stable CI env
|
189
|
-
xit "succeeds and verifies via independent check" do
|
190
|
-
customer = Braintree::Customer.create.customer
|
191
|
-
result = Braintree::PaymentMethod.create(
|
192
|
-
:payment_method_nonce => nonce,
|
193
|
-
:customer_id => customer.id,
|
194
|
-
:options => {
|
195
|
-
:verification_merchant_account_id => SpecHelper::UsBankMerchantAccountId,
|
196
|
-
},
|
197
|
-
)
|
198
|
-
|
199
|
-
result.should be_success
|
200
|
-
us_bank_account = result.payment_method
|
201
|
-
us_bank_account.should be_a(Braintree::UsBankAccount)
|
202
|
-
us_bank_account.routing_number.should == "011000015"
|
203
|
-
us_bank_account.last_4.should == "0000"
|
204
|
-
us_bank_account.account_type.should == "checking"
|
205
|
-
us_bank_account.account_holder_name.should == "PayPal, Inc."
|
206
|
-
us_bank_account.bank_name.should == "FEDERAL RESERVE BANK"
|
207
|
-
us_bank_account.default.should == true
|
208
|
-
us_bank_account.ach_mandate.text.should == "cl mandate text"
|
209
|
-
us_bank_account.ach_mandate.accepted_at.should be_a Time
|
210
|
-
|
211
|
-
us_bank_account.verifications.count.should == 1
|
212
|
-
us_bank_account.verifications.first.status.should == Braintree::UsBankAccountVerification::Status::Verified
|
213
|
-
us_bank_account.verifications.first.verification_method.should == Braintree::UsBankAccountVerification::VerificationMethod::TokenizedCheck
|
214
|
-
us_bank_account.verifications.first.id.should_not be_empty
|
215
|
-
us_bank_account.verifications.first.verification_determined_at.should be_a Time
|
216
|
-
us_bank_account.verified.should == true
|
217
|
-
|
218
|
-
Braintree::PaymentMethod.find(us_bank_account.token).should be_a(Braintree::UsBankAccount)
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
context "non plaid verified nonce" do
|
223
|
-
let(:nonce) { generate_non_plaid_us_bank_account_nonce }
|
224
|
-
|
225
|
-
# we are temporarily skipping this test until we have a more stable CI env
|
226
|
-
xit "succeeds and verifies via independent check" do
|
227
|
-
customer = Braintree::Customer.create.customer
|
228
|
-
result = Braintree::PaymentMethod.create(
|
229
|
-
:payment_method_nonce => nonce,
|
230
|
-
:customer_id => customer.id,
|
231
|
-
:options => {
|
232
|
-
:verification_merchant_account_id => SpecHelper::UsBankMerchantAccountId,
|
233
|
-
},
|
234
|
-
)
|
235
|
-
|
236
|
-
result.should be_success
|
237
|
-
us_bank_account = result.payment_method
|
238
|
-
us_bank_account.should be_a(Braintree::UsBankAccount)
|
239
|
-
us_bank_account.routing_number.should == "021000021"
|
240
|
-
us_bank_account.last_4.should == "0000"
|
241
|
-
us_bank_account.account_type.should == "checking"
|
242
|
-
us_bank_account.account_holder_name.should == "John Doe"
|
243
|
-
us_bank_account.bank_name.should =~ /CHASE/
|
244
|
-
us_bank_account.default.should == true
|
245
|
-
us_bank_account.ach_mandate.text.should == "cl mandate text"
|
246
|
-
us_bank_account.ach_mandate.accepted_at.should be_a Time
|
247
|
-
|
248
|
-
us_bank_account.verifications.count.should == 1
|
249
|
-
us_bank_account.verifications.first.status.should == Braintree::UsBankAccountVerification::Status::Verified
|
250
|
-
us_bank_account.verifications.first.verification_method.should == Braintree::UsBankAccountVerification::VerificationMethod::IndependentCheck
|
251
|
-
us_bank_account.verifications.first.id.should_not be_empty
|
252
|
-
us_bank_account.verifications.first.verification_determined_at.should be_a Time
|
253
|
-
us_bank_account.verified.should == true
|
254
|
-
|
255
|
-
Braintree::PaymentMethod.find(us_bank_account.token).should be_a(Braintree::UsBankAccount)
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
96
|
it "fails with invalid nonce" do
|
260
97
|
customer = Braintree::Customer.create.customer
|
261
98
|
result = Braintree::PaymentMethod.create(
|