braintree 2.73.0 → 2.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/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
|