braintree 2.103.0 → 3.2.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/LICENSE +1 -1
- data/braintree.gemspec +6 -3
- data/lib/braintree.rb +5 -17
- data/lib/braintree/address.rb +0 -22
- data/lib/braintree/base_module.rb +6 -0
- data/lib/braintree/bin_data.rb +9 -2
- data/lib/braintree/configuration.rb +1 -1
- data/lib/braintree/credit_card.rb +0 -75
- data/lib/braintree/credit_card_gateway.rb +4 -33
- data/lib/braintree/credit_card_verification.rb +13 -0
- data/lib/braintree/customer.rb +3 -72
- data/lib/braintree/customer_gateway.rb +0 -23
- data/lib/braintree/dispute.rb +1 -7
- data/lib/braintree/dispute/{history_event.rb → status_history.rb} +3 -1
- data/lib/braintree/dispute/transaction.rb +1 -0
- data/lib/braintree/dispute_gateway.rb +2 -7
- data/lib/braintree/error_codes.rb +144 -170
- data/lib/braintree/exceptions.rb +5 -3
- data/lib/braintree/gateway.rb +0 -14
- data/lib/braintree/{android_pay_card.rb → google_pay_card.rb} +1 -1
- data/lib/braintree/local_payment_completed.rb +1 -1
- data/lib/braintree/merchant_account_gateway.rb +2 -0
- data/lib/braintree/payment_instrument_type.rb +1 -4
- data/lib/braintree/payment_method_gateway.rb +5 -9
- data/lib/braintree/payment_method_parser.rb +1 -7
- data/lib/braintree/resource_collection.rb +8 -3
- data/lib/braintree/subscription.rb +5 -5
- data/lib/braintree/successful_result.rb +0 -1
- data/lib/braintree/test/credit_card.rb +1 -0
- data/lib/braintree/test/nonce.rb +4 -20
- data/lib/braintree/transaction.rb +12 -74
- data/lib/braintree/transaction/disbursement_details.rb +1 -0
- data/lib/braintree/transaction/{android_pay_details.rb → google_pay_details.rb} +1 -1
- data/lib/braintree/transaction/installment.rb +28 -0
- data/lib/braintree/transaction/installment/adjustment.rb +33 -0
- data/lib/braintree/transaction/paypal_details.rb +3 -0
- data/lib/braintree/transaction/subscription_details.rb +2 -0
- data/lib/braintree/transaction_gateway.rb +14 -20
- data/lib/braintree/transaction_search.rb +0 -1
- data/lib/braintree/util.rb +17 -2
- data/lib/braintree/version.rb +2 -2
- data/lib/braintree/webhook_notification.rb +0 -10
- data/lib/braintree/webhook_testing_gateway.rb +0 -43
- data/lib/braintree/xml/libxml.rb +1 -0
- data/lib/braintree/xml/parser.rb +11 -34
- data/spec/integration/braintree/address_spec.rb +2 -89
- data/spec/integration/braintree/client_api/spec_helper.rb +0 -26
- data/spec/integration/braintree/credit_card_spec.rb +6 -471
- data/spec/integration/braintree/customer_spec.rb +189 -362
- data/spec/integration/braintree/dispute_search_spec.rb +3 -3
- data/spec/integration/braintree/dispute_spec.rb +1 -2
- data/spec/integration/braintree/merchant_spec.rb +2 -2
- data/spec/integration/braintree/payment_method_spec.rb +254 -120
- data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +8 -4
- data/spec/integration/braintree/paypal_account_spec.rb +1 -1
- data/spec/integration/braintree/subscription_spec.rb +11 -16
- data/spec/integration/braintree/transaction_search_spec.rb +3 -3
- data/spec/integration/braintree/transaction_spec.rb +300 -534
- data/spec/integration/braintree/transaction_us_bank_account_spec.rb +12 -6
- data/spec/integration/spec_helper.rb +1 -4
- data/spec/spec_helper.rb +2 -11
- data/spec/unit/braintree/address_spec.rb +0 -8
- data/spec/unit/braintree/credit_card_spec.rb +3 -22
- data/spec/unit/braintree/customer_spec.rb +2 -13
- data/spec/unit/braintree/dispute_spec.rb +3 -12
- data/spec/unit/braintree/http_spec.rb +3 -3
- data/spec/unit/braintree/local_payment_completed_spec.rb +14 -0
- data/spec/unit/braintree/resource_collection_spec.rb +29 -0
- data/spec/unit/braintree/transaction/installment_spec.rb +25 -0
- data/spec/unit/braintree/transaction/paypal_details_spec.rb +59 -0
- data/spec/unit/braintree/transaction_spec.rb +1 -35
- data/spec/unit/braintree/util_spec.rb +37 -3
- data/spec/unit/braintree/webhook_notification_spec.rb +1 -1
- data/spec/unit/braintree/xml/parser_spec.rb +21 -16
- metadata +30 -30
- data/lib/braintree/amex_express_checkout_card.rb +0 -38
- data/lib/braintree/coinbase_account.rb +0 -34
- data/lib/braintree/europe_bank_account.rb +0 -36
- data/lib/braintree/europe_bank_account_gateway.rb +0 -17
- data/lib/braintree/ideal_payment.rb +0 -61
- data/lib/braintree/ideal_payment_gateway.rb +0 -19
- data/lib/braintree/masterpass_card.rb +0 -81
- data/lib/braintree/transaction/amex_express_checkout_details.rb +0 -21
- data/lib/braintree/transaction/coinbase_details.rb +0 -16
- data/lib/braintree/transaction/ideal_payment_details.rb +0 -19
- data/lib/braintree/transaction/masterpass_card_details.rb +0 -47
- data/lib/braintree/transparent_redirect.rb +0 -40
- data/lib/braintree/transparent_redirect_gateway.rb +0 -105
- data/lib/braintree/xml/rexml.rb +0 -71
- data/spec/hacks/tcp_socket.rb +0 -18
- data/spec/integration/braintree/coinbase_spec.rb +0 -34
- data/spec/integration/braintree/masterpass_card_spec.rb +0 -97
- data/spec/integration/braintree/transparent_redirect_spec.rb +0 -268
- data/spec/unit/braintree/transparent_redirect_spec.rb +0 -223
- data/spec/unit/braintree/xml/rexml_spec.rb +0 -51
data/lib/braintree/xml/rexml.rb
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# Portions of this code were copied and modified from Ruby on Rails, released
|
|
2
|
-
# under the MIT license, copyright (c) 2005-2009 David Heinemeier Hansson
|
|
3
|
-
module Braintree
|
|
4
|
-
module Xml # :nodoc:
|
|
5
|
-
module Rexml # :nodoc:
|
|
6
|
-
|
|
7
|
-
CONTENT_KEY = '__content__'.freeze
|
|
8
|
-
|
|
9
|
-
def self.parse(string)
|
|
10
|
-
require 'rexml/document' unless defined?(REXML::Document)
|
|
11
|
-
doc = REXML::Document.new(string)
|
|
12
|
-
_merge_element!({}, doc.root)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def self._merge_element!(hash, element)
|
|
16
|
-
_merge!(hash, element.name, _collapse(element))
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def self._collapse(element)
|
|
20
|
-
hash = _get_attributes(element)
|
|
21
|
-
|
|
22
|
-
if element.has_elements?
|
|
23
|
-
element.each_element {|child| _merge_element!(hash, child) }
|
|
24
|
-
_merge_texts!(hash, element) unless _empty_content?(element)
|
|
25
|
-
hash
|
|
26
|
-
else
|
|
27
|
-
_merge_texts!(hash, element)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def self._merge_texts!(hash, element)
|
|
32
|
-
unless element.has_text?
|
|
33
|
-
hash
|
|
34
|
-
else
|
|
35
|
-
# must use value to prevent double-escaping
|
|
36
|
-
_merge!(
|
|
37
|
-
hash,
|
|
38
|
-
CONTENT_KEY,
|
|
39
|
-
element.texts.map { |t| t.value}.join
|
|
40
|
-
)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def self._merge!(hash, key, value)
|
|
45
|
-
if hash.has_key?(key)
|
|
46
|
-
if hash[key].instance_of?(Array)
|
|
47
|
-
hash[key] << value
|
|
48
|
-
else
|
|
49
|
-
hash[key] = [hash[key], value]
|
|
50
|
-
end
|
|
51
|
-
elsif value.instance_of?(Array)
|
|
52
|
-
hash[key] = [value]
|
|
53
|
-
else
|
|
54
|
-
hash[key] = value
|
|
55
|
-
end
|
|
56
|
-
hash
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def self._get_attributes(element)
|
|
60
|
-
attributes = {}
|
|
61
|
-
element.attributes.each { |n,v| attributes[n] = v }
|
|
62
|
-
attributes
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def self._empty_content?(element)
|
|
66
|
-
element.texts.join.strip == ""
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
data/spec/hacks/tcp_socket.rb
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require 'timeout'
|
|
2
|
-
require 'socket'
|
|
3
|
-
|
|
4
|
-
TCPSocket.class_eval do
|
|
5
|
-
def self.wait_for_service(options)
|
|
6
|
-
Timeout::timeout(options[:timeout] || 20) do
|
|
7
|
-
loop do
|
|
8
|
-
begin
|
|
9
|
-
socket = TCPSocket.new(options[:host], options[:port])
|
|
10
|
-
socket.close
|
|
11
|
-
return
|
|
12
|
-
rescue Errno::ECONNREFUSED
|
|
13
|
-
sleep 0.5
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "Coinbase" do
|
|
4
|
-
|
|
5
|
-
def assert_valid_coinbase_attrs(account_or_details)
|
|
6
|
-
[:user_id, :user_name, :user_email].each do |attr|
|
|
7
|
-
[nil,""].should_not include(account_or_details.send(attr))
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "is no longer supported with transaction#create" do
|
|
12
|
-
result = Braintree::Transaction.sale(:payment_method_nonce => Braintree::Test::Nonce::Coinbase, :amount => "0.02")
|
|
13
|
-
result.should_not be_success
|
|
14
|
-
|
|
15
|
-
result.errors.for(:transaction).first.code.should == Braintree::ErrorCodes::PaymentMethod::PaymentMethodNoLongerSupported
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "is no longer supported for vaulting" do
|
|
19
|
-
customer = Braintree::Customer.create!
|
|
20
|
-
result = Braintree::PaymentMethod.create(:customer_id => customer.id, :payment_method_nonce => Braintree::Test::Nonce::Coinbase)
|
|
21
|
-
result.should_not be_success
|
|
22
|
-
|
|
23
|
-
result.errors.for(:coinbase_account).first.code.should == Braintree::ErrorCodes::PaymentMethod::PaymentMethodNoLongerSupported
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "is no longer supported when creating a Customer with a Coinbase payment method nonce" do
|
|
27
|
-
expect do
|
|
28
|
-
Braintree::Customer.create!(:payment_method_nonce => Braintree::Test::Nonce::Coinbase)
|
|
29
|
-
end.to raise_error { |error|
|
|
30
|
-
error.should be_a(Braintree::ValidationsFailed)
|
|
31
|
-
error.error_result.errors.for(:coinbase_account).first.code.should == Braintree::ErrorCodes::PaymentMethod::PaymentMethodNoLongerSupported
|
|
32
|
-
}
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,97 +0,0 @@
|
|
|
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
|
-
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
-
|
|
3
|
-
describe Braintree::TransparentRedirect do
|
|
4
|
-
it "raises a DownForMaintenanceError when app is in maintenance mode on TR requests" do
|
|
5
|
-
tr_data = Braintree::TransparentRedirect.create_customer_data({:redirect_url => "http://example.com"}.merge({}))
|
|
6
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, {}, Braintree::Configuration.instantiate.base_merchant_url + "/test/maintenance")
|
|
7
|
-
expect do
|
|
8
|
-
Braintree::Customer.create_from_transparent_redirect(query_string_response)
|
|
9
|
-
end.to raise_error(Braintree::DownForMaintenanceError)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "raises a DownForMaintenanceError when the request times out", :if => ENV['UNICORN'] do
|
|
13
|
-
tr_data = Braintree::TransparentRedirect.create_customer_data({:redirect_url => "http://example.com"}.merge({}))
|
|
14
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, {}, Braintree::Configuration.instantiate.base_merchant_url + "/test/die")
|
|
15
|
-
expect do
|
|
16
|
-
Braintree::Customer.create_from_transparent_redirect(query_string_response)
|
|
17
|
-
end.to raise_error(Braintree::DownForMaintenanceError)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "raises an AuthenticationError when authentication fails on TR requests" do
|
|
21
|
-
SpecHelper.using_configuration(:private_key => "incorrect") do
|
|
22
|
-
tr_data = Braintree::TransparentRedirect.create_customer_data({:redirect_url => "http://example.com"}.merge({}))
|
|
23
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, {}, Braintree::Customer.create_customer_url)
|
|
24
|
-
expect do
|
|
25
|
-
Braintree::Customer.create_from_transparent_redirect(query_string_response)
|
|
26
|
-
end.to raise_error(Braintree::AuthenticationError)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
describe "self.confirm" do
|
|
31
|
-
context "transaction" do
|
|
32
|
-
it "successfully confirms a transaction create" do
|
|
33
|
-
params = {
|
|
34
|
-
:transaction => {
|
|
35
|
-
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
|
36
|
-
:credit_card => {
|
|
37
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
|
38
|
-
:expiration_date => "05/2009"
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
tr_data_params = {
|
|
43
|
-
:transaction => {
|
|
44
|
-
:type => "sale"
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
tr_data = Braintree::TransparentRedirect.transaction_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
|
|
48
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
49
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
50
|
-
|
|
51
|
-
result.success?.should == true
|
|
52
|
-
transaction = result.transaction
|
|
53
|
-
transaction.type.should == "sale"
|
|
54
|
-
transaction.amount.should == BigDecimal("1000.00")
|
|
55
|
-
transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
|
|
56
|
-
transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
|
|
57
|
-
transaction.credit_card_details.expiration_date.should == "05/2009"
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "allows specifying a service fee" do
|
|
61
|
-
params = {
|
|
62
|
-
:transaction => {
|
|
63
|
-
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
|
64
|
-
:merchant_account_id => SpecHelper::NonDefaultSubMerchantAccountId,
|
|
65
|
-
:credit_card => {
|
|
66
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
|
67
|
-
:expiration_date => "05/2009"
|
|
68
|
-
},
|
|
69
|
-
:service_fee_amount => "1.00"
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
tr_data_params = {
|
|
73
|
-
:transaction => {
|
|
74
|
-
:type => "sale"
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
tr_data = Braintree::TransparentRedirect.transaction_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
|
|
78
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
79
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
80
|
-
result.success?.should == true
|
|
81
|
-
result.transaction.service_fee_amount.should == BigDecimal("1.00")
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "returns an error when there's an error" do
|
|
85
|
-
params = {
|
|
86
|
-
:transaction => {
|
|
87
|
-
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
|
88
|
-
:credit_card => {
|
|
89
|
-
:number => "abc",
|
|
90
|
-
:expiration_date => "05/2009"
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
tr_data_params = {
|
|
95
|
-
:transaction => {
|
|
96
|
-
:type => "sale"
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
tr_data = Braintree::TransparentRedirect.transaction_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
|
|
100
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
101
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
102
|
-
|
|
103
|
-
result.success?.should == false
|
|
104
|
-
result.errors.for(:transaction).for(:credit_card).on(:number).size.should > 0
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
context "customer" do
|
|
109
|
-
it "successfully confirms a customer create" do
|
|
110
|
-
params = {
|
|
111
|
-
:customer => {
|
|
112
|
-
:first_name => "John",
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
tr_data_params = {
|
|
116
|
-
:customer => {
|
|
117
|
-
:last_name => "Doe",
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
tr_data = Braintree::TransparentRedirect.create_customer_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
|
|
121
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
122
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
123
|
-
|
|
124
|
-
result.success?.should == true
|
|
125
|
-
customer = result.customer
|
|
126
|
-
customer.first_name.should == "John"
|
|
127
|
-
customer.last_name.should == "Doe"
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "successfully confirms a customer update" do
|
|
131
|
-
customer = Braintree::Customer.create(
|
|
132
|
-
:first_name => "Joe",
|
|
133
|
-
:last_name => "Cool"
|
|
134
|
-
).customer
|
|
135
|
-
|
|
136
|
-
params = {
|
|
137
|
-
:customer => {
|
|
138
|
-
:first_name => "John",
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
tr_data_params = {
|
|
142
|
-
:customer_id => customer.id,
|
|
143
|
-
:customer => {
|
|
144
|
-
:last_name => "Uncool",
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
tr_data = Braintree::TransparentRedirect.update_customer_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
|
|
148
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
149
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
150
|
-
|
|
151
|
-
result.success?.should == true
|
|
152
|
-
customer = Braintree::Customer.find(customer.id)
|
|
153
|
-
customer.first_name.should == "John"
|
|
154
|
-
customer.last_name.should == "Uncool"
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "returns an error result when there are errors" do
|
|
158
|
-
params = {
|
|
159
|
-
:customer => {
|
|
160
|
-
:first_name => "John",
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
tr_data_params = {
|
|
164
|
-
:customer => {
|
|
165
|
-
:last_name => "Doe",
|
|
166
|
-
:email => "invalid"
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
tr_data = Braintree::TransparentRedirect.create_customer_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
|
|
170
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
171
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
172
|
-
|
|
173
|
-
result.success?.should == false
|
|
174
|
-
result.errors.for(:customer).on(:email).size.should > 0
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
context "credit_card" do
|
|
179
|
-
it "successfully confirms a credit_card create" do
|
|
180
|
-
customer = Braintree::Customer.create(:first_name => "John", :last_name => "Doe").customer
|
|
181
|
-
|
|
182
|
-
params = {
|
|
183
|
-
:credit_card => {
|
|
184
|
-
:cardholder_name => "John Doe"
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
tr_data_params = {
|
|
188
|
-
:credit_card => {
|
|
189
|
-
:customer_id => customer.id,
|
|
190
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
|
191
|
-
:expiration_date => "10/10"
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
tr_data = Braintree::TransparentRedirect.create_credit_card_data(
|
|
195
|
-
{:redirect_url => "http://example.com"}.merge(tr_data_params)
|
|
196
|
-
)
|
|
197
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
198
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
199
|
-
|
|
200
|
-
result.success?.should == true
|
|
201
|
-
credit_card = result.credit_card
|
|
202
|
-
credit_card.cardholder_name.should == "John Doe"
|
|
203
|
-
credit_card.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
|
|
204
|
-
credit_card.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
|
|
205
|
-
credit_card.expiration_date.should == "10/2010"
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
it "successfully confirms a credit_card update" do
|
|
209
|
-
customer = Braintree::Customer.create(:first_name => "John", :last_name => "Doe").customer
|
|
210
|
-
credit_card = Braintree::CreditCard.create(
|
|
211
|
-
:customer_id => customer.id,
|
|
212
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
|
213
|
-
:expiration_date => "10/10"
|
|
214
|
-
).credit_card
|
|
215
|
-
|
|
216
|
-
params = {
|
|
217
|
-
:credit_card => {
|
|
218
|
-
:cardholder_name => "John Doe"
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
tr_data_params = {
|
|
222
|
-
:payment_method_token => credit_card.token,
|
|
223
|
-
:credit_card => {
|
|
224
|
-
:number => Braintree::Test::CreditCardNumbers::MasterCard,
|
|
225
|
-
:expiration_date => "11/11"
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
tr_data = Braintree::TransparentRedirect.update_credit_card_data(
|
|
229
|
-
{:redirect_url => "http://example.com"}.merge(tr_data_params)
|
|
230
|
-
)
|
|
231
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
232
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
233
|
-
|
|
234
|
-
result.success?.should == true
|
|
235
|
-
credit_card = result.credit_card
|
|
236
|
-
credit_card.cardholder_name.should == "John Doe"
|
|
237
|
-
credit_card.bin.should == Braintree::Test::CreditCardNumbers::MasterCard[0, 6]
|
|
238
|
-
credit_card.last_4.should == Braintree::Test::CreditCardNumbers::MasterCard[-4..-1]
|
|
239
|
-
credit_card.expiration_date.should == "11/2011"
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it "returns an error result where there are errors" do
|
|
243
|
-
customer = Braintree::Customer.create(:first_name => "John", :last_name => "Doe").customer
|
|
244
|
-
|
|
245
|
-
params = {
|
|
246
|
-
:credit_card => {
|
|
247
|
-
:cardholder_name => "John Doe"
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
tr_data_params = {
|
|
251
|
-
:credit_card => {
|
|
252
|
-
:customer_id => customer.id,
|
|
253
|
-
:number => Braintree::Test::CreditCardNumbers::Visa,
|
|
254
|
-
:expiration_date => "123"
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
tr_data = Braintree::TransparentRedirect.create_credit_card_data(
|
|
258
|
-
{:redirect_url => "http://example.com"}.merge(tr_data_params)
|
|
259
|
-
)
|
|
260
|
-
query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params)
|
|
261
|
-
result = Braintree::TransparentRedirect.confirm(query_string_response)
|
|
262
|
-
|
|
263
|
-
result.success?.should == false
|
|
264
|
-
result.errors.for(:credit_card).size.should > 0
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
|
-
end
|
|
268
|
-
end
|