braintree 2.73.0 → 2.74.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +1 -1
- data/lib/braintree.rb +6 -0
- data/lib/braintree/connected_merchant_paypal_status_changed.rb +18 -0
- data/lib/braintree/connected_merchant_status_transitioned.rb +18 -0
- data/lib/braintree/credit_card_verification.rb +11 -2
- data/lib/braintree/customer.rb +6 -2
- data/lib/braintree/customer_gateway.rb +8 -0
- data/lib/braintree/masterpass_card.rb +66 -0
- data/lib/braintree/payment_instrument_type.rb +2 -0
- data/lib/braintree/payment_method_gateway.rb +11 -3
- data/lib/braintree/test/nonce.rb +8 -0
- data/lib/braintree/transaction.rb +5 -1
- data/lib/braintree/transaction/masterpass_card_details.rb +33 -0
- data/lib/braintree/transaction/visa_checkout_card_details.rb +33 -0
- data/lib/braintree/util.rb +4 -0
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/visa_checkout_card.rb +74 -0
- data/lib/braintree/webhook_notification.rb +16 -1
- data/lib/braintree/webhook_testing_gateway.rb +24 -0
- data/spec/httpsd.pid +1 -1
- data/spec/integration/braintree/client_api/spec_helper.rb +16 -1
- data/spec/integration/braintree/customer_spec.rb +58 -0
- data/spec/integration/braintree/masterpass_card_spec.rb +97 -0
- data/spec/integration/braintree/payment_method_spec.rb +30 -2
- data/spec/integration/braintree/visa_checkout_card_spec.rb +110 -0
- data/spec/unit/braintree/credit_card_verification_spec.rb +8 -1
- data/spec/unit/braintree/customer_spec.rb +2 -0
- data/spec/unit/braintree/webhook_notification_spec.rb +34 -0
- metadata +187 -179
@@ -35,9 +35,22 @@ module Braintree
|
|
35
35
|
|
36
36
|
IdealPaymentComplete = "ideal_payment_complete"
|
37
37
|
IdealPaymentFailed = "ideal_payment_failed"
|
38
|
+
|
39
|
+
ConnectedMerchantStatusTransitioned = "connected_merchant_status_transitioned"
|
40
|
+
ConnectedMerchantPayPalStatusChanged = "connected_merchant_paypal_status_changed"
|
38
41
|
end
|
39
42
|
|
40
|
-
attr_reader :subscription
|
43
|
+
attr_reader :subscription
|
44
|
+
attr_reader :kind
|
45
|
+
attr_reader :timestamp
|
46
|
+
attr_reader :transaction
|
47
|
+
attr_reader :partner_merchant
|
48
|
+
attr_reader :disbursement
|
49
|
+
attr_reader :dispute
|
50
|
+
attr_reader :account_updater_daily_report
|
51
|
+
attr_reader :ideal_payment
|
52
|
+
attr_reader :connected_merchant_status_transitioned
|
53
|
+
attr_reader :connected_merchant_paypal_status_changed
|
41
54
|
|
42
55
|
def self.parse(signature, payload)
|
43
56
|
Configuration.gateway.webhook_notification.parse(signature, payload)
|
@@ -59,6 +72,8 @@ module Braintree
|
|
59
72
|
@dispute = Dispute._new(@subject[:dispute]) if @subject.has_key?(:dispute)
|
60
73
|
@account_updater_daily_report = AccountUpdaterDailyReport._new(@subject[:account_updater_daily_report]) if @subject.has_key?(:account_updater_daily_report)
|
61
74
|
@ideal_payment = Braintree::IdealPayment._new(gateway, @subject[:ideal_payment]) if @subject.has_key?(:ideal_payment)
|
75
|
+
@connected_merchant_status_transitioned = ConnectedMerchantStatusTransitioned._new(@subject[:connected_merchant_status_transitioned]) if @subject.has_key?(:connected_merchant_status_transitioned)
|
76
|
+
@connected_merchant_paypal_status_changed = ConnectedMerchantPayPalStatusChanged._new(@subject[:connected_merchant_paypal_status_changed]) if @subject.has_key?(:connected_merchant_paypal_status_changed)
|
62
77
|
end
|
63
78
|
|
64
79
|
def merchant_account
|
@@ -59,6 +59,10 @@ module Braintree
|
|
59
59
|
_subscription_charged_successfully(id)
|
60
60
|
when Braintree::WebhookNotification::Kind::AccountUpdaterDailyReport
|
61
61
|
_account_updater_daily_report_sample_xml(id)
|
62
|
+
when Braintree::WebhookNotification::Kind::ConnectedMerchantStatusTransitioned
|
63
|
+
_auth_status_transitioned_sample_xml(id)
|
64
|
+
when Braintree::WebhookNotification::Kind::ConnectedMerchantPayPalStatusChanged
|
65
|
+
_auth_paypal_status_changed_sample_xml(id)
|
62
66
|
when Braintree::WebhookNotification::Kind::IdealPaymentComplete
|
63
67
|
_ideal_payment_complete_sample_xml(id)
|
64
68
|
when Braintree::WebhookNotification::Kind::IdealPaymentFailed
|
@@ -360,6 +364,26 @@ module Braintree
|
|
360
364
|
XML
|
361
365
|
end
|
362
366
|
|
367
|
+
def _auth_status_transitioned_sample_xml(id)
|
368
|
+
<<-XML
|
369
|
+
<connected-merchant-status-transitioned>
|
370
|
+
<merchant-public-id>#{id}</merchant-public-id>
|
371
|
+
<status>new_status</status>
|
372
|
+
<oauth-application-client-id>oauth_application_client_id</oauth-application-client-id>
|
373
|
+
</connected-merchant-status-transitioned>
|
374
|
+
XML
|
375
|
+
end
|
376
|
+
|
377
|
+
def _auth_paypal_status_changed_sample_xml(id)
|
378
|
+
<<-XML
|
379
|
+
<connected-merchant-paypal-status-changed>
|
380
|
+
<oauth-application-client-id>oauth_application_client_id</oauth-application-client-id>
|
381
|
+
<merchant-public-id>#{id}</merchant-public-id>
|
382
|
+
<action>link</action>
|
383
|
+
</connected-merchant-paypal-status-changed>
|
384
|
+
XML
|
385
|
+
end
|
386
|
+
|
363
387
|
def _ideal_payment_complete_sample_xml(id)
|
364
388
|
|
365
389
|
<<-XML
|
data/spec/httpsd.pid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
15408
|
@@ -84,8 +84,13 @@ def generate_valid_us_bank_account_nonce()
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def generate_valid_ideal_payment_nonce(amount = Braintree::Test::TransactionAmounts::Authorize)
|
87
|
-
raw_client_token = Braintree::ClientToken.generate
|
87
|
+
raw_client_token = Braintree::ClientToken.generate(:merchant_account_id => "ideal_merchant_account")
|
88
88
|
client_token = decode_client_token(raw_client_token)
|
89
|
+
client = ClientApiHttp.new(
|
90
|
+
Braintree::Configuration.instantiate,
|
91
|
+
:authorization_fingerprint => client_token["authorizationFingerprint"],
|
92
|
+
)
|
93
|
+
config = JSON.parse(client.get_configuration.body)
|
89
94
|
|
90
95
|
token = client_token["braintree_api"]["access_token"]
|
91
96
|
url = client_token["braintree_api"]["url"] + "/ideal-payments"
|
@@ -95,6 +100,7 @@ def generate_valid_ideal_payment_nonce(amount = Braintree::Test::TransactionAmou
|
|
95
100
|
:amount => amount,
|
96
101
|
:currency => "EUR",
|
97
102
|
:redirect_url => "https://braintree-api.com",
|
103
|
+
:route_id => config["ideal"]["routeId"]
|
98
104
|
}
|
99
105
|
|
100
106
|
json = _cosmos_post(token, url, payload)
|
@@ -183,6 +189,15 @@ class ClientApiHttp
|
|
183
189
|
end
|
184
190
|
end
|
185
191
|
|
192
|
+
def get_configuration
|
193
|
+
encoded_fingerprint = Braintree::Util.url_encode(@options[:authorization_fingerprint])
|
194
|
+
url = "/merchants/#{@config.merchant_id}/client_api/v1/configuration"
|
195
|
+
url += "?authorizationFingerprint=#{encoded_fingerprint}"
|
196
|
+
url += "&configVersion=3"
|
197
|
+
|
198
|
+
get(url)
|
199
|
+
end
|
200
|
+
|
186
201
|
def get_payment_methods
|
187
202
|
encoded_fingerprint = Braintree::Util.url_encode(@options[:authorization_fingerprint])
|
188
203
|
url = "/merchants/#{@config.merchant_id}/client_api/v1/payment_methods?"
|
@@ -1473,6 +1473,64 @@ describe Braintree::Customer do
|
|
1473
1473
|
end
|
1474
1474
|
end
|
1475
1475
|
|
1476
|
+
context "limited use" do
|
1477
|
+
it "creates a customer with payment_method_nonce and options->paypal->payee_email" do
|
1478
|
+
paypal_account_token = "PAYPAL_ACCOUNT_TOKEN_#{rand(36**3).to_s(36)}"
|
1479
|
+
nonce = nonce_for_paypal_account(
|
1480
|
+
:consent_code => "PAYPAL_CONSENT_CODE",
|
1481
|
+
:token => paypal_account_token,
|
1482
|
+
:options => {
|
1483
|
+
:make_default => true
|
1484
|
+
}
|
1485
|
+
)
|
1486
|
+
|
1487
|
+
result = Braintree::Customer.create(
|
1488
|
+
:payment_method_nonce => nonce,
|
1489
|
+
:options => {
|
1490
|
+
:paypal => {
|
1491
|
+
:payee_email => "payee@example.com",
|
1492
|
+
},
|
1493
|
+
},
|
1494
|
+
)
|
1495
|
+
|
1496
|
+
result.should be_success
|
1497
|
+
end
|
1498
|
+
|
1499
|
+
it "updates a customer with payment_method_nonce and options->paypal->payee_email" do
|
1500
|
+
customer = Braintree::Customer.create!(
|
1501
|
+
:credit_card => {
|
1502
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1503
|
+
:expiration_date => "12/2015",
|
1504
|
+
:options => {
|
1505
|
+
:make_default => true
|
1506
|
+
}
|
1507
|
+
}
|
1508
|
+
)
|
1509
|
+
|
1510
|
+
paypal_account_token = "PAYPAL_ACCOUNT_TOKEN_#{rand(36**3).to_s(36)}"
|
1511
|
+
nonce = nonce_for_paypal_account(
|
1512
|
+
:consent_code => "PAYPAL_CONSENT_CODE",
|
1513
|
+
:token => paypal_account_token,
|
1514
|
+
:options => {
|
1515
|
+
:make_default => true
|
1516
|
+
}
|
1517
|
+
)
|
1518
|
+
|
1519
|
+
result = Braintree::Customer.update(
|
1520
|
+
customer.id,
|
1521
|
+
:payment_method_nonce => nonce,
|
1522
|
+
:options => {
|
1523
|
+
:paypal => {
|
1524
|
+
:payee_email => "payee@example.com",
|
1525
|
+
},
|
1526
|
+
},
|
1527
|
+
)
|
1528
|
+
|
1529
|
+
result.should be_success
|
1530
|
+
result.customer.default_payment_method.token.should == paypal_account_token
|
1531
|
+
end
|
1532
|
+
end
|
1533
|
+
|
1476
1534
|
context "onetime" do
|
1477
1535
|
it "does not create a customer with a onetime paypal account" do
|
1478
1536
|
result = Braintree::Customer.create(
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")
|
3
|
+
|
4
|
+
describe Braintree::MasterpassCard do
|
5
|
+
it "can create from a payment method nonce" do
|
6
|
+
customer = Braintree::Customer.create!
|
7
|
+
|
8
|
+
result = Braintree::PaymentMethod.create(
|
9
|
+
:payment_method_nonce => Braintree::Test::Nonce::MasterpassDiscover,
|
10
|
+
:customer_id => customer.id
|
11
|
+
)
|
12
|
+
result.should be_success
|
13
|
+
|
14
|
+
masterpass_card = result.payment_method
|
15
|
+
masterpass_card.should be_a(Braintree::MasterpassCard)
|
16
|
+
masterpass_card.billing_address.should_not be_nil
|
17
|
+
masterpass_card.bin.should_not be_nil
|
18
|
+
masterpass_card.card_type.should_not be_nil
|
19
|
+
masterpass_card.cardholder_name.should_not be_nil
|
20
|
+
masterpass_card.commercial.should_not be_nil
|
21
|
+
masterpass_card.country_of_issuance.should_not be_nil
|
22
|
+
masterpass_card.created_at.should_not be_nil
|
23
|
+
masterpass_card.customer_id.should_not be_nil
|
24
|
+
masterpass_card.customer_location.should_not be_nil
|
25
|
+
masterpass_card.debit.should_not be_nil
|
26
|
+
masterpass_card.default?.should_not be_nil
|
27
|
+
masterpass_card.durbin_regulated.should_not be_nil
|
28
|
+
masterpass_card.expiration_date.should_not be_nil
|
29
|
+
masterpass_card.expiration_month.should_not be_nil
|
30
|
+
masterpass_card.expiration_year.should_not be_nil
|
31
|
+
masterpass_card.expired?.should_not be_nil
|
32
|
+
masterpass_card.healthcare.should_not be_nil
|
33
|
+
masterpass_card.image_url.should_not be_nil
|
34
|
+
masterpass_card.issuing_bank.should_not be_nil
|
35
|
+
masterpass_card.last_4.should_not be_nil
|
36
|
+
masterpass_card.payroll.should_not be_nil
|
37
|
+
masterpass_card.prepaid.should_not be_nil
|
38
|
+
masterpass_card.product_id.should_not be_nil
|
39
|
+
masterpass_card.subscriptions.should_not be_nil
|
40
|
+
masterpass_card.token.should_not be_nil
|
41
|
+
masterpass_card.unique_number_identifier.should_not be_nil
|
42
|
+
masterpass_card.updated_at.should_not be_nil
|
43
|
+
|
44
|
+
customer = Braintree::Customer.find(customer.id)
|
45
|
+
customer.masterpass_cards.size.should == 1
|
46
|
+
customer.masterpass_cards.first.should == masterpass_card
|
47
|
+
end
|
48
|
+
|
49
|
+
it "can search for transactions" do
|
50
|
+
transaction_create_result = Braintree::Transaction.sale(
|
51
|
+
:payment_method_nonce => Braintree::Test::Nonce::MasterpassDiscover,
|
52
|
+
:amount => '47.00',
|
53
|
+
)
|
54
|
+
transaction_create_result.should be_success
|
55
|
+
transaction_id = transaction_create_result.transaction.id
|
56
|
+
|
57
|
+
search_results = Braintree::Transaction.search do |search|
|
58
|
+
search.id.is transaction_id
|
59
|
+
search.payment_instrument_type.is Braintree::PaymentInstrumentType::MasterpassCard
|
60
|
+
end
|
61
|
+
search_results.first.id.should == transaction_id
|
62
|
+
end
|
63
|
+
|
64
|
+
it "can create transaction from nonce and vault" do
|
65
|
+
customer = Braintree::Customer.create!
|
66
|
+
|
67
|
+
result = Braintree::Transaction.sale(
|
68
|
+
:payment_method_nonce => Braintree::Test::Nonce::MasterpassDiscover,
|
69
|
+
:customer_id => customer.id,
|
70
|
+
:amount => '47.00',
|
71
|
+
:options => { :store_in_vault => true },
|
72
|
+
)
|
73
|
+
result.should be_success
|
74
|
+
|
75
|
+
masterpass_card_details = result.transaction.masterpass_card_details
|
76
|
+
masterpass_card_details.bin.should_not be_nil
|
77
|
+
masterpass_card_details.card_type.should_not be_nil
|
78
|
+
masterpass_card_details.cardholder_name.should_not be_nil
|
79
|
+
masterpass_card_details.commercial.should_not be_nil
|
80
|
+
masterpass_card_details.country_of_issuance.should_not be_nil
|
81
|
+
masterpass_card_details.customer_location.should_not be_nil
|
82
|
+
masterpass_card_details.debit.should_not be_nil
|
83
|
+
masterpass_card_details.durbin_regulated.should_not be_nil
|
84
|
+
masterpass_card_details.expiration_date.should_not be_nil
|
85
|
+
masterpass_card_details.expiration_month.should_not be_nil
|
86
|
+
masterpass_card_details.expiration_year.should_not be_nil
|
87
|
+
masterpass_card_details.healthcare.should_not be_nil
|
88
|
+
masterpass_card_details.image_url.should_not be_nil
|
89
|
+
masterpass_card_details.issuing_bank.should_not be_nil
|
90
|
+
masterpass_card_details.last_4.should_not be_nil
|
91
|
+
masterpass_card_details.payroll.should_not be_nil
|
92
|
+
masterpass_card_details.prepaid.should_not be_nil
|
93
|
+
masterpass_card_details.product_id.should_not be_nil
|
94
|
+
masterpass_card_details.token.should_not be_nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
@@ -246,7 +246,7 @@ describe Braintree::PaymentMethod do
|
|
246
246
|
it "respects verify_card and verification_merchant_account_id when included outside of the nonce" do
|
247
247
|
nonce = nonce_for_new_payment_method(
|
248
248
|
:credit_card => {
|
249
|
-
:number =>
|
249
|
+
:number => Braintree::Test::CreditCardNumbers::FailsSandboxVerification::Visa,
|
250
250
|
:expiration_month => "11",
|
251
251
|
:expiration_year => "2099",
|
252
252
|
}
|
@@ -271,7 +271,7 @@ describe Braintree::PaymentMethod do
|
|
271
271
|
it "respects verification amount when included outside of the nonce" do
|
272
272
|
nonce = nonce_for_new_payment_method(
|
273
273
|
:credit_card => {
|
274
|
-
:number =>
|
274
|
+
:number => Braintree::Test::CreditCardNumbers::FailsSandboxVerification::Visa,
|
275
275
|
:expiration_month => "11",
|
276
276
|
:expiration_year => "2099",
|
277
277
|
}
|
@@ -290,6 +290,7 @@ describe Braintree::PaymentMethod do
|
|
290
290
|
result.credit_card_verification.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
291
291
|
result.credit_card_verification.processor_response_code.should == "2000"
|
292
292
|
result.credit_card_verification.processor_response_text.should == "Do Not Honor"
|
293
|
+
result.credit_card_verification.amount.should == BigDecimal.new("100.00")
|
293
294
|
end
|
294
295
|
|
295
296
|
it "respects fail_on_duplicate_payment_method when included outside of the nonce" do
|
@@ -534,6 +535,32 @@ describe Braintree::PaymentMethod do
|
|
534
535
|
found_paypal_account.should_not be_nil
|
535
536
|
end
|
536
537
|
|
538
|
+
it "creates a limited use payment method from a paypal account nonce for a paypal intent==order payment" do
|
539
|
+
nonce = nonce_for_paypal_account(
|
540
|
+
:intent => "order",
|
541
|
+
:payment_token => "fake-payment-token",
|
542
|
+
:payer_id => "fake-payer-id",
|
543
|
+
)
|
544
|
+
customer = Braintree::Customer.create.customer
|
545
|
+
result = Braintree::PaymentMethod.create(
|
546
|
+
:payment_method_nonce => nonce,
|
547
|
+
:customer_id => customer.id,
|
548
|
+
:options => {
|
549
|
+
:paypal => {
|
550
|
+
:payee_email => "payee@example.com",
|
551
|
+
},
|
552
|
+
},
|
553
|
+
)
|
554
|
+
|
555
|
+
result.should be_success
|
556
|
+
result.payment_method.should be_a(Braintree::PayPalAccount)
|
557
|
+
result.payment_method.image_url.should_not be_nil
|
558
|
+
token = result.payment_method.token
|
559
|
+
|
560
|
+
found_paypal_account = Braintree::PayPalAccount.find(token)
|
561
|
+
found_paypal_account.should_not be_nil
|
562
|
+
end
|
563
|
+
|
537
564
|
it "does not create a payment method from an unvalidated onetime paypal account nonce" do
|
538
565
|
customer = Braintree::Customer.create.customer
|
539
566
|
nonce = nonce_for_paypal_account(:access_token => "PAYPAL_ACCESS_TOKEN")
|
@@ -1101,6 +1128,7 @@ describe Braintree::PaymentMethod do
|
|
1101
1128
|
update_result.success?.should == false
|
1102
1129
|
update_result.credit_card_verification.status.should == Braintree::Transaction::Status::ProcessorDeclined
|
1103
1130
|
update_result.credit_card_verification.gateway_rejection_reason.should be_nil
|
1131
|
+
update_result.credit_card_verification.amount.should == BigDecimal("2.34")
|
1104
1132
|
end
|
1105
1133
|
|
1106
1134
|
it "can update the billing address" do
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")
|
3
|
+
|
4
|
+
describe Braintree::VisaCheckoutCard do
|
5
|
+
it "can create from payment method nonce" do
|
6
|
+
customer = Braintree::Customer.create!
|
7
|
+
|
8
|
+
result = Braintree::PaymentMethod.create(
|
9
|
+
:payment_method_nonce => Braintree::Test::Nonce::VisaCheckoutDiscover,
|
10
|
+
:customer_id => customer.id
|
11
|
+
)
|
12
|
+
result.should be_success
|
13
|
+
|
14
|
+
visa_checkout_card = result.payment_method
|
15
|
+
visa_checkout_card.should be_a(Braintree::VisaCheckoutCard)
|
16
|
+
visa_checkout_card.call_id.should == "abc123"
|
17
|
+
visa_checkout_card.billing_address.should_not be_nil
|
18
|
+
visa_checkout_card.bin.should_not be_nil
|
19
|
+
visa_checkout_card.card_type.should_not be_nil
|
20
|
+
visa_checkout_card.cardholder_name.should_not be_nil
|
21
|
+
visa_checkout_card.commercial.should_not be_nil
|
22
|
+
visa_checkout_card.country_of_issuance.should_not be_nil
|
23
|
+
visa_checkout_card.created_at.should_not be_nil
|
24
|
+
visa_checkout_card.customer_id.should_not be_nil
|
25
|
+
visa_checkout_card.customer_location.should_not be_nil
|
26
|
+
visa_checkout_card.debit.should_not be_nil
|
27
|
+
visa_checkout_card.default?.should_not be_nil
|
28
|
+
visa_checkout_card.durbin_regulated.should_not be_nil
|
29
|
+
visa_checkout_card.expiration_date.should_not be_nil
|
30
|
+
visa_checkout_card.expiration_month.should_not be_nil
|
31
|
+
visa_checkout_card.expiration_year.should_not be_nil
|
32
|
+
visa_checkout_card.expired?.should_not be_nil
|
33
|
+
visa_checkout_card.healthcare.should_not be_nil
|
34
|
+
visa_checkout_card.image_url.should_not be_nil
|
35
|
+
visa_checkout_card.issuing_bank.should_not be_nil
|
36
|
+
visa_checkout_card.last_4.should_not be_nil
|
37
|
+
visa_checkout_card.payroll.should_not be_nil
|
38
|
+
visa_checkout_card.prepaid.should_not be_nil
|
39
|
+
visa_checkout_card.product_id.should_not be_nil
|
40
|
+
visa_checkout_card.subscriptions.should_not be_nil
|
41
|
+
visa_checkout_card.token.should_not be_nil
|
42
|
+
visa_checkout_card.unique_number_identifier.should_not be_nil
|
43
|
+
visa_checkout_card.updated_at.should_not be_nil
|
44
|
+
|
45
|
+
customer = Braintree::Customer.find(customer.id)
|
46
|
+
customer.visa_checkout_cards.size.should == 1
|
47
|
+
customer.visa_checkout_cards.first.should == visa_checkout_card
|
48
|
+
end
|
49
|
+
|
50
|
+
it "can create with verification" do
|
51
|
+
customer = Braintree::Customer.create!
|
52
|
+
|
53
|
+
result = Braintree::PaymentMethod.create(
|
54
|
+
:payment_method_nonce => Braintree::Test::Nonce::VisaCheckoutDiscover,
|
55
|
+
:customer_id => customer.id,
|
56
|
+
:options => { :verify_card => true }
|
57
|
+
)
|
58
|
+
result.should be_success
|
59
|
+
result.payment_method.verification.status.should == Braintree::CreditCardVerification::Status::Verified
|
60
|
+
end
|
61
|
+
|
62
|
+
it "can search for transactions" do
|
63
|
+
transaction_create_result = Braintree::Transaction.sale(
|
64
|
+
:payment_method_nonce => Braintree::Test::Nonce::VisaCheckoutDiscover,
|
65
|
+
:amount => '47.00',
|
66
|
+
)
|
67
|
+
transaction_create_result.should be_success
|
68
|
+
transaction_id = transaction_create_result.transaction.id
|
69
|
+
|
70
|
+
search_results = Braintree::Transaction.search do |search|
|
71
|
+
search.id.is transaction_id
|
72
|
+
search.payment_instrument_type.is Braintree::PaymentInstrumentType::VisaCheckoutCard
|
73
|
+
end
|
74
|
+
search_results.first.id.should == transaction_id
|
75
|
+
end
|
76
|
+
|
77
|
+
it "can create transaction from nonce and vault" do
|
78
|
+
customer = Braintree::Customer.create!
|
79
|
+
|
80
|
+
result = Braintree::Transaction.sale(
|
81
|
+
:payment_method_nonce => Braintree::Test::Nonce::VisaCheckoutDiscover,
|
82
|
+
:customer_id => customer.id,
|
83
|
+
:amount => '47.00',
|
84
|
+
:options => { :store_in_vault => true },
|
85
|
+
)
|
86
|
+
result.should be_success
|
87
|
+
|
88
|
+
visa_checkout_card_details = result.transaction.visa_checkout_card_details
|
89
|
+
visa_checkout_card_details.call_id.should == "abc123"
|
90
|
+
visa_checkout_card_details.bin.should_not be_nil
|
91
|
+
visa_checkout_card_details.card_type.should_not be_nil
|
92
|
+
visa_checkout_card_details.cardholder_name.should_not be_nil
|
93
|
+
visa_checkout_card_details.commercial.should_not be_nil
|
94
|
+
visa_checkout_card_details.country_of_issuance.should_not be_nil
|
95
|
+
visa_checkout_card_details.customer_location.should_not be_nil
|
96
|
+
visa_checkout_card_details.debit.should_not be_nil
|
97
|
+
visa_checkout_card_details.durbin_regulated.should_not be_nil
|
98
|
+
visa_checkout_card_details.expiration_date.should_not be_nil
|
99
|
+
visa_checkout_card_details.expiration_month.should_not be_nil
|
100
|
+
visa_checkout_card_details.expiration_year.should_not be_nil
|
101
|
+
visa_checkout_card_details.healthcare.should_not be_nil
|
102
|
+
visa_checkout_card_details.image_url.should_not be_nil
|
103
|
+
visa_checkout_card_details.issuing_bank.should_not be_nil
|
104
|
+
visa_checkout_card_details.last_4.should_not be_nil
|
105
|
+
visa_checkout_card_details.payroll.should_not be_nil
|
106
|
+
visa_checkout_card_details.prepaid.should_not be_nil
|
107
|
+
visa_checkout_card_details.product_id.should_not be_nil
|
108
|
+
visa_checkout_card_details.token.should_not be_nil
|
109
|
+
end
|
110
|
+
end
|