braintree 4.12.0 → 4.13.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/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(
|