braintree 2.83.0 → 2.84.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/address.rb +12 -12
- data/lib/braintree/address/country_names.rb +4 -1
- data/lib/braintree/address_gateway.rb +10 -0
- data/lib/braintree/client_token.rb +2 -2
- data/lib/braintree/client_token_gateway.rb +2 -0
- data/lib/braintree/credit_card.rb +20 -20
- data/lib/braintree/credit_card_gateway.rb +18 -0
- data/lib/braintree/credit_card_verification.rb +2 -2
- data/lib/braintree/customer.rb +18 -18
- data/lib/braintree/customer_gateway.rb +14 -2
- data/lib/braintree/dispute.rb +12 -12
- data/lib/braintree/dispute/history_event.rb +2 -0
- data/lib/braintree/dispute_search.rb +3 -0
- data/lib/braintree/document_upload.rb +6 -2
- data/lib/braintree/document_upload_gateway.rb +6 -0
- data/lib/braintree/ideal_payment.rb +3 -3
- data/lib/braintree/ideal_payment_gateway.rb +0 -1
- data/lib/braintree/merchant_account.rb +14 -6
- data/lib/braintree/merchant_account_gateway.rb +10 -0
- data/lib/braintree/payment_method.rb +20 -12
- data/lib/braintree/payment_method_gateway.rb +10 -0
- data/lib/braintree/payment_method_nonce.rb +8 -4
- data/lib/braintree/payment_method_nonce_gateway.rb +6 -0
- data/lib/braintree/settlement_batch_summary_gateway.rb +2 -0
- data/lib/braintree/subscription.rb +18 -14
- data/lib/braintree/subscription_gateway.rb +18 -0
- data/lib/braintree/transaction.rb +54 -54
- data/lib/braintree/transaction_gateway.rb +44 -1
- data/lib/braintree/transparent_redirect.rb +12 -12
- data/lib/braintree/us_bank_account.rb +5 -5
- data/lib/braintree/us_bank_account_gateway.rb +0 -1
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/webhook_notification.rb +4 -4
- data/lib/braintree/webhook_testing.rb +2 -2
- data/spec/httpsd.pid +1 -0
- data/spec/integration/braintree/client_api/spec_helper.rb +0 -15
- data/spec/integration/braintree/customer_spec.rb +73 -0
- data/spec/integration/braintree/dispute_search_spec.rb +69 -0
- data/spec/integration/braintree/document_upload_spec.rb +13 -0
- data/spec/integration/braintree/merchant_account_spec.rb +22 -0
- data/spec/integration/braintree/payment_method_nonce_spec.rb +29 -0
- data/spec/integration/braintree/payment_method_spec.rb +63 -93
- data/spec/integration/braintree/subscription_spec.rb +13 -0
- data/spec/integration/braintree/transaction_search_spec.rb +0 -41
- data/spec/integration/braintree/transaction_spec.rb +12 -1
- data/spec/unit/braintree/dispute_search_spec.rb +3 -0
- data/spec/unit/braintree/transaction_spec.rb +0 -1
- metadata +4 -3
@@ -41,6 +41,35 @@ describe Braintree::PaymentMethodNonce do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
describe "self.create!" do
|
45
|
+
it "creates a payment method nonce from a vaulted credit card" do
|
46
|
+
customer = Braintree::Customer.create.customer
|
47
|
+
nonce = nonce_for_new_payment_method(
|
48
|
+
:credit_card => {
|
49
|
+
:number => "4111111111111111",
|
50
|
+
:expiration_month => "11",
|
51
|
+
:expiration_year => "2099",
|
52
|
+
}
|
53
|
+
)
|
54
|
+
|
55
|
+
payment_method = Braintree::PaymentMethod.create!(
|
56
|
+
:payment_method_nonce => nonce,
|
57
|
+
:customer_id => customer.id
|
58
|
+
)
|
59
|
+
|
60
|
+
payment_method.should be_a(Braintree::CreditCard)
|
61
|
+
token = payment_method.token
|
62
|
+
|
63
|
+
found_credit_card = Braintree::CreditCard.find(token)
|
64
|
+
found_credit_card.should_not be_nil
|
65
|
+
|
66
|
+
payment_method_nonce = Braintree::PaymentMethodNonce.create!(found_credit_card.token)
|
67
|
+
payment_method_nonce.should_not be_nil
|
68
|
+
payment_method_nonce.nonce.should_not be_nil
|
69
|
+
payment_method_nonce.details.should_not be_nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
44
73
|
describe "self.find" do
|
45
74
|
it "finds and returns the nonce if one was found" do
|
46
75
|
result = Braintree::PaymentMethodNonce.find("fake-valid-nonce")
|
@@ -117,10 +117,10 @@ describe Braintree::PaymentMethod do
|
|
117
117
|
android_pay_card.expiration_year.to_i.should > 0
|
118
118
|
android_pay_card.default.should == true
|
119
119
|
android_pay_card.image_url.should =~ /android_pay/
|
120
|
-
android_pay_card.source_card_type.should == Braintree::CreditCard::CardType::
|
120
|
+
android_pay_card.source_card_type.should == Braintree::CreditCard::CardType::Discover
|
121
121
|
android_pay_card.source_card_last_4.should == "1111"
|
122
122
|
android_pay_card.google_transaction_id.should == "google_transaction_id"
|
123
|
-
android_pay_card.source_description.should == "
|
123
|
+
android_pay_card.source_description.should == "Discover 1111"
|
124
124
|
android_pay_card.customer_id.should == customer.id
|
125
125
|
end
|
126
126
|
|
@@ -696,41 +696,6 @@ describe Braintree::PaymentMethod do
|
|
696
696
|
end
|
697
697
|
end
|
698
698
|
|
699
|
-
context "SEPA" do
|
700
|
-
it "returns the SEPA bank account behind the nonce" do
|
701
|
-
config = Braintree::Configuration.instantiate
|
702
|
-
customer = Braintree::Customer.create.customer
|
703
|
-
raw_client_token = Braintree::ClientToken.generate(:customer_id => customer.id, :sepa_mandate_type => Braintree::EuropeBankAccount::MandateType::Business)
|
704
|
-
client_token = decode_client_token(raw_client_token)
|
705
|
-
authorization_fingerprint = client_token["authorizationFingerprint"]
|
706
|
-
http = ClientApiHttp.new(
|
707
|
-
config,
|
708
|
-
:authorization_fingerprint => authorization_fingerprint
|
709
|
-
)
|
710
|
-
|
711
|
-
nonce = http.create_europe_bank_account_nonce(
|
712
|
-
:accountHolderName => "Bob Holder",
|
713
|
-
:iban => "DE89370400440532013000",
|
714
|
-
:bic => "DEUTDEFF",
|
715
|
-
:locale => "en-US",
|
716
|
-
:billingAddress => {
|
717
|
-
:region => "Hesse",
|
718
|
-
:country_name => "Germany"
|
719
|
-
}
|
720
|
-
)
|
721
|
-
nonce.should_not == nil
|
722
|
-
result = Braintree::PaymentMethod.create(
|
723
|
-
:payment_method_nonce => nonce,
|
724
|
-
:customer_id => customer.id
|
725
|
-
)
|
726
|
-
|
727
|
-
result.should be_success
|
728
|
-
result.payment_method.token.should_not == nil
|
729
|
-
result.payment_method.image_url.should_not be_nil
|
730
|
-
result.payment_method.customer_id.should == customer.id
|
731
|
-
end
|
732
|
-
end
|
733
|
-
|
734
699
|
context "Unknown payment methods" do
|
735
700
|
it "creates an unknown payment method from a nonce" do
|
736
701
|
customer = Braintree::Customer.create.customer
|
@@ -750,6 +715,41 @@ describe Braintree::PaymentMethod do
|
|
750
715
|
end
|
751
716
|
end
|
752
717
|
|
718
|
+
describe "self.create!" do
|
719
|
+
it "creates a payment method from a vaulted credit card nonce" do
|
720
|
+
config = Braintree::Configuration.instantiate
|
721
|
+
customer = Braintree::Customer.create.customer
|
722
|
+
raw_client_token = Braintree::ClientToken.generate(:customer_id => customer.id)
|
723
|
+
client_token = decode_client_token(raw_client_token)
|
724
|
+
authorization_fingerprint = client_token["authorizationFingerprint"]
|
725
|
+
http = ClientApiHttp.new(
|
726
|
+
config,
|
727
|
+
:authorization_fingerprint => authorization_fingerprint,
|
728
|
+
:shared_customer_identifier => "fake_identifier",
|
729
|
+
:shared_customer_identifier_type => "testing"
|
730
|
+
)
|
731
|
+
|
732
|
+
response = http.create_credit_card(
|
733
|
+
:number => 4111111111111111,
|
734
|
+
:expirationMonth => 12,
|
735
|
+
:expirationYear => 2020
|
736
|
+
)
|
737
|
+
response.code.should == "201"
|
738
|
+
|
739
|
+
nonce = JSON.parse(response.body)["creditCards"].first["nonce"]
|
740
|
+
payment_method = Braintree::PaymentMethod.create!(
|
741
|
+
:payment_method_nonce => nonce,
|
742
|
+
:customer_id => customer.id
|
743
|
+
)
|
744
|
+
|
745
|
+
payment_method.should be_a(Braintree::CreditCard)
|
746
|
+
token = payment_method.token
|
747
|
+
|
748
|
+
found_credit_card = Braintree::CreditCard.find(token)
|
749
|
+
found_credit_card.should_not be_nil
|
750
|
+
end
|
751
|
+
end
|
752
|
+
|
753
753
|
describe "self.find" do
|
754
754
|
context "credit cards" do
|
755
755
|
it "finds the payment method with the given token" do
|
@@ -882,10 +882,10 @@ describe Braintree::PaymentMethod do
|
|
882
882
|
android_pay_card.expiration_year.to_i.should > 0
|
883
883
|
android_pay_card.default.should == true
|
884
884
|
android_pay_card.image_url.should =~ /android_pay/
|
885
|
-
android_pay_card.source_card_type.should == Braintree::CreditCard::CardType::
|
885
|
+
android_pay_card.source_card_type.should == Braintree::CreditCard::CardType::Discover
|
886
886
|
android_pay_card.source_card_last_4.should == "1111"
|
887
887
|
android_pay_card.google_transaction_id.should == "google_transaction_id"
|
888
|
-
android_pay_card.source_description.should == "
|
888
|
+
android_pay_card.source_description.should == "Discover 1111"
|
889
889
|
android_pay_card.customer_id.should == customer.id
|
890
890
|
end
|
891
891
|
|
@@ -1393,6 +1393,30 @@ describe Braintree::PaymentMethod do
|
|
1393
1393
|
end
|
1394
1394
|
end
|
1395
1395
|
|
1396
|
+
describe "self.update!" do
|
1397
|
+
it "updates the credit card" do
|
1398
|
+
customer = Braintree::Customer.create!
|
1399
|
+
credit_card = Braintree::CreditCard.create!(
|
1400
|
+
:cardholder_name => "Original Holder",
|
1401
|
+
:customer_id => customer.id,
|
1402
|
+
:cvv => "123",
|
1403
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1404
|
+
:expiration_date => "05/2012"
|
1405
|
+
)
|
1406
|
+
payment_method = Braintree::PaymentMethod.update!(credit_card.token,
|
1407
|
+
:cardholder_name => "New Holder",
|
1408
|
+
:cvv => "456",
|
1409
|
+
:number => Braintree::Test::CreditCardNumbers::MasterCard,
|
1410
|
+
:expiration_date => "06/2013"
|
1411
|
+
)
|
1412
|
+
payment_method.should == credit_card
|
1413
|
+
payment_method.cardholder_name.should == "New Holder"
|
1414
|
+
payment_method.bin.should == Braintree::Test::CreditCardNumbers::MasterCard[0, 6]
|
1415
|
+
payment_method.last_4.should == Braintree::Test::CreditCardNumbers::MasterCard[-4..-1]
|
1416
|
+
payment_method.expiration_date.should == "06/2013"
|
1417
|
+
end
|
1418
|
+
end
|
1419
|
+
|
1396
1420
|
context "payment method grant and revoke" do
|
1397
1421
|
before(:each) do
|
1398
1422
|
@partner_merchant_gateway = Braintree::Gateway.new(
|
@@ -1529,60 +1553,6 @@ describe Braintree::PaymentMethod do
|
|
1529
1553
|
)
|
1530
1554
|
result.should_not be_success
|
1531
1555
|
end
|
1532
|
-
|
1533
|
-
it "revokes grants upon deletion if :revoke_all_grants is true" do
|
1534
|
-
customer_result = @partner_merchant_gateway.customer.create()
|
1535
|
-
token = @partner_merchant_gateway.payment_method.create({
|
1536
|
-
:payment_method_nonce => Braintree::Test::Nonce::Transactable,
|
1537
|
-
:customer_id => customer_result.customer.id
|
1538
|
-
}).payment_method.token
|
1539
|
-
|
1540
|
-
code = Braintree::OAuthTestHelper.create_grant(@oauth_gateway, {
|
1541
|
-
:merchant_public_id => "integration_merchant_id",
|
1542
|
-
:scope => "grant_payment_method"
|
1543
|
-
})
|
1544
|
-
access_token_result = @oauth_gateway.oauth.create_token_from_code({
|
1545
|
-
:code => code,
|
1546
|
-
:scope => "grant_payment_method"
|
1547
|
-
}).credentials
|
1548
|
-
|
1549
|
-
access_token_gateway = Braintree::Gateway.new({
|
1550
|
-
:access_token => access_token_result.access_token
|
1551
|
-
})
|
1552
|
-
|
1553
|
-
grant_result = access_token_gateway.payment_method.grant(token, {
|
1554
|
-
:allow_vaulting => true,
|
1555
|
-
:include_billing_postal_code => true,
|
1556
|
-
})
|
1557
|
-
|
1558
|
-
grant_result.should be_success
|
1559
|
-
|
1560
|
-
delete_result = @partner_merchant_gateway.payment_method.delete(token, {
|
1561
|
-
:revoke_all_grants => true
|
1562
|
-
})
|
1563
|
-
|
1564
|
-
delete_result.should be_success
|
1565
|
-
|
1566
|
-
new_customer_result = Braintree::Customer.create({
|
1567
|
-
:first_name => "Joe",
|
1568
|
-
:last_name => "Brown",
|
1569
|
-
:company => "ExampleCo",
|
1570
|
-
:email => "joe@example.com",
|
1571
|
-
:phone => "312.555.1234",
|
1572
|
-
:fax => "614.555.5678",
|
1573
|
-
:website => "www.example.com"
|
1574
|
-
})
|
1575
|
-
|
1576
|
-
# Revocations don't happen immediately so we add this.
|
1577
|
-
sleep(6)
|
1578
|
-
|
1579
|
-
token_request = Braintree::PaymentMethod.create({
|
1580
|
-
:payment_method_nonce => grant_result.payment_method_nonce.nonce,
|
1581
|
-
:customer_id => new_customer_result.customer.id
|
1582
|
-
})
|
1583
|
-
|
1584
|
-
token_request.should_not be_success
|
1585
|
-
end
|
1586
1556
|
end
|
1587
1557
|
end
|
1588
1558
|
end
|
@@ -1229,6 +1229,19 @@ describe Braintree::Subscription do
|
|
1229
1229
|
end
|
1230
1230
|
end
|
1231
1231
|
|
1232
|
+
describe "self.cancel!" do
|
1233
|
+
it "returns a updated subscription if valid" do
|
1234
|
+
subscription = Braintree::Subscription.create!(
|
1235
|
+
:payment_method_token => @credit_card.token,
|
1236
|
+
:price => 54.32,
|
1237
|
+
:plan_id => SpecHelper::TriallessPlan[:id]
|
1238
|
+
)
|
1239
|
+
|
1240
|
+
updated_subscription = Braintree::Subscription.cancel!(subscription.id)
|
1241
|
+
updated_subscription.status.should == Braintree::Subscription::Status::Canceled
|
1242
|
+
end
|
1243
|
+
end
|
1244
|
+
|
1232
1245
|
describe "self.search" do
|
1233
1246
|
describe "in_trial_period" do
|
1234
1247
|
it "works in the affirmative" do
|
@@ -161,47 +161,6 @@ describe Braintree::Transaction, "search" do
|
|
161
161
|
collection.first.id.should == transaction.id
|
162
162
|
end
|
163
163
|
|
164
|
-
context "SEPA bank account transactions" do
|
165
|
-
it "does" do
|
166
|
-
with_altpay_merchant do
|
167
|
-
config = Braintree::Configuration.instantiate
|
168
|
-
customer = Braintree::Customer.create.customer
|
169
|
-
raw_client_token = Braintree::ClientToken.generate(:customer_id => customer.id, :sepa_mandate_type => Braintree::EuropeBankAccount::MandateType::Business)
|
170
|
-
client_token = decode_client_token(raw_client_token)
|
171
|
-
authorization_fingerprint = client_token["authorizationFingerprint"]
|
172
|
-
http = ClientApiHttp.new(
|
173
|
-
config,
|
174
|
-
:authorization_fingerprint => authorization_fingerprint
|
175
|
-
)
|
176
|
-
|
177
|
-
nonce = http.create_europe_bank_account_nonce(
|
178
|
-
:accountHolderName => "Bob Holder",
|
179
|
-
:iban => "DE89370400440532013000",
|
180
|
-
:bic => "DEUTDEFF",
|
181
|
-
:locale => "en-US",
|
182
|
-
:billingAddress => {
|
183
|
-
:region => "Hesse",
|
184
|
-
:country_name => "Germany"
|
185
|
-
}
|
186
|
-
)
|
187
|
-
nonce.should_not == nil
|
188
|
-
|
189
|
-
transaction = Braintree::Transaction.sale!(
|
190
|
-
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
191
|
-
:payment_method_nonce => nonce,
|
192
|
-
:merchant_account_id => "fake_sepa_ma"
|
193
|
-
)
|
194
|
-
|
195
|
-
collection = Braintree::Transaction.search do |search|
|
196
|
-
search.europe_bank_account_iban.is "DE89370400440532013000"
|
197
|
-
end
|
198
|
-
|
199
|
-
collection.maximum_size.should >= 1
|
200
|
-
collection.map(&:id).should include(transaction.id)
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
164
|
context "multiple value fields" do
|
206
165
|
it "searches on created_using" do
|
207
166
|
transaction = Braintree::Transaction.sale!(
|
@@ -1402,7 +1402,7 @@ describe Braintree::Transaction do
|
|
1402
1402
|
android_pay_details.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
|
1403
1403
|
android_pay_details.last_4.should == "1117"
|
1404
1404
|
android_pay_details.virtual_card_last_4.should == "1117"
|
1405
|
-
android_pay_details.source_description.should == "
|
1405
|
+
android_pay_details.source_description.should == "Discover 1111"
|
1406
1406
|
android_pay_details.expiration_month.to_i.should > 0
|
1407
1407
|
android_pay_details.expiration_year.to_i.should > 0
|
1408
1408
|
android_pay_details.google_transaction_id.should == "google_transaction_id"
|
@@ -1472,6 +1472,17 @@ describe Braintree::Transaction do
|
|
1472
1472
|
venmo_account_details.source_description.should == "Venmo Account: venmojoe"
|
1473
1473
|
end
|
1474
1474
|
|
1475
|
+
it "can create a transaction with a fake venmo account nonce specifying a profile" do
|
1476
|
+
result = Braintree::Transaction.create(
|
1477
|
+
:type => "sale",
|
1478
|
+
:merchant_account_id => SpecHelper::FakeVenmoAccountMerchantAccountId,
|
1479
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1480
|
+
:payment_method_nonce => Braintree::Test::Nonce::VenmoAccount,
|
1481
|
+
:options => {:store_in_vault => true, :venmo => {:profile_id => "integration_venmo_merchant_public_id" }}
|
1482
|
+
)
|
1483
|
+
result.should be_success
|
1484
|
+
end
|
1485
|
+
|
1475
1486
|
it "can create a transaction with an unknown nonce" do
|
1476
1487
|
customer = Braintree::Customer.create!
|
1477
1488
|
result = Braintree::Transaction.create(
|
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: 2.
|
4
|
+
version: 2.84.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Braintree
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|
@@ -182,6 +182,7 @@ files:
|
|
182
182
|
- spec/fixtures/files/gif_extension_bt_logo.gif
|
183
183
|
- spec/fixtures/files/malformed_pdf.pdf
|
184
184
|
- spec/hacks/tcp_socket.rb
|
185
|
+
- spec/httpsd.pid
|
185
186
|
- spec/integration/braintree/add_on_spec.rb
|
186
187
|
- spec/integration/braintree/address_spec.rb
|
187
188
|
- spec/integration/braintree/advanced_search_spec.rb
|
@@ -296,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
296
297
|
version: '0'
|
297
298
|
requirements: []
|
298
299
|
rubyforge_project: braintree
|
299
|
-
rubygems_version: 2.
|
300
|
+
rubygems_version: 2.2.2
|
300
301
|
signing_key:
|
301
302
|
specification_version: 4
|
302
303
|
summary: Braintree Gateway Ruby Client Library
|