braintree 4.10.0 → 4.11.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_verification_gateway.rb +18 -5
- data/lib/braintree/error_codes.rb +1 -0
- data/lib/braintree/sepa_direct_debit_account.rb +2 -0
- data/lib/braintree/transaction/credit_card_details.rb +4 -0
- data/lib/braintree/transaction.rb +2 -0
- data/lib/braintree/transaction_gateway.rb +1 -1
- data/lib/braintree/version.rb +1 -1
- data/spec/integration/braintree/credit_card_spec.rb +0 -60
- data/spec/integration/braintree/credit_card_verification_spec.rb +124 -1
- data/spec/integration/braintree/customer_spec.rb +0 -31
- data/spec/integration/braintree/dispute_search_spec.rb +0 -15
- data/spec/integration/braintree/dispute_spec.rb +27 -0
- data/spec/integration/braintree/http_spec.rb +1 -1
- data/spec/integration/braintree/sepa_direct_debit_account_spec.rb +20 -0
- data/spec/integration/braintree/transaction_spec.rb +76 -88
- data/spec/unit/braintree/credit_card_verification_gateway_spec.rb +51 -0
- data/spec/unit/braintree/sepa_debit_account_spec.rb +8 -7
- data/spec/unit/braintree/transaction/credit_card_details_spec.rb +16 -0
- data/spec/unit/braintree/transaction_gateway_spec.rb +111 -0
- data/spec/unit/braintree/transaction_spec.rb +42 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bee761d9c397c8fd16648ea8fbb108ff57e10e821c3867391b9fb39f7f524a4
|
4
|
+
data.tar.gz: b638e5e4b14ddde9ed7034f7909b0b6c4ab3fc9332cebe5fffd8a141c2e7ab09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77c28cf2f97e235be57bca0e0443386c344af4e6c5295b9f9eda7433575a82920b2c5b977138c0b3ebf396101debc76d8a66e358d2119ae9b9c09733a4dfb982
|
7
|
+
data.tar.gz: d8e3cf8bad775556b0b3c2d89bb372443144d95086abcc21fa8a57e88b335525ec0181f4d11682bcc13d6e1d099beebbec4f7642b38aba29199c563e300a17af
|
@@ -46,11 +46,24 @@ module Braintree
|
|
46
46
|
|
47
47
|
def self._create_signature
|
48
48
|
[
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
{:credit_card => [
|
50
|
+
:cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year,
|
51
|
+
:number, {:billing_address => AddressGateway._shared_signature}
|
52
|
+
]},
|
53
|
+
:intended_transaction_source,
|
54
|
+
{:options => [:amount, :merchant_account_id, :account_type]},
|
55
|
+
:payment_method_nonce,
|
56
|
+
:three_d_secure_authentication_id,
|
57
|
+
{:three_d_secure_pass_thru => [
|
58
|
+
:eci_flag,
|
59
|
+
:cavv,
|
60
|
+
:xid,
|
61
|
+
:three_d_secure_version,
|
62
|
+
:authentication_response,
|
63
|
+
:directory_response,
|
64
|
+
:cavv_algorithm,
|
65
|
+
:ds_transaction_id,
|
66
|
+
]},
|
54
67
|
]
|
55
68
|
end
|
56
69
|
end
|
@@ -83,6 +83,7 @@ module Braintree
|
|
83
83
|
ExpirationYearIsInvalid = "81713"
|
84
84
|
InvalidParamsForCreditCardUpdate = "91745"
|
85
85
|
InvalidVenmoSDKPaymentMethodCode = "91727"
|
86
|
+
NetworkTokenizationAttributeCryptogramIsRequired = "81762"
|
86
87
|
NumberIsInvalid = "81715"
|
87
88
|
NumberIsProhibited = "81750"
|
88
89
|
NumberIsRequired = "81714"
|
@@ -12,12 +12,14 @@ module Braintree
|
|
12
12
|
attr_reader :last_4
|
13
13
|
attr_reader :mandate_type
|
14
14
|
attr_reader :merchant_or_partner_customer_id
|
15
|
+
attr_reader :subscriptions
|
15
16
|
attr_reader :token
|
16
17
|
attr_reader :updated_at
|
17
18
|
attr_reader :view_mandate_url
|
18
19
|
|
19
20
|
def initialize(gateway, attributes) # :nodoc:
|
20
21
|
@gateway = gateway
|
22
|
+
@subscriptions = (@subscriptions || []).map { |subscription_hash| Subscription._new(@gateway, subscription_hash) }
|
21
23
|
set_instance_variables_from_hash(attributes)
|
22
24
|
end
|
23
25
|
|
@@ -129,6 +129,7 @@ module Braintree
|
|
129
129
|
attr_reader :merchant_account_id
|
130
130
|
attr_reader :network_response_code # Response code from the card network
|
131
131
|
attr_reader :network_response_text # Response text from the card network
|
132
|
+
attr_reader :network_token_details
|
132
133
|
attr_reader :network_transaction_id
|
133
134
|
attr_reader :order_id
|
134
135
|
attr_reader :partial_settlement_transaction_ids
|
@@ -299,6 +300,7 @@ module Braintree
|
|
299
300
|
@apple_pay_details = ApplePayDetails.new(@apple_pay)
|
300
301
|
@billing_details = AddressDetails.new(@billing)
|
301
302
|
@credit_card_details = CreditCardDetails.new(@credit_card)
|
303
|
+
@network_token_details = CreditCardDetails.new(@network_token)
|
302
304
|
@custom_fields = attributes[:custom_fields].is_a?(Hash) ? attributes[:custom_fields] : {}
|
303
305
|
@customer_details = CustomerDetails.new(@customer)
|
304
306
|
@descriptor = Descriptor.new(@descriptor)
|
@@ -195,7 +195,7 @@ module Braintree
|
|
195
195
|
:sca_exemption, :currency_iso_code, :exchange_rate_quote_id,
|
196
196
|
{: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
197
|
{:risk_data => [:customer_browser, :customer_device_id, :customer_ip, :customer_location_zip, :customer_tenure]},
|
198
|
-
{:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, {:payment_reader_card_details => [:encrypted_card_data, :key_serial_number]}]},
|
198
|
+
{:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, {:payment_reader_card_details => [:encrypted_card_data, :key_serial_number]}, {:network_tokenization_attributes => [:cryptogram, :ecommerce_indicator, :token_requestor_id]}]},
|
199
199
|
{:customer => [:id, :company, :email, :fax, :first_name, :last_name, :phone, :website]},
|
200
200
|
{
|
201
201
|
:billing => AddressGateway._shared_signature
|
data/lib/braintree/version.rb
CHANGED
@@ -576,66 +576,6 @@ describe Braintree::CreditCard do
|
|
576
576
|
end
|
577
577
|
end
|
578
578
|
|
579
|
-
context "venmo_sdk" do
|
580
|
-
describe "venmo_sdk_payment_method_code" do
|
581
|
-
it "can pass a venmo sdk payment method code" do
|
582
|
-
customer = Braintree::Customer.create!
|
583
|
-
result = Braintree::CreditCard.create(
|
584
|
-
:customer_id => customer.id,
|
585
|
-
:venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK::VisaPaymentMethodCode,
|
586
|
-
)
|
587
|
-
result.success?.should == true
|
588
|
-
result.credit_card.venmo_sdk?.should == false
|
589
|
-
result.credit_card.bin.should == "400934"
|
590
|
-
result.credit_card.last_4.should == "1881"
|
591
|
-
end
|
592
|
-
|
593
|
-
it "success? returns false when given an invalid venmo sdk payment method code" do
|
594
|
-
customer = Braintree::Customer.create!
|
595
|
-
result = Braintree::CreditCard.create(
|
596
|
-
:customer_id => customer.id,
|
597
|
-
:venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK::InvalidPaymentMethodCode,
|
598
|
-
)
|
599
|
-
|
600
|
-
result.success?.should == false
|
601
|
-
result.message.should == "Invalid VenmoSDK payment method code"
|
602
|
-
result.errors.first.code.should == "91727"
|
603
|
-
end
|
604
|
-
end
|
605
|
-
|
606
|
-
describe "venmo_sdk_session" do
|
607
|
-
it "venmo_sdk? returns true when given a valid session" do
|
608
|
-
customer = Braintree::Customer.create!
|
609
|
-
result = Braintree::CreditCard.create(
|
610
|
-
:customer_id => customer.id,
|
611
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
612
|
-
:expiration_date => "05/2009",
|
613
|
-
:cvv => "100",
|
614
|
-
:options => {
|
615
|
-
:venmo_sdk_session => Braintree::Test::VenmoSDK::Session
|
616
|
-
},
|
617
|
-
)
|
618
|
-
result.success?.should == true
|
619
|
-
result.credit_card.venmo_sdk?.should == false
|
620
|
-
end
|
621
|
-
|
622
|
-
it "venmo_sdk? returns false when given an invalid session" do
|
623
|
-
customer = Braintree::Customer.create!
|
624
|
-
result = Braintree::CreditCard.create(
|
625
|
-
:customer_id => customer.id,
|
626
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
627
|
-
:expiration_date => "05/2009",
|
628
|
-
:cvv => "100",
|
629
|
-
:options => {
|
630
|
-
:venmo_sdk_session => Braintree::Test::VenmoSDK::InvalidSession
|
631
|
-
},
|
632
|
-
)
|
633
|
-
result.success?.should == true
|
634
|
-
result.credit_card.venmo_sdk?.should == false
|
635
|
-
end
|
636
|
-
end
|
637
|
-
end
|
638
|
-
|
639
579
|
context "client API" do
|
640
580
|
it "adds credit card to an existing customer using a payment method nonce" do
|
641
581
|
nonce = nonce_for_new_payment_method(
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")
|
2
3
|
|
3
4
|
describe Braintree::CreditCardVerification, "search" do
|
4
5
|
|
@@ -11,7 +12,7 @@ describe Braintree::CreditCardVerification, "search" do
|
|
11
12
|
},
|
12
13
|
:options => {
|
13
14
|
:amount => "10.00"
|
14
|
-
}
|
15
|
+
},
|
15
16
|
}
|
16
17
|
|
17
18
|
result = Braintree::CreditCardVerification.create(verification_params)
|
@@ -259,4 +260,126 @@ describe Braintree::CreditCardVerification, "search" do
|
|
259
260
|
end
|
260
261
|
end
|
261
262
|
end
|
263
|
+
|
264
|
+
describe "intended transaction source" do
|
265
|
+
it "creates a new verification with intended transaction source installment" do
|
266
|
+
verification_params = {
|
267
|
+
:credit_card => {
|
268
|
+
:expiration_date => "05/2029",
|
269
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
270
|
+
},
|
271
|
+
:options => {
|
272
|
+
:amount => "10.00"
|
273
|
+
},
|
274
|
+
:intended_transaction_source => "installment"
|
275
|
+
}
|
276
|
+
|
277
|
+
result = Braintree::CreditCardVerification.create(verification_params)
|
278
|
+
|
279
|
+
result.should be_success
|
280
|
+
result.credit_card_verification.id.should =~ /^\w{6,}$/
|
281
|
+
result.credit_card_verification.status.should == Braintree::CreditCardVerification::Status::Verified
|
282
|
+
result.credit_card_verification.processor_response_code.should == "1000"
|
283
|
+
result.credit_card_verification.processor_response_text.should == "Approved"
|
284
|
+
result.credit_card_verification.processor_response_type.should == Braintree::ProcessorResponseTypes::Approved
|
285
|
+
expect(result.credit_card_verification.network_transaction_id).not_to be_nil
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
context "three_d_secure" do
|
290
|
+
it "can create a verification with a three_d_secure_authentication_id" do
|
291
|
+
three_d_secure_authentication_id = SpecHelper.create_3ds_verification(
|
292
|
+
SpecHelper::ThreeDSecureMerchantAccountId,
|
293
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
294
|
+
:expiration_month => "12",
|
295
|
+
:expiration_year => "2029",
|
296
|
+
)
|
297
|
+
|
298
|
+
verification_params = {
|
299
|
+
:credit_card => {
|
300
|
+
:expiration_date => "12/2029",
|
301
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
302
|
+
},
|
303
|
+
:options => {
|
304
|
+
:amount => "10.00",
|
305
|
+
:merchant_account_id => SpecHelper::ThreeDSecureMerchantAccountId,
|
306
|
+
},
|
307
|
+
:three_d_secure_authentication_id => three_d_secure_authentication_id,
|
308
|
+
}
|
309
|
+
|
310
|
+
result = Braintree::CreditCardVerification.create(verification_params)
|
311
|
+
|
312
|
+
result.should be_success
|
313
|
+
result.credit_card_verification.id.should =~ /^\w{6,}$/
|
314
|
+
result.credit_card_verification.status.should == Braintree::CreditCardVerification::Status::Verified
|
315
|
+
result.credit_card_verification.processor_response_code.should == "1000"
|
316
|
+
result.credit_card_verification.processor_response_text.should == "Approved"
|
317
|
+
result.credit_card_verification.processor_response_type.should == Braintree::ProcessorResponseTypes::Approved
|
318
|
+
expect(result.credit_card_verification.network_transaction_id).not_to be_nil
|
319
|
+
end
|
320
|
+
|
321
|
+
it "can create a verification with a payment_method_nonce" do
|
322
|
+
nonce = nonce_for_new_payment_method(
|
323
|
+
:credit_card => {
|
324
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
325
|
+
:expiration_month => "11",
|
326
|
+
:expiration_year => "2099",
|
327
|
+
},
|
328
|
+
)
|
329
|
+
nonce.should_not be_nil
|
330
|
+
|
331
|
+
verification_params = {
|
332
|
+
:credit_card => {
|
333
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
334
|
+
},
|
335
|
+
:options => {
|
336
|
+
:amount => "10.00",
|
337
|
+
:merchant_account_id => SpecHelper::ThreeDSecureMerchantAccountId,
|
338
|
+
},
|
339
|
+
:payment_method_nonce => nonce,
|
340
|
+
}
|
341
|
+
|
342
|
+
result = Braintree::CreditCardVerification.create(verification_params)
|
343
|
+
|
344
|
+
result.should be_success
|
345
|
+
result.credit_card_verification.id.should =~ /^\w{6,}$/
|
346
|
+
result.credit_card_verification.status.should == Braintree::CreditCardVerification::Status::Verified
|
347
|
+
result.credit_card_verification.processor_response_code.should == "1000"
|
348
|
+
result.credit_card_verification.processor_response_text.should == "Approved"
|
349
|
+
result.credit_card_verification.processor_response_type.should == Braintree::ProcessorResponseTypes::Approved
|
350
|
+
expect(result.credit_card_verification.network_transaction_id).not_to be_nil
|
351
|
+
end
|
352
|
+
|
353
|
+
it "can create a verification with a verification_three_d_secure_pass_thru" do
|
354
|
+
verification_params = {
|
355
|
+
:credit_card => {
|
356
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
357
|
+
:expiration_date => "12/12",
|
358
|
+
},
|
359
|
+
:options => {
|
360
|
+
:amount => "10.00",
|
361
|
+
},
|
362
|
+
:three_d_secure_pass_thru => {
|
363
|
+
:eci_flag => "02",
|
364
|
+
:cavv => "some_cavv",
|
365
|
+
:xid => "some_xid",
|
366
|
+
:three_d_secure_version => "1.0.2",
|
367
|
+
:authentication_response => "Y",
|
368
|
+
:directory_response => "Y",
|
369
|
+
:cavv_algorithm => "2",
|
370
|
+
:ds_transaction_id => "some_ds_id",
|
371
|
+
},
|
372
|
+
}
|
373
|
+
|
374
|
+
result = Braintree::CreditCardVerification.create(verification_params)
|
375
|
+
|
376
|
+
result.should be_success
|
377
|
+
result.credit_card_verification.id.should =~ /^\w{6,}$/
|
378
|
+
result.credit_card_verification.status.should == Braintree::CreditCardVerification::Status::Verified
|
379
|
+
result.credit_card_verification.processor_response_code.should == "1000"
|
380
|
+
result.credit_card_verification.processor_response_text.should == "Approved"
|
381
|
+
result.credit_card_verification.processor_response_type.should == Braintree::ProcessorResponseTypes::Approved
|
382
|
+
expect(result.credit_card_verification.network_transaction_id).not_to be_nil
|
383
|
+
end
|
384
|
+
end
|
262
385
|
end
|
@@ -566,37 +566,6 @@ describe Braintree::Customer do
|
|
566
566
|
result.errors.for(:customer).on(:custom_fields)[0].message.should == "Custom field is invalid: spouse_name."
|
567
567
|
end
|
568
568
|
|
569
|
-
describe "venmo_sdk" do
|
570
|
-
it "can create a customer with a venmo sdk payment method code" do
|
571
|
-
result = Braintree::Customer.create(
|
572
|
-
:first_name => "Steve",
|
573
|
-
:last_name => "Hamlin",
|
574
|
-
:credit_card => {
|
575
|
-
:venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK::VisaPaymentMethodCode
|
576
|
-
},
|
577
|
-
)
|
578
|
-
result.success?.should == true
|
579
|
-
result.customer.credit_cards.first.bin.should == "400934"
|
580
|
-
result.customer.credit_cards.first.last_4.should == "1881"
|
581
|
-
end
|
582
|
-
|
583
|
-
it "can create a customer with a venmo sdk session" do
|
584
|
-
result = Braintree::Customer.create(
|
585
|
-
:first_name => "Steve",
|
586
|
-
:last_name => "Hamlin",
|
587
|
-
:credit_card => {
|
588
|
-
:number => Braintree::Test::CreditCardNumbers::MasterCard,
|
589
|
-
:expiration_date => "05/2010",
|
590
|
-
:options => {
|
591
|
-
:venmo_sdk_session => Braintree::Test::VenmoSDK::Session
|
592
|
-
}
|
593
|
-
},
|
594
|
-
)
|
595
|
-
result.success?.should == true
|
596
|
-
result.customer.credit_cards.first.venmo_sdk?.should == false
|
597
|
-
end
|
598
|
-
end
|
599
|
-
|
600
569
|
context "client API" do
|
601
570
|
it "can create a customer with a payment method nonce" do
|
602
571
|
nonce = nonce_for_new_payment_method(
|
@@ -78,20 +78,6 @@ describe Braintree::Dispute, "search" do
|
|
78
78
|
dispute = collection.disputes.first
|
79
79
|
end
|
80
80
|
|
81
|
-
it "correctly returns chargeback protected disputes" do
|
82
|
-
collection = Braintree::Dispute.search do |search|
|
83
|
-
search.case_number.is "CASE-CHARGEBACK-PROTECTED"
|
84
|
-
end
|
85
|
-
|
86
|
-
expect(collection.disputes.count).to eq(1)
|
87
|
-
dispute = collection.disputes.first
|
88
|
-
|
89
|
-
# NEXT_MAJOR_VERSION Remove this assertion when chargeback_protection_level is removed from the SDK
|
90
|
-
expect(dispute.chargeback_protection_level).to eq(Braintree::Dispute::ChargebackProtectionLevel::Effortless)
|
91
|
-
expect(dispute.protection_level).to eq(Braintree::Dispute::ProtectionLevel::EffortlessCBP)
|
92
|
-
expect(dispute.reason).to eq(Braintree::Dispute::Reason::Fraud)
|
93
|
-
end
|
94
|
-
|
95
81
|
it "correctly returns disputes by chargeback protection level flag" do
|
96
82
|
collection = Braintree::Dispute.search do |search|
|
97
83
|
search.chargeback_protection_level.in [
|
@@ -104,7 +90,6 @@ describe Braintree::Dispute, "search" do
|
|
104
90
|
collection.disputes.each do |dispute|
|
105
91
|
expect(dispute.chargeback_protection_level).to eq(Braintree::Dispute::ChargebackProtectionLevel::Effortless)
|
106
92
|
expect(dispute.protection_level).to eq(Braintree::Dispute::ProtectionLevel::EffortlessCBP)
|
107
|
-
expect(dispute.reason).to eq(Braintree::Dispute::Reason::Fraud)
|
108
93
|
end
|
109
94
|
end
|
110
95
|
|
@@ -151,6 +151,33 @@ describe Braintree::Dispute do
|
|
151
151
|
result.evidence.sent_to_processor_at.should == nil
|
152
152
|
result.evidence.sequence_number.should == 7
|
153
153
|
end
|
154
|
+
|
155
|
+
it "creates text evidence for the dispute with CARRIER_NAME shipping tracking" do
|
156
|
+
result = Braintree::Dispute.add_text_evidence(dispute.id, {content: "UPS", category: "CARRIER_NAME", sequence_number: 0})
|
157
|
+
|
158
|
+
result.success?.should == true
|
159
|
+
result.evidence.category.should == "CARRIER_NAME"
|
160
|
+
result.evidence.comment.should == "UPS"
|
161
|
+
result.evidence.sequence_number.should == 0
|
162
|
+
end
|
163
|
+
|
164
|
+
it "creates text evidence for the dispute with TRACKING_NUMBER shipping tracking" do
|
165
|
+
result = Braintree::Dispute.add_text_evidence(dispute.id, {content: "3", category: "TRACKING_NUMBER", sequence_number: 0})
|
166
|
+
|
167
|
+
result.success?.should == true
|
168
|
+
result.evidence.category.should == "TRACKING_NUMBER"
|
169
|
+
result.evidence.comment.should == "3"
|
170
|
+
result.evidence.sequence_number.should == 0
|
171
|
+
end
|
172
|
+
|
173
|
+
it "creates text evidence for the dispute with TRACKING_URL shipping tracking" do
|
174
|
+
result = Braintree::Dispute.add_text_evidence(dispute.id, {content: "https://example.com/tracking-number/abc12345", category: "TRACKING_URL", sequence_number: 1})
|
175
|
+
|
176
|
+
result.success?.should == true
|
177
|
+
result.evidence.category.should == "TRACKING_URL"
|
178
|
+
result.evidence.comment.should == "https://example.com/tracking-number/abc12345"
|
179
|
+
result.evidence.sequence_number.should == 1
|
180
|
+
end
|
154
181
|
end
|
155
182
|
|
156
183
|
describe "self.finalize" do
|
@@ -97,7 +97,7 @@ describe Braintree::Http do
|
|
97
97
|
end
|
98
98
|
|
99
99
|
describe "ssl_version" do
|
100
|
-
|
100
|
+
xit "causes failed requests to sandbox with incompatible SSL version" do
|
101
101
|
begin
|
102
102
|
original_env = Braintree::Configuration.environment
|
103
103
|
Braintree::Configuration.environment = :sandbox
|
@@ -50,6 +50,26 @@ describe Braintree::SepaDirectDebitAccount do
|
|
50
50
|
}.to raise_error(Braintree::NotFoundError)
|
51
51
|
end
|
52
52
|
end
|
53
|
+
|
54
|
+
context "subscriptions" do
|
55
|
+
it "returns subscriptions associated with a SEPA direct debit account" do
|
56
|
+
customer = Braintree::Customer.create!
|
57
|
+
|
58
|
+
subscription1 = Braintree::Subscription.create(
|
59
|
+
:payment_method_token => token,
|
60
|
+
:plan_id => SpecHelper::TriallessPlan[:id],
|
61
|
+
).subscription
|
62
|
+
|
63
|
+
subscription2 = Braintree::Subscription.create(
|
64
|
+
:payment_method_token => token,
|
65
|
+
:plan_id => SpecHelper::TriallessPlan[:id],
|
66
|
+
).subscription
|
67
|
+
|
68
|
+
sepa_debit_account = Braintree::SepaDirectDebitAccount.find(token)
|
69
|
+
subscription_ids = sepa_debit_account.subscriptions.map { |h| h[:id] }.sort
|
70
|
+
expect(subscription_ids).to eq([subscription1.id, subscription2.id].sort)
|
71
|
+
end
|
72
|
+
end
|
53
73
|
end
|
54
74
|
|
55
75
|
describe "self.delete" do
|
@@ -1002,10 +1002,12 @@ describe Braintree::Transaction do
|
|
1002
1002
|
result.transaction.gateway_rejection_reason.should == Braintree::Transaction::GatewayRejectionReason::TokenIssuance
|
1003
1003
|
end
|
1004
1004
|
|
1005
|
-
|
1005
|
+
xit "exposes the excessive_retry gateway rejection reason" do
|
1006
1006
|
with_duplicate_checking_merchant do
|
1007
1007
|
result = nil
|
1008
|
-
|
1008
|
+
counter = 0
|
1009
|
+
excessive_retry = false
|
1010
|
+
until excessive_retry || counter == 20
|
1009
1011
|
result = Braintree::Transaction.sale(
|
1010
1012
|
:amount => Braintree::Test::TransactionAmounts::Decline,
|
1011
1013
|
:credit_card => {
|
@@ -1014,9 +1016,10 @@ describe Braintree::Transaction do
|
|
1014
1016
|
:expiration_year => "2011"
|
1015
1017
|
},
|
1016
1018
|
)
|
1019
|
+
excessive_retry = result.transaction.status == "gateway_rejected"
|
1020
|
+
counter +=1
|
1017
1021
|
end
|
1018
|
-
result.
|
1019
|
-
result.transaction.gateway_rejection_reason.should == Braintree::Transaction::GatewayRejectionReason::ExcessiveRetry
|
1022
|
+
expect(result.transaction.gateway_rejection_reason). to eq(Braintree::Transaction::GatewayRejectionReason::ExcessiveRetry)
|
1020
1023
|
end
|
1021
1024
|
end
|
1022
1025
|
end
|
@@ -1504,6 +1507,32 @@ describe Braintree::Transaction do
|
|
1504
1507
|
result.transaction.recurring.should == true
|
1505
1508
|
end
|
1506
1509
|
|
1510
|
+
it "successfully creates a transaction with installment_first" do
|
1511
|
+
result = Braintree::Transaction.create(
|
1512
|
+
:type => "sale",
|
1513
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1514
|
+
:credit_card => {
|
1515
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1516
|
+
:expiration_date => "12/12",
|
1517
|
+
},
|
1518
|
+
:transaction_source => "installment_first",
|
1519
|
+
)
|
1520
|
+
result.success?.should == true
|
1521
|
+
end
|
1522
|
+
|
1523
|
+
it "successfully creates a transaction with installment" do
|
1524
|
+
result = Braintree::Transaction.create(
|
1525
|
+
:type => "sale",
|
1526
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1527
|
+
:credit_card => {
|
1528
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1529
|
+
:expiration_date => "12/12",
|
1530
|
+
},
|
1531
|
+
:transaction_source => "installment",
|
1532
|
+
)
|
1533
|
+
result.success?.should == true
|
1534
|
+
end
|
1535
|
+
|
1507
1536
|
it "marks a transactions as merchant" do
|
1508
1537
|
result = Braintree::Transaction.create(
|
1509
1538
|
:type => "sale",
|
@@ -1728,35 +1757,6 @@ describe Braintree::Transaction do
|
|
1728
1757
|
end
|
1729
1758
|
end
|
1730
1759
|
|
1731
|
-
describe "venmo_sdk" do
|
1732
|
-
it "can create a card with a venmo sdk payment method code" do
|
1733
|
-
result = Braintree::Transaction.create(
|
1734
|
-
:type => "sale",
|
1735
|
-
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1736
|
-
:venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK::VisaPaymentMethodCode,
|
1737
|
-
)
|
1738
|
-
result.success?.should == true
|
1739
|
-
result.transaction.credit_card_details.bin.should == "400934"
|
1740
|
-
result.transaction.credit_card_details.last_4.should == "1881"
|
1741
|
-
end
|
1742
|
-
|
1743
|
-
it "can create a transaction with venmo sdk session" do
|
1744
|
-
result = Braintree::Transaction.create(
|
1745
|
-
:type => "sale",
|
1746
|
-
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1747
|
-
:credit_card => {
|
1748
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1749
|
-
:expiration_date => "12/12",
|
1750
|
-
},
|
1751
|
-
:options => {
|
1752
|
-
:venmo_sdk_session => Braintree::Test::VenmoSDK::Session
|
1753
|
-
},
|
1754
|
-
)
|
1755
|
-
result.success?.should == true
|
1756
|
-
result.transaction.credit_card_details.venmo_sdk?.should == false
|
1757
|
-
end
|
1758
|
-
end
|
1759
|
-
|
1760
1760
|
context "client API" do
|
1761
1761
|
it "can create a transaction with a shared card nonce" do
|
1762
1762
|
nonce = nonce_for_new_payment_method(
|
@@ -5226,6 +5226,49 @@ describe Braintree::Transaction do
|
|
5226
5226
|
end
|
5227
5227
|
end
|
5228
5228
|
|
5229
|
+
|
5230
|
+
context "3rd party Card on File Network Token" do
|
5231
|
+
it "Works with all params" do
|
5232
|
+
params = {
|
5233
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
5234
|
+
:credit_card => {
|
5235
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
5236
|
+
:expiration_date => "05/2009",
|
5237
|
+
:network_tokenization_attributes => {
|
5238
|
+
:cryptogram => "/wAAAAAAAcb8AlGUF/1JQEkAAAA=",
|
5239
|
+
:ecommerce_indicator => "05",
|
5240
|
+
:token_requestor_id => "45310020105"
|
5241
|
+
},
|
5242
|
+
}
|
5243
|
+
}
|
5244
|
+
result = Braintree::Transaction.sale(params)
|
5245
|
+
expect(result.success?).to eq true
|
5246
|
+
expect(result.transaction.status).to eq Braintree::Transaction::Status::Authorized
|
5247
|
+
expect(result.transaction.processed_with_network_token?).to eq true
|
5248
|
+
|
5249
|
+
network_token_details = result.transaction.network_token_details
|
5250
|
+
expect(network_token_details.is_network_tokenized?).to eq true
|
5251
|
+
end
|
5252
|
+
|
5253
|
+
it "returns errors if validations on cryptogram fails" do
|
5254
|
+
params = {
|
5255
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
5256
|
+
:credit_card => {
|
5257
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
5258
|
+
:expiration_date => "05/2009",
|
5259
|
+
:network_tokenization_attributes => {
|
5260
|
+
:ecommerce_indicator => "05",
|
5261
|
+
:token_requestor_id => "45310020105"
|
5262
|
+
},
|
5263
|
+
}
|
5264
|
+
}
|
5265
|
+
result = Braintree::Transaction.sale(params)
|
5266
|
+
|
5267
|
+
expect(result.success?).to eq(false)
|
5268
|
+
expect(result.errors.for(:transaction).for(:credit_card).map { |e| e.code }.sort).to eq [Braintree::ErrorCodes::CreditCard::NetworkTokenizationAttributeCryptogramIsRequired]
|
5269
|
+
end
|
5270
|
+
end
|
5271
|
+
|
5229
5272
|
xit "Amex Pay with Points" do
|
5230
5273
|
context "transaction creation" do
|
5231
5274
|
it "succeeds when submit_for_settlement is true" do
|
@@ -6668,61 +6711,6 @@ describe Braintree::Transaction do
|
|
6668
6711
|
Braintree::Transaction.find(transaction.id)
|
6669
6712
|
end
|
6670
6713
|
|
6671
|
-
context "venmo sdk" do
|
6672
|
-
describe "venmo_sdk_payment_method_code" do
|
6673
|
-
it "can create a transaction with venmo_sdk_payment_method_code" do
|
6674
|
-
result = Braintree::Transaction.sale(
|
6675
|
-
:amount => "10.00",
|
6676
|
-
:venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK.generate_test_payment_method_code(Braintree::Test::CreditCardNumbers::Visa),
|
6677
|
-
)
|
6678
|
-
result.success?.should == true
|
6679
|
-
result.transaction.credit_card_details.venmo_sdk?.should == false
|
6680
|
-
end
|
6681
|
-
|
6682
|
-
it "errors when an invalid payment method code is passed" do
|
6683
|
-
result = Braintree::Transaction.sale(
|
6684
|
-
:amount => "10.00",
|
6685
|
-
:venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK::InvalidPaymentMethodCode,
|
6686
|
-
)
|
6687
|
-
result.success?.should == false
|
6688
|
-
result.message.should include("Invalid VenmoSDK payment method code")
|
6689
|
-
result.errors.map(&:code).should include("91727")
|
6690
|
-
end
|
6691
|
-
end
|
6692
|
-
|
6693
|
-
describe "venmo_sdk_session" do
|
6694
|
-
it "can create a transaction and vault a card when a venmo_sdk_session is present" do
|
6695
|
-
result = Braintree::Transaction.sale(
|
6696
|
-
:amount => "10.00",
|
6697
|
-
:credit_card => {
|
6698
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
6699
|
-
:expiration_date => "05/2009"
|
6700
|
-
},
|
6701
|
-
:options => {
|
6702
|
-
:venmo_sdk_session => Braintree::Test::VenmoSDK::Session
|
6703
|
-
},
|
6704
|
-
)
|
6705
|
-
result.success?.should == true
|
6706
|
-
result.transaction.credit_card_details.venmo_sdk?.should == false
|
6707
|
-
end
|
6708
|
-
|
6709
|
-
it "venmo_sdk boolean is false when an invalid session is passed" do
|
6710
|
-
result = Braintree::Transaction.sale(
|
6711
|
-
:amount => "10.00",
|
6712
|
-
:credit_card => {
|
6713
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
6714
|
-
:expiration_date => "05/2009"
|
6715
|
-
},
|
6716
|
-
:options => {
|
6717
|
-
:venmo_sdk_session => Braintree::Test::VenmoSDK::InvalidSession
|
6718
|
-
},
|
6719
|
-
)
|
6720
|
-
result.success?.should == true
|
6721
|
-
result.transaction.credit_card_details.venmo_sdk?.should == false
|
6722
|
-
end
|
6723
|
-
end
|
6724
|
-
end
|
6725
|
-
|
6726
6714
|
context "paypal" do
|
6727
6715
|
it "can create a transaction for a paypal account" do
|
6728
6716
|
result = Braintree::Transaction.sale(
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Braintree::CreditCardVerificationGateway do
|
4
|
+
describe "Credit Card Verification Gateway" do
|
5
|
+
let(:gateway) do
|
6
|
+
config = Braintree::Configuration.new(
|
7
|
+
:merchant_id => "merchant_id",
|
8
|
+
:public_key => "public_key",
|
9
|
+
:private_key => "private_key",
|
10
|
+
)
|
11
|
+
Braintree::Gateway.new(config)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "creates a credit card verification gateway" do
|
15
|
+
result = Braintree::CreditCardVerificationGateway.new(gateway)
|
16
|
+
|
17
|
+
result.inspect.should include("merchant_id")
|
18
|
+
result.inspect.should include("public_key")
|
19
|
+
result.inspect.should include("private_key")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "creates a credit card verification gateway signature" do
|
23
|
+
result = Braintree::CreditCardVerificationGateway._create_signature
|
24
|
+
result.inspect.should include("credit_card")
|
25
|
+
result.inspect.should include("credit_card")
|
26
|
+
result.inspect.should include("cardholder_name")
|
27
|
+
result.inspect.should include("cvv")
|
28
|
+
result.inspect.should include("expiration_date")
|
29
|
+
result.inspect.should include("expiration_month")
|
30
|
+
result.inspect.should include("expiration_year")
|
31
|
+
result.inspect.should include("number")
|
32
|
+
result.inspect.should include("billing_address")
|
33
|
+
result.inspect.should include("intended_transaction_source")
|
34
|
+
result.inspect.should include("options")
|
35
|
+
result.inspect.should include("amount")
|
36
|
+
result.inspect.should include("merchant_account_id")
|
37
|
+
result.inspect.should include("account_type")
|
38
|
+
result.inspect.should include("payment_method_nonce")
|
39
|
+
result.inspect.should include("three_d_secure_authentication_id")
|
40
|
+
result.inspect.should include("three_d_secure_pass_thru")
|
41
|
+
result.inspect.should include("eci_flag")
|
42
|
+
result.inspect.should include("cavv")
|
43
|
+
result.inspect.should include("xid")
|
44
|
+
result.inspect.should include("three_d_secure_version")
|
45
|
+
result.inspect.should include("authentication_response")
|
46
|
+
result.inspect.should include("directory_response")
|
47
|
+
result.inspect.should include("cavv_algorithm")
|
48
|
+
result.inspect.should include("ds_transaction_id")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -15,18 +15,19 @@ describe Braintree::SepaDirectDebitAccount do
|
|
15
15
|
let(:params) do
|
16
16
|
{
|
17
17
|
bank_reference_token: "a-reference-token",
|
18
|
-
|
19
|
-
last_4: "4321",
|
20
|
-
merchant_or_partner_customer_id: "a-mp-customer-id",
|
21
|
-
customer_id: "a-customer-id",
|
18
|
+
created_at: Time.now,
|
22
19
|
customer_global_id: "a-customer-global-id",
|
20
|
+
customer_id: "a-customer-id",
|
23
21
|
default: true,
|
24
|
-
token: "a-token",
|
25
22
|
global_id: "a-global-id",
|
26
23
|
image_url: "a-image-url",
|
27
|
-
|
28
|
-
|
24
|
+
last_4: "4321",
|
25
|
+
mandate_type: "ONE_OFF",
|
26
|
+
merchant_or_partner_customer_id: "a-mp-customer-id",
|
27
|
+
subscriptions: [{price: "10.00"}],
|
28
|
+
token: "a-token",
|
29
29
|
updated_at: Time.now,
|
30
|
+
view_mandate_url: "a-view-mandate-url",
|
30
31
|
}
|
31
32
|
end
|
32
33
|
|
@@ -46,4 +46,20 @@ describe Braintree::Transaction::CreditCardDetails do
|
|
46
46
|
details.masked_number.should == "510510******5100"
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
describe "is_network_tokenized" do
|
51
|
+
it "returns true if is_network_tokenized is true" do
|
52
|
+
details = Braintree::Transaction::CreditCardDetails.new(
|
53
|
+
:is_network_tokenized => true,
|
54
|
+
)
|
55
|
+
details.is_network_tokenized?.should == true
|
56
|
+
end
|
57
|
+
|
58
|
+
it "returns false if is_network_tokenized is false" do
|
59
|
+
details = Braintree::Transaction::CreditCardDetails.new(
|
60
|
+
:is_network_tokenized => false,
|
61
|
+
)
|
62
|
+
details.is_network_tokenized?.should == false
|
63
|
+
end
|
64
|
+
end
|
49
65
|
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Braintree::TransactionGateway do
|
4
|
+
describe "Transaction Gateway" do
|
5
|
+
let(:gateway) do
|
6
|
+
config = Braintree::Configuration.new(
|
7
|
+
:merchant_id => "merchant_id",
|
8
|
+
:public_key => "public_key",
|
9
|
+
:private_key => "private_key",
|
10
|
+
)
|
11
|
+
Braintree::Gateway.new(config)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "creates a transactionGateway gateway" do
|
15
|
+
result = Braintree::TransactionGateway.new(gateway)
|
16
|
+
|
17
|
+
result.inspect.should include("merchant_id")
|
18
|
+
result.inspect.should include("public_key")
|
19
|
+
result.inspect.should include("private_key")
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "self.create" do
|
23
|
+
it "raises an exception if attributes contain an invalid key" do
|
24
|
+
expect do
|
25
|
+
transaction = Braintree::TransactionGateway.new(gateway)
|
26
|
+
transaction.create(:invalid_key => "val")
|
27
|
+
end.to raise_error(ArgumentError, "invalid keys: invalid_key")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "creates a transaction gateway signature" do
|
32
|
+
expect(Braintree::TransactionGateway._create_signature).to match([
|
33
|
+
:amount, :billing_address_id, :channel, :customer_id, :device_data, :discount_amount,
|
34
|
+
:merchant_account_id, :order_id, :payment_method_nonce, :payment_method_token,
|
35
|
+
:product_sku, :purchase_order_number, :service_fee_amount, :shared_billing_address_id,
|
36
|
+
:shared_customer_id, :shared_payment_method_nonce, :shared_payment_method_token,
|
37
|
+
:shared_shipping_address_id, :shipping_address_id, :shipping_amount,
|
38
|
+
:ships_from_postal_code, :tax_amount, :tax_exempt, :three_d_secure_authentication_id,
|
39
|
+
:three_d_secure_token, :transaction_source, :type, :venmo_sdk_payment_method_code,
|
40
|
+
:sca_exemption, :currency_iso_code, :exchange_rate_quote_id,
|
41
|
+
{: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]},
|
42
|
+
{:risk_data => [:customer_browser, :customer_device_id, :customer_ip, :customer_location_zip, :customer_tenure]},
|
43
|
+
{:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, {:payment_reader_card_details => [:encrypted_card_data, :key_serial_number]}, {:network_tokenization_attributes => [:cryptogram, :ecommerce_indicator, :token_requestor_id]}]},
|
44
|
+
{:customer => [:id, :company, :email, :fax, :first_name, :last_name, :phone, :website]},
|
45
|
+
{
|
46
|
+
:billing => Braintree::AddressGateway._shared_signature
|
47
|
+
},
|
48
|
+
{
|
49
|
+
:shipping => Braintree::AddressGateway._shared_signature + [:shipping_method],
|
50
|
+
},
|
51
|
+
{
|
52
|
+
:three_d_secure_pass_thru => [
|
53
|
+
:eci_flag,
|
54
|
+
:cavv,
|
55
|
+
:xid,
|
56
|
+
:three_d_secure_version,
|
57
|
+
:authentication_response,
|
58
|
+
:directory_response,
|
59
|
+
:cavv_algorithm,
|
60
|
+
:ds_transaction_id,
|
61
|
+
]
|
62
|
+
},
|
63
|
+
{:options => [
|
64
|
+
:hold_in_escrow,
|
65
|
+
:store_in_vault,
|
66
|
+
:store_in_vault_on_success,
|
67
|
+
:submit_for_settlement,
|
68
|
+
:add_billing_address_to_payment_method,
|
69
|
+
:store_shipping_address_in_vault,
|
70
|
+
:venmo_sdk_session,
|
71
|
+
:payee_id,
|
72
|
+
:payee_email,
|
73
|
+
:skip_advanced_fraud_checking,
|
74
|
+
:skip_avs,
|
75
|
+
:skip_cvv,
|
76
|
+
{:paypal => [:custom_field, :payee_id, :payee_email, :description, {:supplementary_data => :_any_key_}]},
|
77
|
+
{:three_d_secure => [:required]},
|
78
|
+
{:amex_rewards => [:request_id, :points, :currency_amount, :currency_iso_code]},
|
79
|
+
{:venmo => [:profile_id]},
|
80
|
+
{:credit_card => [:account_type]},
|
81
|
+
]
|
82
|
+
},
|
83
|
+
{:external_vault => [
|
84
|
+
:status,
|
85
|
+
:previous_network_transaction_id,
|
86
|
+
]},
|
87
|
+
{:custom_fields => :_any_key_},
|
88
|
+
{:descriptor => [:name, :phone, :url]},
|
89
|
+
{:paypal_account => [:email, :token, :paypal_data, :payee_id, :payee_email, :payer_id, :payment_id]},
|
90
|
+
{:industry => [
|
91
|
+
:industry_type,
|
92
|
+
{:data => [
|
93
|
+
: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,
|
94
|
+
:passenger_first_name, :passenger_last_name, :passenger_middle_initial, :passenger_title, :issued_date, :travel_agency_name, :travel_agency_code, :ticket_number,
|
95
|
+
:issuing_carrier_code, :customer_code, :fare_amount, :fee_amount, :tax_amount, :restricted_ticket, :no_show, :advanced_deposit, :fire_safe, :property_phone,
|
96
|
+
{:legs => [
|
97
|
+
:conjunction_ticket, :exchange_ticket, :coupon_number, :service_class, :carrier_code, :fare_basis_code, :flight_number, :departure_date, :departure_airport_code, :departure_time,
|
98
|
+
:arrival_airport_code, :arrival_time, :stopover_permitted, :fare_amount, :fee_amount, :tax_amount, :endorsement_or_restrictions,
|
99
|
+
]},
|
100
|
+
{:additional_charges => [
|
101
|
+
:kind, :amount,
|
102
|
+
]},
|
103
|
+
]},
|
104
|
+
]},
|
105
|
+
{:apple_pay_card => [:number, :cardholder_name, :cryptogram, :expiration_month, :expiration_year, :eci_indicator]},
|
106
|
+
{:google_pay_card => [:number, :cryptogram, :google_transaction_id, :expiration_month, :expiration_year, :source_card_type, :source_card_last_four, :eci_indicator]},
|
107
|
+
{:installments => [:count]},
|
108
|
+
])
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -147,6 +147,48 @@ describe Braintree::Transaction do
|
|
147
147
|
transaction.credit_card_details.issuing_bank.should == "Mr Tumnus"
|
148
148
|
end
|
149
149
|
|
150
|
+
it "sets up network token attributes in network_token_details" do
|
151
|
+
transaction = Braintree::Transaction._new(
|
152
|
+
:gateway,
|
153
|
+
:network_token => {
|
154
|
+
:token => "mzg2",
|
155
|
+
:bin => "411111",
|
156
|
+
:last_4 => "1111",
|
157
|
+
:card_type => "Visa",
|
158
|
+
:expiration_month => "08",
|
159
|
+
:expiration_year => "2009",
|
160
|
+
:customer_location => "US",
|
161
|
+
:prepaid => "Yes",
|
162
|
+
:healthcare => "Yes",
|
163
|
+
:durbin_regulated => "Yes",
|
164
|
+
:debit => "Yes",
|
165
|
+
:commercial => "No",
|
166
|
+
:payroll => "Unknown",
|
167
|
+
:product_id => "Unknown",
|
168
|
+
:country_of_issuance => "Narnia",
|
169
|
+
:issuing_bank => "Mr Tumnus",
|
170
|
+
:is_network_tokenized => true
|
171
|
+
},
|
172
|
+
)
|
173
|
+
transaction.network_token_details.token.should == "mzg2"
|
174
|
+
transaction.network_token_details.bin.should == "411111"
|
175
|
+
transaction.network_token_details.last_4.should == "1111"
|
176
|
+
transaction.network_token_details.card_type.should == "Visa"
|
177
|
+
transaction.network_token_details.expiration_month.should == "08"
|
178
|
+
transaction.network_token_details.expiration_year.should == "2009"
|
179
|
+
transaction.network_token_details.customer_location.should == "US"
|
180
|
+
transaction.network_token_details.prepaid.should == Braintree::CreditCard::Prepaid::Yes
|
181
|
+
transaction.network_token_details.healthcare.should == Braintree::CreditCard::Healthcare::Yes
|
182
|
+
transaction.network_token_details.durbin_regulated.should == Braintree::CreditCard::DurbinRegulated::Yes
|
183
|
+
transaction.network_token_details.debit.should == Braintree::CreditCard::Debit::Yes
|
184
|
+
transaction.network_token_details.commercial.should == Braintree::CreditCard::Commercial::No
|
185
|
+
transaction.network_token_details.payroll.should == Braintree::CreditCard::Payroll::Unknown
|
186
|
+
transaction.network_token_details.product_id.should == Braintree::CreditCard::ProductId::Unknown
|
187
|
+
transaction.network_token_details.country_of_issuance.should == "Narnia"
|
188
|
+
transaction.network_token_details.issuing_bank.should == "Mr Tumnus"
|
189
|
+
transaction.network_token_details.is_network_tokenized?.should == true
|
190
|
+
end
|
191
|
+
|
150
192
|
it "sets up three_d_secure_info" do
|
151
193
|
transaction = Braintree::Transaction._new(
|
152
194
|
:gateway,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: braintree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Braintree
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|
@@ -277,6 +277,7 @@ files:
|
|
277
277
|
- spec/unit/braintree/configuration_spec.rb
|
278
278
|
- spec/unit/braintree/credentials_parser_spec.rb
|
279
279
|
- spec/unit/braintree/credit_card_spec.rb
|
280
|
+
- spec/unit/braintree/credit_card_verification_gateway_spec.rb
|
280
281
|
- spec/unit/braintree/credit_card_verification_search_spec.rb
|
281
282
|
- spec/unit/braintree/credit_card_verification_spec.rb
|
282
283
|
- spec/unit/braintree/customer_spec.rb
|
@@ -322,6 +323,7 @@ files:
|
|
322
323
|
- spec/unit/braintree/transaction/installment_spec.rb
|
323
324
|
- spec/unit/braintree/transaction/paypal_details_spec.rb
|
324
325
|
- spec/unit/braintree/transaction/sepa_direct_debit_account_details_spec.rb
|
326
|
+
- spec/unit/braintree/transaction_gateway_spec.rb
|
325
327
|
- spec/unit/braintree/transaction_search_spec.rb
|
326
328
|
- spec/unit/braintree/transaction_spec.rb
|
327
329
|
- spec/unit/braintree/unknown_payment_method_spec.rb
|
@@ -362,7 +364,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
362
364
|
- !ruby/object:Gem::Version
|
363
365
|
version: '0'
|
364
366
|
requirements: []
|
365
|
-
rubygems_version: 3.4.
|
367
|
+
rubygems_version: 3.4.10
|
366
368
|
signing_key:
|
367
369
|
specification_version: 4
|
368
370
|
summary: Braintree Ruby Server SDK
|