braintree 4.9.0 → 4.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/lib/braintree/apple_pay_card.rb +2 -0
  3. data/lib/braintree/credit_card_verification_gateway.rb +18 -5
  4. data/lib/braintree/customer.rb +4 -1
  5. data/lib/braintree/dispute.rb +9 -0
  6. data/lib/braintree/dispute_search.rb +1 -0
  7. data/lib/braintree/error_codes.rb +7 -0
  8. data/lib/braintree/gateway.rb +4 -0
  9. data/lib/braintree/payment_instrument_type.rb +7 -6
  10. data/lib/braintree/payment_method_gateway.rb +2 -0
  11. data/lib/braintree/payment_method_nonce_details.rb +3 -0
  12. data/lib/braintree/payment_method_parser.rb +2 -0
  13. data/lib/braintree/sepa_direct_debit_account.rb +60 -0
  14. data/lib/braintree/sepa_direct_debit_account_gateway.rb +25 -0
  15. data/lib/braintree/sepa_direct_debit_account_nonce_details.rb +28 -0
  16. data/lib/braintree/test/nonce.rb +2 -0
  17. data/lib/braintree/transaction/credit_card_details.rb +4 -0
  18. data/lib/braintree/transaction/sepa_direct_debit_account_details.rb +27 -0
  19. data/lib/braintree/transaction.rb +6 -0
  20. data/lib/braintree/transaction_gateway.rb +1 -1
  21. data/lib/braintree/transaction_search.rb +1 -0
  22. data/lib/braintree/version.rb +1 -1
  23. data/lib/braintree/webhook_notification.rb +1 -0
  24. data/lib/braintree/webhook_testing_gateway.rb +76 -0
  25. data/lib/braintree.rb +4 -0
  26. data/spec/integration/braintree/credit_card_spec.rb +0 -60
  27. data/spec/integration/braintree/credit_card_verification_spec.rb +124 -1
  28. data/spec/integration/braintree/customer_spec.rb +1 -32
  29. data/spec/integration/braintree/dispute_search_spec.rb +28 -19
  30. data/spec/integration/braintree/dispute_spec.rb +27 -0
  31. data/spec/integration/braintree/http_spec.rb +1 -1
  32. data/spec/integration/braintree/paypal_account_spec.rb +2 -2
  33. data/spec/integration/braintree/sepa_direct_debit_account_spec.rb +196 -0
  34. data/spec/integration/braintree/subscription_spec.rb +1 -1
  35. data/spec/integration/braintree/transaction_search_spec.rb +34 -2
  36. data/spec/integration/braintree/transaction_spec.rb +107 -101
  37. data/spec/integration/spec_helper.rb +6 -0
  38. data/spec/unit/braintree/apple_pay_card_spec.rb +99 -11
  39. data/spec/unit/braintree/credit_card_verification_gateway_spec.rb +51 -0
  40. data/spec/unit/braintree/customer_spec.rb +11 -1
  41. data/spec/unit/braintree/dispute_search_spec.rb +1 -0
  42. data/spec/unit/braintree/dispute_spec.rb +8 -0
  43. data/spec/unit/braintree/payment_method_nonce_details_spec.rb +9 -1
  44. data/spec/unit/braintree/sepa_debit_account_nonce_details_spec.rb +29 -0
  45. data/spec/unit/braintree/sepa_debit_account_spec.rb +86 -0
  46. data/spec/unit/braintree/transaction/credit_card_details_spec.rb +16 -0
  47. data/spec/unit/braintree/transaction/deposit_details_spec.rb +1 -1
  48. data/spec/unit/braintree/transaction/sepa_direct_debit_account_details_spec.rb +33 -0
  49. data/spec/unit/braintree/transaction_gateway_spec.rb +111 -0
  50. data/spec/unit/braintree/transaction_spec.rb +72 -0
  51. data/spec/unit/braintree/webhook_notification_spec.rb +16 -0
  52. metadata +13 -3
@@ -1001,6 +1001,27 @@ describe Braintree::Transaction do
1001
1001
  result.success?.should == false
1002
1002
  result.transaction.gateway_rejection_reason.should == Braintree::Transaction::GatewayRejectionReason::TokenIssuance
1003
1003
  end
1004
+
1005
+ xit "exposes the excessive_retry gateway rejection reason" do
1006
+ with_duplicate_checking_merchant do
1007
+ result = nil
1008
+ counter = 0
1009
+ excessive_retry = false
1010
+ until excessive_retry || counter == 20
1011
+ result = Braintree::Transaction.sale(
1012
+ :amount => Braintree::Test::TransactionAmounts::Decline,
1013
+ :credit_card => {
1014
+ :number => Braintree::Test::CreditCardNumbers::Visa,
1015
+ :expiration_month => "05",
1016
+ :expiration_year => "2011"
1017
+ },
1018
+ )
1019
+ excessive_retry = result.transaction.status == "gateway_rejected"
1020
+ counter +=1
1021
+ end
1022
+ expect(result.transaction.gateway_rejection_reason). to eq(Braintree::Transaction::GatewayRejectionReason::ExcessiveRetry)
1023
+ end
1024
+ end
1004
1025
  end
1005
1026
 
1006
1027
  it "accepts credit card expiration month and expiration year" do
@@ -1486,6 +1507,32 @@ describe Braintree::Transaction do
1486
1507
  result.transaction.recurring.should == true
1487
1508
  end
1488
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
+
1489
1536
  it "marks a transactions as merchant" do
1490
1537
  result = Braintree::Transaction.create(
1491
1538
  :type => "sale",
@@ -1710,35 +1757,6 @@ describe Braintree::Transaction do
1710
1757
  end
1711
1758
  end
1712
1759
 
1713
- describe "venmo_sdk" do
1714
- it "can create a card with a venmo sdk payment method code" do
1715
- result = Braintree::Transaction.create(
1716
- :type => "sale",
1717
- :amount => Braintree::Test::TransactionAmounts::Authorize,
1718
- :venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK::VisaPaymentMethodCode,
1719
- )
1720
- result.success?.should == true
1721
- result.transaction.credit_card_details.bin.should == "400934"
1722
- result.transaction.credit_card_details.last_4.should == "1881"
1723
- end
1724
-
1725
- it "can create a transaction with venmo sdk session" do
1726
- result = Braintree::Transaction.create(
1727
- :type => "sale",
1728
- :amount => Braintree::Test::TransactionAmounts::Authorize,
1729
- :credit_card => {
1730
- :number => Braintree::Test::CreditCardNumbers::Visa,
1731
- :expiration_date => "12/12",
1732
- },
1733
- :options => {
1734
- :venmo_sdk_session => Braintree::Test::VenmoSDK::Session
1735
- },
1736
- )
1737
- result.success?.should == true
1738
- result.transaction.credit_card_details.venmo_sdk?.should == false
1739
- end
1740
- end
1741
-
1742
1760
  context "client API" do
1743
1761
  it "can create a transaction with a shared card nonce" do
1744
1762
  nonce = nonce_for_new_payment_method(
@@ -2687,7 +2705,7 @@ describe Braintree::Transaction do
2687
2705
  it "can create a transaction" do
2688
2706
  payment_method_result = Braintree::PaymentMethod.create(
2689
2707
  :customer_id => Braintree::Customer.create.customer.id,
2690
- :payment_method_nonce => Braintree::Test::Nonce::PayPalFuturePayment,
2708
+ :payment_method_nonce => Braintree::Test::Nonce::PayPalBillingAgreement,
2691
2709
  )
2692
2710
  result = Braintree::Transaction.create(
2693
2711
  :type => "sale",
@@ -4334,7 +4352,7 @@ describe Braintree::Transaction do
4334
4352
  it "returns a validation error if used with an unsupported instrument type" do
4335
4353
  customer = Braintree::Customer.create!
4336
4354
  result = Braintree::PaymentMethod.create(
4337
- :payment_method_nonce => Braintree::Test::Nonce::PayPalFuturePayment,
4355
+ :payment_method_nonce => Braintree::Test::Nonce::PayPalBillingAgreement,
4338
4356
  :customer_id => customer.id,
4339
4357
  )
4340
4358
  payment_method_token = result.payment_method.token
@@ -5208,7 +5226,50 @@ describe Braintree::Transaction do
5208
5226
  end
5209
5227
  end
5210
5228
 
5211
- context "Amex Pay with Points" do
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
+
5272
+ xit "Amex Pay with Points" do
5212
5273
  context "transaction creation" do
5213
5274
  it "succeeds when submit_for_settlement is true" do
5214
5275
  result = Braintree::Transaction.sale(
@@ -5517,7 +5578,7 @@ describe Braintree::Transaction do
5517
5578
  end
5518
5579
  end
5519
5580
 
5520
- it "succeeds when level 2 data is provided" do
5581
+ xit "succeeds when level 2 data is provided" do
5521
5582
  result = Braintree::Transaction.sale(
5522
5583
  :amount => Braintree::Test::TransactionAmounts::Authorize,
5523
5584
  :merchant_account_id => SpecHelper::FakeAmexDirectMerchantAccountId,
@@ -5541,7 +5602,7 @@ describe Braintree::Transaction do
5541
5602
  result.transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
5542
5603
  end
5543
5604
 
5544
- it "succeeds when level 3 data is provided" do
5605
+ xit "succeeds when level 3 data is provided" do
5545
5606
  result = Braintree::Transaction.sale(
5546
5607
  :amount => Braintree::Test::TransactionAmounts::Authorize,
5547
5608
  :merchant_account_id => SpecHelper::FakeAmexDirectMerchantAccountId,
@@ -6323,23 +6384,23 @@ describe Braintree::Transaction do
6323
6384
  expect(transaction.three_d_secure_info.authentication).to have_key(:trans_status_reason)
6324
6385
  expect(transaction.three_d_secure_info.lookup).to have_key(:trans_status)
6325
6386
  expect(transaction.three_d_secure_info.lookup).to have_key(:trans_status_reason)
6326
- transaction.three_d_secure_info.cavv.should == "somebase64value"
6327
- transaction.three_d_secure_info.ds_transaction_id.should == "dstxnid"
6328
- transaction.three_d_secure_info.eci_flag.should == "07"
6329
- transaction.three_d_secure_info.enrolled.should == "Y"
6330
- transaction.three_d_secure_info.pares_status.should == "Y"
6331
- transaction.three_d_secure_info.should be_liability_shift_possible
6332
- transaction.three_d_secure_info.should be_liability_shifted
6333
- transaction.three_d_secure_info.status.should == "authenticate_successful"
6387
+ expect(transaction.three_d_secure_info.cavv).to eq("somebase64value")
6388
+ expect(transaction.three_d_secure_info.ds_transaction_id).to eq("dstxnid")
6389
+ expect(transaction.three_d_secure_info.eci_flag).to eq("07")
6390
+ expect(transaction.three_d_secure_info.enrolled).to eq("Y")
6391
+ expect(transaction.three_d_secure_info.pares_status).to eq("Y")
6392
+ expect(transaction.three_d_secure_info).to be_liability_shift_possible
6393
+ expect(transaction.three_d_secure_info).to be_liability_shifted
6394
+ expect(transaction.three_d_secure_info.status).to eq("authenticate_successful")
6334
6395
  expect(transaction.three_d_secure_info.three_d_secure_authentication_id).to be
6335
- transaction.three_d_secure_info.three_d_secure_version.should == "1.0.2"
6336
- transaction.three_d_secure_info.xid.should == "xidvalue"
6396
+ expect(transaction.three_d_secure_info.three_d_secure_version).not_to be_nil
6397
+ expect(transaction.three_d_secure_info.xid).to eq("xidvalue")
6337
6398
  end
6338
6399
 
6339
6400
  it "is nil if the transaction wasn't 3d secured" do
6340
6401
  transaction = Braintree::Transaction.find("settledtransaction")
6341
6402
 
6342
- transaction.three_d_secure_info.should be_nil
6403
+ expect(transaction.three_d_secure_info).to be_nil
6343
6404
  end
6344
6405
  end
6345
6406
 
@@ -6650,61 +6711,6 @@ describe Braintree::Transaction do
6650
6711
  Braintree::Transaction.find(transaction.id)
6651
6712
  end
6652
6713
 
6653
- context "venmo sdk" do
6654
- describe "venmo_sdk_payment_method_code" do
6655
- it "can create a transaction with venmo_sdk_payment_method_code" do
6656
- result = Braintree::Transaction.sale(
6657
- :amount => "10.00",
6658
- :venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK.generate_test_payment_method_code(Braintree::Test::CreditCardNumbers::Visa),
6659
- )
6660
- result.success?.should == true
6661
- result.transaction.credit_card_details.venmo_sdk?.should == false
6662
- end
6663
-
6664
- it "errors when an invalid payment method code is passed" do
6665
- result = Braintree::Transaction.sale(
6666
- :amount => "10.00",
6667
- :venmo_sdk_payment_method_code => Braintree::Test::VenmoSDK::InvalidPaymentMethodCode,
6668
- )
6669
- result.success?.should == false
6670
- result.message.should include("Invalid VenmoSDK payment method code")
6671
- result.errors.map(&:code).should include("91727")
6672
- end
6673
- end
6674
-
6675
- describe "venmo_sdk_session" do
6676
- it "can create a transaction and vault a card when a venmo_sdk_session is present" do
6677
- result = Braintree::Transaction.sale(
6678
- :amount => "10.00",
6679
- :credit_card => {
6680
- :number => Braintree::Test::CreditCardNumbers::Visa,
6681
- :expiration_date => "05/2009"
6682
- },
6683
- :options => {
6684
- :venmo_sdk_session => Braintree::Test::VenmoSDK::Session
6685
- },
6686
- )
6687
- result.success?.should == true
6688
- result.transaction.credit_card_details.venmo_sdk?.should == false
6689
- end
6690
-
6691
- it "venmo_sdk boolean is false when an invalid session is passed" do
6692
- result = Braintree::Transaction.sale(
6693
- :amount => "10.00",
6694
- :credit_card => {
6695
- :number => Braintree::Test::CreditCardNumbers::Visa,
6696
- :expiration_date => "05/2009"
6697
- },
6698
- :options => {
6699
- :venmo_sdk_session => Braintree::Test::VenmoSDK::InvalidSession
6700
- },
6701
- )
6702
- result.success?.should == true
6703
- result.transaction.credit_card_details.venmo_sdk?.should == false
6704
- end
6705
- end
6706
- end
6707
-
6708
6714
  context "paypal" do
6709
6715
  it "can create a transaction for a paypal account" do
6710
6716
  result = Braintree::Transaction.sale(
@@ -7215,7 +7221,7 @@ describe Braintree::Transaction do
7215
7221
  end
7216
7222
 
7217
7223
  it "returns failure, when transaction authorization type final or undefined" do
7218
- additional_params = {:transaction_source => "recurring_first"}
7224
+ additional_params = {:transaction_source => "recurring"}
7219
7225
  initial_transaction = Braintree::Transaction.sale(first_data_master_transaction_params.merge(additional_params))
7220
7226
  expect(initial_transaction.success?).to eq(true)
7221
7227
 
@@ -67,4 +67,10 @@ unless defined?(INTEGRATION_SPEC_HELPER_LOADED)
67
67
  def random_payment_method_token
68
68
  "payment-method-token-#{SecureRandom.hex(6)}"
69
69
  end
70
+
71
+ def with_duplicate_checking_merchant(&block)
72
+ with_other_merchant("dup_checking_integration_merchant_id", "dup_checking_integration_public_key", "dup_checking_integration_private_key") do
73
+ block.call
74
+ end
75
+ end
70
76
  end
@@ -1,35 +1,123 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
2
 
3
3
  describe Braintree::ApplePayCard do
4
- describe "bin" do
5
- it "returns Apple pay card bin" do
6
- Braintree::ApplePayCard._new(:gateway, bin: "411111").bin.should == "411111"
7
- end
4
+ let(:attributes) do
5
+ {
6
+ :billing_address => {
7
+ company: "Braintree",
8
+ country_code_alpha2: "US",
9
+ country_code_alpha3: "USA",
10
+ country_code_numeric: "840",
11
+ country_name: "United States of America",
12
+ extended_address: "Apt 1",
13
+ first_name: "John",
14
+ last_name: "Miller",
15
+ locality: "Chicago",
16
+ phone_number: "17708675309",
17
+ postal_code: "12345",
18
+ region: "Illinois",
19
+ street_address: "123 Sesame Street",
20
+ },
21
+ :bin => "411111",
22
+ :card_type => "Apple Pay - MasterCard",
23
+ :cardholder_name => "John Miller",
24
+ :commercial => "No",
25
+ :country_of_issuance => "USA",
26
+ :created_at => Time.now,
27
+ :customer_id => "cid1",
28
+ :debit => "No",
29
+ :default => true,
30
+ :durbin_regulated => "Yes",
31
+ :expiration_month => "01",
32
+ :expiration_year => "2025",
33
+ :expired => false,
34
+ :healthcare => "No",
35
+ :image_url => nil,
36
+ :issuing_bank => "Big Bad Bank",
37
+ :last_4 => "9876",
38
+ :payment_instrument_name => nil,
39
+ :payroll => "No",
40
+ :prepaid => "No",
41
+ :product_id => "MAC",
42
+ :source_description => "blah",
43
+ :subscriptions => [
44
+ {
45
+ balance: "50.00",
46
+ price: "10.00",
47
+ descriptor: [],
48
+ transactions: [],
49
+ add_ons: [],
50
+ discounts: [],
51
+ },
52
+ ],
53
+ :token => "123456789",
54
+ :updated_at => Time.now,
55
+ }
8
56
  end
9
57
 
10
- describe "cardholder_name" do
11
- it "returns Apple pay card cardholder name" do
12
- Braintree::ApplePayCard._new(:gateway, cardholder_name: "John Miller").cardholder_name.should == "John Miller"
58
+ describe "initialize" do
59
+ it "converts billing address hash to Braintree::Address object" do
60
+ card = Braintree::ApplePayCard._new(:gateway, attributes)
61
+
62
+ expect(card.billing_address).to be_instance_of(Braintree::Address)
63
+ end
64
+
65
+ it "converts subscriptions hash to Braintree::Subscription object" do
66
+ card = Braintree::ApplePayCard._new(:gateway, attributes)
67
+
68
+ expect(card.subscriptions[0]).to be_instance_of(Braintree::Subscription)
69
+ end
70
+
71
+ it "handles nil billing address" do
72
+ attributes.delete(:billing_address)
73
+ card = Braintree::ApplePayCard._new(:gateway, attributes)
74
+
75
+ expect(card.billing_address).to be_nil
76
+ end
77
+
78
+ it "handles nil subscriptions" do
79
+ attributes.delete(:subscriptions)
80
+ card = Braintree::ApplePayCard._new(:gateway, attributes)
81
+
82
+ expect(card.subscriptions).to be_empty
13
83
  end
14
84
  end
15
85
 
16
86
  describe "default?" do
17
87
  it "is true if the Apple pay card is the default payment method for the customer" do
18
- Braintree::ApplePayCard._new(:gateway, :default => true).default?.should == true
88
+ card = Braintree::ApplePayCard._new(:gateway, attributes)
89
+
90
+ expect(card.default?).to be true
19
91
  end
20
92
 
21
93
  it "is false if the Apple pay card is not the default payment methodfor the customer" do
22
- Braintree::ApplePayCard._new(:gateway, :default => false).default?.should == false
94
+ attributes.merge!(:default => false)
95
+ card = Braintree::ApplePayCard._new(:gateway, attributes)
96
+
97
+ expect(card.default?).to be false
23
98
  end
24
99
  end
25
100
 
26
101
  describe "expired?" do
27
102
  it "is true if the Apple pay card is expired" do
28
- Braintree::ApplePayCard._new(:gateway, :expired => true).expired?.should == true
103
+ attributes.merge!(:expired => true)
104
+ card = Braintree::ApplePayCard._new(:gateway, attributes)
105
+
106
+ expect(card.expired?).to be true
29
107
  end
30
108
 
31
109
  it "is false if the Apple pay card is not expired" do
32
- Braintree::ApplePayCard._new(:gateway, :expired => false).expired?.should == false
110
+ card = Braintree::ApplePayCard._new(:gateway, attributes)
111
+
112
+ expect(card.expired?).to be false
113
+ end
114
+ end
115
+
116
+ describe "self.new" do
117
+ it "is protected" do
118
+ expect do
119
+ Braintree::ApplePayCard.new
120
+ end.to raise_error(NoMethodError, /protected method .new/)
33
121
  end
34
122
  end
35
123
  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
@@ -301,6 +301,10 @@ describe Braintree::Customer do
301
301
  {:token => "paypal_1"},
302
302
  {:token => "paypal_2"}
303
303
  ],
304
+ :sepa_debit_accounts => [
305
+ {:token => "sepa_debit_1"},
306
+ {:token => "sepa_debit_2"}
307
+ ],
304
308
  )
305
309
 
306
310
  customer.credit_cards.size.should == 2
@@ -311,11 +315,17 @@ describe Braintree::Customer do
311
315
  customer.paypal_accounts[0].token.should == "paypal_1"
312
316
  customer.paypal_accounts[1].token.should == "paypal_2"
313
317
 
314
- customer.payment_methods.count.should == 4
318
+ customer.sepa_direct_debit_accounts.size.should == 2
319
+ customer.sepa_direct_debit_accounts[0].token.should == "sepa_debit_1"
320
+ customer.sepa_direct_debit_accounts[1].token.should == "sepa_debit_2"
321
+
322
+ customer.payment_methods.count.should == 6
315
323
  customer.payment_methods.map(&:token).should include("credit_card_1")
316
324
  customer.payment_methods.map(&:token).should include("credit_card_2")
317
325
  customer.payment_methods.map(&:token).should include("paypal_1")
318
326
  customer.payment_methods.map(&:token).should include("paypal_2")
327
+ customer.payment_methods.map(&:token).should include("sepa_debit_1")
328
+ customer.payment_methods.map(&:token).should include("sepa_debit_2")
319
329
  end
320
330
  end
321
331
 
@@ -47,6 +47,7 @@ describe Braintree::DisputeSearch do
47
47
  :kind,
48
48
  :reason,
49
49
  :status,
50
+ :pre_dispute_program,
50
51
  ].each do |field|
51
52
  it "raises if provided an unknown #{field} value" do
52
53
  search = Braintree::DisputeSearch.new
@@ -16,6 +16,7 @@ describe Braintree::Dispute do
16
16
  :received_date => "2009-03-09",
17
17
  :reply_by_date => nil,
18
18
  :updated_at => Time.utc(2009, 3, 9, 10, 50, 39),
19
+ :pre_dispute_program => Braintree::Dispute::PreDisputeProgram::None,
19
20
  :evidence => [
20
21
  {
21
22
  comment: nil,
@@ -428,6 +429,13 @@ describe Braintree::Dispute do
428
429
  dispute.date_opened.should == Date.new(2009, 3, 9)
429
430
  dispute.date_won.should == Date.new(2009, 4, 15)
430
431
  end
432
+
433
+ it "returns pre_dispute_program value" do
434
+ attributes.merge!(:pre_dispute_program => Braintree::Dispute::PreDisputeProgram::VisaRdr)
435
+ dispute = Braintree::Dispute._new(attributes)
436
+
437
+ expect(dispute.pre_dispute_program).to eq(Braintree::Dispute::PreDisputeProgram::VisaRdr)
438
+ end
431
439
  end
432
440
 
433
441
  describe "==" do
@@ -3,12 +3,16 @@ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
3
3
  describe Braintree::PaymentMethodNonceDetails do
4
4
  let(:payment_method_nonce_details) {
5
5
  Braintree::PaymentMethodNonceDetails.new(
6
+ :bank_reference_token => "a-bank-reference-token",
6
7
  :bin => "bin",
7
8
  :card_type => "American Express",
8
9
  :expiration_month => "12",
9
10
  :expiration_year => "2025",
10
11
  :is_network_tokenized => true,
12
+ :last_4 => "abcd",
11
13
  :last_two => "11",
14
+ :mandate_type => "ONE_OFF",
15
+ :merchant_or_partner_customer_id => "a-mp-customer-id",
12
16
  :payer_info => {
13
17
  :billing_agreement_id => "1234",
14
18
  :country_code => "US",
@@ -26,12 +30,16 @@ describe Braintree::PaymentMethodNonceDetails do
26
30
  payment_method_nonce_details.last_two.should == "11"
27
31
  payment_method_nonce_details.payer_info.billing_agreement_id.should == "1234"
28
32
  payment_method_nonce_details.payer_info.country_code.should == "US"
33
+ payment_method_nonce_details.sepa_direct_debit_account_nonce_details.bank_reference_token.should == "a-bank-reference-token"
34
+ payment_method_nonce_details.sepa_direct_debit_account_nonce_details.last_4.should == "abcd"
35
+ payment_method_nonce_details.sepa_direct_debit_account_nonce_details.mandate_type.should == "ONE_OFF"
36
+ payment_method_nonce_details.sepa_direct_debit_account_nonce_details.merchant_or_partner_customer_id.should == "a-mp-customer-id"
29
37
  end
30
38
  end
31
39
 
32
40
  describe "inspect" do
33
41
  it "prints the attributes" do
34
- payment_method_nonce_details.inspect.should == %(#<PaymentMethodNonceDetails bin: "bin", card_type: "American Express", expiration_month: "12", expiration_year: "2025", is_network_tokenized: true, last_two: "11", payer_info: #<PaymentMethodNonceDetailsPayerInfo billing_agreement_id: "1234", country_code: "US", email: nil, first_name: nil, last_name: nil, payer_id: nil>>)
42
+ payment_method_nonce_details.inspect.should == %(#<PaymentMethodNonceDetails bin: "bin", card_type: "American Express", expiration_month: "12", expiration_year: "2025", is_network_tokenized: true, last_two: "11", payer_info: #<PaymentMethodNonceDetailsPayerInfo billing_agreement_id: "1234", country_code: "US", email: nil, first_name: nil, last_name: nil, payer_id: nil>, sepa_direct_debit_account_nonce_details: #<SepaDirectDebitAccountNonceDetailsbank_reference_token: "a-bank-reference-token", last_4: "abcd", mandate_type: "ONE_OFF", merchant_or_partner_customer_id: "a-mp-customer-id">>)
35
43
  end
36
44
  end
37
45
 
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Braintree::SepaDirectDebitAccountNonceDetails do
4
+ subject do
5
+ described_class.new(
6
+ :bank_reference_token => "a-bank-reference-token",
7
+ :last_4 => "abcd",
8
+ :mandate_type => "ONE_OFF",
9
+ :merchant_or_partner_customer_id => "a-mp-customer-id",
10
+ )
11
+ end
12
+
13
+ describe "#initialize" do
14
+ it "sets attributes" do
15
+ is_expected.to have_attributes(
16
+ :bank_reference_token => "a-bank-reference-token",
17
+ :last_4 => "abcd",
18
+ :mandate_type => "ONE_OFF",
19
+ :merchant_or_partner_customer_id => "a-mp-customer-id",
20
+ )
21
+ end
22
+ end
23
+
24
+ describe "inspect" do
25
+ it "prints the attributes" do
26
+ subject.inspect.should == %(#<SepaDirectDebitAccountNonceDetailsbank_reference_token: "a-bank-reference-token", last_4: "abcd", mandate_type: "ONE_OFF", merchant_or_partner_customer_id: "a-mp-customer-id">)
27
+ end
28
+ end
29
+ end