braintree 4.10.0 → 4.12.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/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 +4 -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 +1 -32
- 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 +91 -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 +52 -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: bfe8849002c4dbacd2476b61311adc19f0939a2c42bb61ccf2ca797d59248054
|
4
|
+
data.tar.gz: 7f97e328fdd729365a0117bc8297edac4e12e8e383e8c7b10b06f74862bd8e34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20e3ed69efa6b094974b3461165a3197958df6e62be5f9952d676d14c7411bdae5c2169b2f0e86eab743a94475f436baf3b907ff1dab4a45e984eafa741e3356
|
7
|
+
data.tar.gz: b7e5bcbe3a4c57e6aa2a60016e93b0adff02b9dd51601370d94f08d56307e319b19381274e032eb8bd80fffa4ecf5a8c601c3da9e17e38526a8860d981a7d471
|
@@ -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
|
|
@@ -127,8 +127,11 @@ module Braintree
|
|
127
127
|
attr_reader :installments
|
128
128
|
attr_reader :local_payment_details
|
129
129
|
attr_reader :merchant_account_id
|
130
|
+
attr_reader :merchant_advice_code
|
131
|
+
attr_reader :merchant_advice_code_text
|
130
132
|
attr_reader :network_response_code # Response code from the card network
|
131
133
|
attr_reader :network_response_text # Response text from the card network
|
134
|
+
attr_reader :network_token_details
|
132
135
|
attr_reader :network_transaction_id
|
133
136
|
attr_reader :order_id
|
134
137
|
attr_reader :partial_settlement_transaction_ids
|
@@ -299,6 +302,7 @@ module Braintree
|
|
299
302
|
@apple_pay_details = ApplePayDetails.new(@apple_pay)
|
300
303
|
@billing_details = AddressDetails.new(@billing)
|
301
304
|
@credit_card_details = CreditCardDetails.new(@credit_card)
|
305
|
+
@network_token_details = CreditCardDetails.new(@network_token)
|
302
306
|
@custom_fields = attributes[:custom_fields].is_a?(Hash) ? attributes[:custom_fields] : {}
|
303
307
|
@customer_details = CustomerDetails.new(@customer)
|
304
308
|
@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(
|
@@ -1097,7 +1066,7 @@ describe Braintree::Customer do
|
|
1097
1066
|
venmo_account.username.should_not be_nil
|
1098
1067
|
end
|
1099
1068
|
|
1100
|
-
|
1069
|
+
xit "returns associated us bank accounts" do
|
1101
1070
|
result = Braintree::Customer.create(
|
1102
1071
|
:payment_method_nonce => generate_non_plaid_us_bank_account_nonce,
|
1103
1072
|
:credit_card => {
|
@@ -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(
|
@@ -7273,4 +7261,19 @@ describe Braintree::Transaction do
|
|
7273
7261
|
end
|
7274
7262
|
end
|
7275
7263
|
end
|
7264
|
+
|
7265
|
+
context "Merchant Advice Code" do
|
7266
|
+
it "exposes MAC and MAC text" do
|
7267
|
+
result = Braintree::Transaction.create(
|
7268
|
+
:type => "sale",
|
7269
|
+
:amount => Braintree::Test::TransactionAmounts::Decline,
|
7270
|
+
:credit_card => {
|
7271
|
+
:number => Braintree::Test::CreditCardNumbers::MasterCard,
|
7272
|
+
:expiration_date => DateTime.now.strftime("%m/%Y")
|
7273
|
+
},
|
7274
|
+
)
|
7275
|
+
expect(result.transaction.merchant_advice_code).to eq("01")
|
7276
|
+
expect(result.transaction.merchant_advice_code_text).to eq("New account information available")
|
7277
|
+
end
|
7278
|
+
end
|
7276
7279
|
end
|
@@ -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,
|
@@ -256,6 +298,16 @@ describe Braintree::Transaction do
|
|
256
298
|
expect(transaction.network_response_text).to eq("Successful approval/completion or V.I.P. PIN verification is successful")
|
257
299
|
end
|
258
300
|
|
301
|
+
it "accepts merchant_advice_code and merchant_advice_text" do
|
302
|
+
transaction = Braintree::Transaction._new(
|
303
|
+
:gateway,
|
304
|
+
:merchant_advice_code => "01",
|
305
|
+
:merchant_advice_code_text => "New account information available",
|
306
|
+
)
|
307
|
+
expect(transaction.merchant_advice_code).to eq("01")
|
308
|
+
expect(transaction.merchant_advice_code_text).to eq("New account information available")
|
309
|
+
end
|
310
|
+
|
259
311
|
it "accepts sepa_direct_debit_return_code" do
|
260
312
|
transaction = Braintree::Transaction._new(
|
261
313
|
: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.12.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-05-31 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.13
|
366
368
|
signing_key:
|
367
369
|
specification_version: 4
|
368
370
|
summary: Braintree Ruby Server SDK
|