braintree 4.9.0 → 4.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/braintree/apple_pay_card.rb +2 -0
- data/lib/braintree/customer.rb +4 -1
- data/lib/braintree/dispute.rb +9 -0
- data/lib/braintree/dispute_search.rb +1 -0
- data/lib/braintree/error_codes.rb +6 -0
- data/lib/braintree/gateway.rb +4 -0
- data/lib/braintree/payment_instrument_type.rb +7 -6
- data/lib/braintree/payment_method_gateway.rb +2 -0
- data/lib/braintree/payment_method_nonce_details.rb +3 -0
- data/lib/braintree/payment_method_parser.rb +2 -0
- data/lib/braintree/sepa_direct_debit_account.rb +58 -0
- data/lib/braintree/sepa_direct_debit_account_gateway.rb +25 -0
- data/lib/braintree/sepa_direct_debit_account_nonce_details.rb +28 -0
- data/lib/braintree/test/nonce.rb +2 -0
- data/lib/braintree/transaction/sepa_direct_debit_account_details.rb +27 -0
- data/lib/braintree/transaction.rb +4 -0
- data/lib/braintree/transaction_search.rb +1 -0
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/webhook_notification.rb +1 -0
- data/lib/braintree/webhook_testing_gateway.rb +76 -0
- data/lib/braintree.rb +4 -0
- data/spec/integration/braintree/customer_spec.rb +1 -1
- data/spec/integration/braintree/dispute_search_spec.rb +29 -5
- data/spec/integration/braintree/paypal_account_spec.rb +2 -2
- data/spec/integration/braintree/sepa_direct_debit_account_spec.rb +176 -0
- data/spec/integration/braintree/subscription_spec.rb +1 -1
- data/spec/integration/braintree/transaction_search_spec.rb +34 -2
- data/spec/integration/braintree/transaction_spec.rb +35 -17
- data/spec/integration/spec_helper.rb +6 -0
- data/spec/unit/braintree/apple_pay_card_spec.rb +99 -11
- data/spec/unit/braintree/customer_spec.rb +11 -1
- data/spec/unit/braintree/dispute_search_spec.rb +1 -0
- data/spec/unit/braintree/dispute_spec.rb +8 -0
- data/spec/unit/braintree/payment_method_nonce_details_spec.rb +9 -1
- data/spec/unit/braintree/sepa_debit_account_nonce_details_spec.rb +29 -0
- data/spec/unit/braintree/sepa_debit_account_spec.rb +85 -0
- data/spec/unit/braintree/transaction/deposit_details_spec.rb +1 -1
- data/spec/unit/braintree/transaction/sepa_direct_debit_account_details_spec.rb +33 -0
- data/spec/unit/braintree/transaction_spec.rb +30 -0
- data/spec/unit/braintree/webhook_notification_spec.rb +16 -0
- metadata +11 -3
@@ -0,0 +1,176 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Braintree::SepaDirectDebitAccount do
|
4
|
+
before do
|
5
|
+
Braintree::Configuration.merchant_id = "integration_merchant_id"
|
6
|
+
Braintree::Configuration.public_key = "integration_public_key"
|
7
|
+
Braintree::Configuration.private_key = "integration_private_key"
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:customer) { Braintree::Customer.create.customer }
|
11
|
+
let(:nonce) { Braintree::Test::Nonce::SepaDirectDebit }
|
12
|
+
|
13
|
+
let(:token) do
|
14
|
+
Braintree::PaymentMethod.create(
|
15
|
+
payment_method_nonce: nonce,
|
16
|
+
customer_id: customer.id,
|
17
|
+
).payment_method.token
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "self.find" do
|
21
|
+
subject do
|
22
|
+
described_class.find(token)
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when payment method exists" do
|
26
|
+
it "returns a payment method" do
|
27
|
+
sepa_direct_debit_account = subject
|
28
|
+
sepa_direct_debit_account.should be_a(Braintree::SepaDirectDebitAccount)
|
29
|
+
sepa_direct_debit_account.last_4.should == "1234"
|
30
|
+
sepa_direct_debit_account.default.should == true
|
31
|
+
sepa_direct_debit_account.customer_id.should == customer.id
|
32
|
+
sepa_direct_debit_account.global_id.should_not be_empty
|
33
|
+
sepa_direct_debit_account.customer_global_id.should_not be_empty
|
34
|
+
sepa_direct_debit_account.bank_reference_token.should == "a-fake-bank-reference-token"
|
35
|
+
sepa_direct_debit_account.mandate_type.should == "RECURRENT"
|
36
|
+
sepa_direct_debit_account.merchant_or_partner_customer_id.should == "a-fake-mp-customer-id"
|
37
|
+
sepa_direct_debit_account.token.should_not be_empty
|
38
|
+
sepa_direct_debit_account.image_url.should_not be_empty
|
39
|
+
sepa_direct_debit_account.created_at.should be_a Time
|
40
|
+
sepa_direct_debit_account.updated_at.should be_a Time
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "when payment method does not exist" do
|
45
|
+
let(:token) { "ABC123" }
|
46
|
+
|
47
|
+
it "raises an error" do
|
48
|
+
expect {
|
49
|
+
subject
|
50
|
+
}.to raise_error(Braintree::NotFoundError)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "self.delete" do
|
56
|
+
subject do
|
57
|
+
described_class.delete(token)
|
58
|
+
end
|
59
|
+
|
60
|
+
context "when payment method exists" do
|
61
|
+
it "deletes a payment method" do
|
62
|
+
should be_success
|
63
|
+
|
64
|
+
expect {
|
65
|
+
described_class.find(token)
|
66
|
+
}.to raise_error(Braintree::NotFoundError)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when payment method does not exist" do
|
71
|
+
let(:token) { "ABC123" }
|
72
|
+
|
73
|
+
it "raises an error" do
|
74
|
+
expect {
|
75
|
+
subject
|
76
|
+
}.to raise_error(Braintree::NotFoundError)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "self.sale" do
|
82
|
+
let(:params) do
|
83
|
+
{
|
84
|
+
amount: 1.23,
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
subject do
|
89
|
+
described_class.sale(token, params)
|
90
|
+
end
|
91
|
+
|
92
|
+
context "when payment method exists" do
|
93
|
+
it "creates a transaction" do
|
94
|
+
should be_success
|
95
|
+
|
96
|
+
transaction = subject.transaction
|
97
|
+
transaction.amount.should eq(1.23)
|
98
|
+
transaction.status.should == "settling"
|
99
|
+
sepa_direct_debit_account_details = transaction.sepa_direct_debit_account_details
|
100
|
+
sepa_direct_debit_account_details.should be_a(Braintree::Transaction::SepaDirectDebitAccountDetails)
|
101
|
+
sepa_direct_debit_account_details.bank_reference_token.should == "a-fake-bank-reference-token"
|
102
|
+
sepa_direct_debit_account_details.capture_id.should_not be_empty
|
103
|
+
sepa_direct_debit_account_details.debug_id.should be_nil
|
104
|
+
sepa_direct_debit_account_details.global_id.should_not be_empty
|
105
|
+
sepa_direct_debit_account_details.last_4.should == "1234"
|
106
|
+
sepa_direct_debit_account_details.mandate_type.should == "RECURRENT"
|
107
|
+
sepa_direct_debit_account_details.merchant_or_partner_customer_id.should == "a-fake-mp-customer-id"
|
108
|
+
sepa_direct_debit_account_details.paypal_v2_order_id.should be_nil
|
109
|
+
sepa_direct_debit_account_details.refund_from_transaction_fee_amount.should be_nil
|
110
|
+
sepa_direct_debit_account_details.refund_from_transaction_fee_currency_iso_code.should be_nil
|
111
|
+
sepa_direct_debit_account_details.refund_id.should be_nil
|
112
|
+
sepa_direct_debit_account_details.settlement_type.should be_nil
|
113
|
+
sepa_direct_debit_account_details.token.should == token
|
114
|
+
sepa_direct_debit_account_details.transaction_fee_amount.should == "0.01"
|
115
|
+
sepa_direct_debit_account_details.transaction_fee_currency_iso_code.should == "USD"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context "when payment method does not exist" do
|
120
|
+
let(:token) { "ABC123" }
|
121
|
+
|
122
|
+
it "not raises an error" do
|
123
|
+
expect {
|
124
|
+
subject
|
125
|
+
}.to_not raise_error
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "self.sale!" do
|
131
|
+
let(:params) do
|
132
|
+
{
|
133
|
+
amount: 1.23,
|
134
|
+
}
|
135
|
+
end
|
136
|
+
|
137
|
+
subject do
|
138
|
+
described_class.sale!(token, params)
|
139
|
+
end
|
140
|
+
|
141
|
+
context "when payment method exists" do
|
142
|
+
it "creates a transaction" do
|
143
|
+
transaction = subject
|
144
|
+
transaction.amount.should eq(1.23)
|
145
|
+
transaction.status.should == "settling"
|
146
|
+
sepa_direct_debit_account_details = transaction.sepa_direct_debit_account_details
|
147
|
+
sepa_direct_debit_account_details.should be_a(Braintree::Transaction::SepaDirectDebitAccountDetails)
|
148
|
+
sepa_direct_debit_account_details.bank_reference_token.should == "a-fake-bank-reference-token"
|
149
|
+
sepa_direct_debit_account_details.capture_id.should_not be_empty
|
150
|
+
sepa_direct_debit_account_details.debug_id.should be_nil
|
151
|
+
sepa_direct_debit_account_details.global_id.should_not be_empty
|
152
|
+
sepa_direct_debit_account_details.last_4.should == "1234"
|
153
|
+
sepa_direct_debit_account_details.mandate_type.should == "RECURRENT"
|
154
|
+
sepa_direct_debit_account_details.merchant_or_partner_customer_id.should == "a-fake-mp-customer-id"
|
155
|
+
sepa_direct_debit_account_details.paypal_v2_order_id.should be_nil
|
156
|
+
sepa_direct_debit_account_details.refund_from_transaction_fee_amount.should be_nil
|
157
|
+
sepa_direct_debit_account_details.refund_from_transaction_fee_currency_iso_code.should be_nil
|
158
|
+
sepa_direct_debit_account_details.refund_id.should be_nil
|
159
|
+
sepa_direct_debit_account_details.settlement_type.should be_nil
|
160
|
+
sepa_direct_debit_account_details.token.should == token
|
161
|
+
sepa_direct_debit_account_details.transaction_fee_amount.should == "0.01"
|
162
|
+
sepa_direct_debit_account_details.transaction_fee_currency_iso_code.should == "USD"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context "when payment method does not exist" do
|
167
|
+
let(:token) { "ABC123" }
|
168
|
+
|
169
|
+
it "not raises an error" do
|
170
|
+
expect {
|
171
|
+
subject
|
172
|
+
}.to raise_error(Braintree::ValidationsFailed)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
@@ -96,7 +96,7 @@ describe Braintree::Subscription do
|
|
96
96
|
it "creates a subscription when given a paypal account payment_method_nonce" do
|
97
97
|
customer = Braintree::Customer.create!
|
98
98
|
payment_method_result = Braintree::PaymentMethod.create(
|
99
|
-
:payment_method_nonce => Braintree::Test::Nonce::
|
99
|
+
:payment_method_nonce => Braintree::Test::Nonce::PayPalBillingAgreement,
|
100
100
|
:customer_id => customer.id,
|
101
101
|
)
|
102
102
|
|
@@ -133,7 +133,7 @@ describe Braintree::Transaction, "search" do
|
|
133
133
|
it "searches on users" do
|
134
134
|
transaction = Braintree::Transaction.sale!(
|
135
135
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
136
|
-
:payment_method_nonce => Braintree::Test::Nonce::
|
136
|
+
:payment_method_nonce => Braintree::Test::Nonce::PayPalBillingAgreement,
|
137
137
|
)
|
138
138
|
|
139
139
|
collection = Braintree::Transaction.search do |search|
|
@@ -146,7 +146,7 @@ describe Braintree::Transaction, "search" do
|
|
146
146
|
it "searches on paypal transactions" do
|
147
147
|
transaction = Braintree::Transaction.sale!(
|
148
148
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
149
|
-
:payment_method_nonce => Braintree::Test::Nonce::
|
149
|
+
:payment_method_nonce => Braintree::Test::Nonce::PayPalBillingAgreement,
|
150
150
|
)
|
151
151
|
|
152
152
|
paypal_details = transaction.paypal_details
|
@@ -396,6 +396,38 @@ describe Braintree::Transaction, "search" do
|
|
396
396
|
collection.first.payment_instrument_type.should == Braintree::PaymentInstrumentType::LocalPayment
|
397
397
|
end
|
398
398
|
|
399
|
+
it "searches by payment instrument type SepaDebitAccountDetail" do
|
400
|
+
transaction = Braintree::Transaction.sale!(
|
401
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
402
|
+
:payment_method_nonce => Braintree::Test::Nonce::SepaDirectDebit,
|
403
|
+
:options => {:submit_for_settlement => true},
|
404
|
+
)
|
405
|
+
|
406
|
+
collection = Braintree::Transaction.search do |search|
|
407
|
+
search.id.is transaction.id
|
408
|
+
search.payment_instrument_type.in ["SEPADebitAccountDetail"]
|
409
|
+
end
|
410
|
+
|
411
|
+
collection.first.id.should == transaction.id
|
412
|
+
collection.first.payment_instrument_type.should == Braintree::PaymentInstrumentType::SepaDirectDebitAccount
|
413
|
+
end
|
414
|
+
|
415
|
+
it "searches by paypal_v2_order_id" do
|
416
|
+
transaction = Braintree::Transaction.sale!(
|
417
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
418
|
+
:payment_method_nonce => Braintree::Test::Nonce::SepaDirectDebit,
|
419
|
+
:options => {:submit_for_settlement => true},
|
420
|
+
)
|
421
|
+
|
422
|
+
collection = Braintree::Transaction.search do |search|
|
423
|
+
search.id.is transaction.id
|
424
|
+
search.sepa_debit_paypal_v2_order_id.is transaction.sepa_direct_debit_account_details.paypal_v2_order_id
|
425
|
+
end
|
426
|
+
|
427
|
+
collection.first.id.should == transaction.id
|
428
|
+
collection.first.payment_instrument_type.should == Braintree::PaymentInstrumentType::SepaDirectDebitAccount
|
429
|
+
end
|
430
|
+
|
399
431
|
it "searches by payment instrument type ApplePay" do
|
400
432
|
transaction = Braintree::Transaction.sale!(
|
401
433
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
@@ -1001,6 +1001,24 @@ 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
|
+
it "exposes the excessive_retry gateway rejection reason" do
|
1006
|
+
with_duplicate_checking_merchant do
|
1007
|
+
result = nil
|
1008
|
+
16.times do
|
1009
|
+
result = Braintree::Transaction.sale(
|
1010
|
+
:amount => Braintree::Test::TransactionAmounts::Decline,
|
1011
|
+
:credit_card => {
|
1012
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1013
|
+
:expiration_month => "05",
|
1014
|
+
:expiration_year => "2011"
|
1015
|
+
},
|
1016
|
+
)
|
1017
|
+
end
|
1018
|
+
result.success?.should == false
|
1019
|
+
result.transaction.gateway_rejection_reason.should == Braintree::Transaction::GatewayRejectionReason::ExcessiveRetry
|
1020
|
+
end
|
1021
|
+
end
|
1004
1022
|
end
|
1005
1023
|
|
1006
1024
|
it "accepts credit card expiration month and expiration year" do
|
@@ -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::
|
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::
|
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,7 @@ describe Braintree::Transaction do
|
|
5208
5226
|
end
|
5209
5227
|
end
|
5210
5228
|
|
5211
|
-
|
5229
|
+
xit "Amex Pay with Points" do
|
5212
5230
|
context "transaction creation" do
|
5213
5231
|
it "succeeds when submit_for_settlement is true" do
|
5214
5232
|
result = Braintree::Transaction.sale(
|
@@ -5517,7 +5535,7 @@ describe Braintree::Transaction do
|
|
5517
5535
|
end
|
5518
5536
|
end
|
5519
5537
|
|
5520
|
-
|
5538
|
+
xit "succeeds when level 2 data is provided" do
|
5521
5539
|
result = Braintree::Transaction.sale(
|
5522
5540
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
5523
5541
|
:merchant_account_id => SpecHelper::FakeAmexDirectMerchantAccountId,
|
@@ -5541,7 +5559,7 @@ describe Braintree::Transaction do
|
|
5541
5559
|
result.transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
|
5542
5560
|
end
|
5543
5561
|
|
5544
|
-
|
5562
|
+
xit "succeeds when level 3 data is provided" do
|
5545
5563
|
result = Braintree::Transaction.sale(
|
5546
5564
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
5547
5565
|
:merchant_account_id => SpecHelper::FakeAmexDirectMerchantAccountId,
|
@@ -6323,23 +6341,23 @@ describe Braintree::Transaction do
|
|
6323
6341
|
expect(transaction.three_d_secure_info.authentication).to have_key(:trans_status_reason)
|
6324
6342
|
expect(transaction.three_d_secure_info.lookup).to have_key(:trans_status)
|
6325
6343
|
expect(transaction.three_d_secure_info.lookup).to have_key(:trans_status_reason)
|
6326
|
-
transaction.three_d_secure_info.cavv.
|
6327
|
-
transaction.three_d_secure_info.ds_transaction_id.
|
6328
|
-
transaction.three_d_secure_info.eci_flag.
|
6329
|
-
transaction.three_d_secure_info.enrolled.
|
6330
|
-
transaction.three_d_secure_info.pares_status.
|
6331
|
-
transaction.three_d_secure_info.
|
6332
|
-
transaction.three_d_secure_info.
|
6333
|
-
transaction.three_d_secure_info.status.
|
6344
|
+
expect(transaction.three_d_secure_info.cavv).to eq("somebase64value")
|
6345
|
+
expect(transaction.three_d_secure_info.ds_transaction_id).to eq("dstxnid")
|
6346
|
+
expect(transaction.three_d_secure_info.eci_flag).to eq("07")
|
6347
|
+
expect(transaction.three_d_secure_info.enrolled).to eq("Y")
|
6348
|
+
expect(transaction.three_d_secure_info.pares_status).to eq("Y")
|
6349
|
+
expect(transaction.three_d_secure_info).to be_liability_shift_possible
|
6350
|
+
expect(transaction.three_d_secure_info).to be_liability_shifted
|
6351
|
+
expect(transaction.three_d_secure_info.status).to eq("authenticate_successful")
|
6334
6352
|
expect(transaction.three_d_secure_info.three_d_secure_authentication_id).to be
|
6335
|
-
transaction.three_d_secure_info.three_d_secure_version.
|
6336
|
-
transaction.three_d_secure_info.xid.
|
6353
|
+
expect(transaction.three_d_secure_info.three_d_secure_version).not_to be_nil
|
6354
|
+
expect(transaction.three_d_secure_info.xid).to eq("xidvalue")
|
6337
6355
|
end
|
6338
6356
|
|
6339
6357
|
it "is nil if the transaction wasn't 3d secured" do
|
6340
6358
|
transaction = Braintree::Transaction.find("settledtransaction")
|
6341
6359
|
|
6342
|
-
transaction.three_d_secure_info.
|
6360
|
+
expect(transaction.three_d_secure_info).to be_nil
|
6343
6361
|
end
|
6344
6362
|
end
|
6345
6363
|
|
@@ -7215,7 +7233,7 @@ describe Braintree::Transaction do
|
|
7215
7233
|
end
|
7216
7234
|
|
7217
7235
|
it "returns failure, when transaction authorization type final or undefined" do
|
7218
|
-
additional_params = {:transaction_source => "
|
7236
|
+
additional_params = {:transaction_source => "recurring"}
|
7219
7237
|
initial_transaction = Braintree::Transaction.sale(first_data_master_transaction_params.merge(additional_params))
|
7220
7238
|
expect(initial_transaction.success?).to eq(true)
|
7221
7239
|
|
@@ -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
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
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 "
|
11
|
-
it "
|
12
|
-
Braintree::ApplePayCard._new(:gateway,
|
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,
|
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
|
-
|
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
|
-
|
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,
|
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
|
@@ -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.
|
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
|
|
@@ -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
|