braintree 2.103.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/braintree.gemspec +6 -3
  4. data/lib/braintree.rb +5 -17
  5. data/lib/braintree/address.rb +0 -22
  6. data/lib/braintree/base_module.rb +6 -0
  7. data/lib/braintree/bin_data.rb +9 -2
  8. data/lib/braintree/configuration.rb +1 -1
  9. data/lib/braintree/credit_card.rb +0 -75
  10. data/lib/braintree/credit_card_gateway.rb +4 -33
  11. data/lib/braintree/credit_card_verification.rb +13 -0
  12. data/lib/braintree/customer.rb +3 -72
  13. data/lib/braintree/customer_gateway.rb +0 -23
  14. data/lib/braintree/dispute.rb +1 -7
  15. data/lib/braintree/dispute/{history_event.rb → status_history.rb} +3 -1
  16. data/lib/braintree/dispute/transaction.rb +1 -0
  17. data/lib/braintree/dispute_gateway.rb +2 -7
  18. data/lib/braintree/error_codes.rb +144 -170
  19. data/lib/braintree/exceptions.rb +5 -3
  20. data/lib/braintree/gateway.rb +0 -14
  21. data/lib/braintree/{android_pay_card.rb → google_pay_card.rb} +1 -1
  22. data/lib/braintree/local_payment_completed.rb +1 -1
  23. data/lib/braintree/merchant_account_gateway.rb +2 -0
  24. data/lib/braintree/payment_instrument_type.rb +1 -4
  25. data/lib/braintree/payment_method_gateway.rb +5 -9
  26. data/lib/braintree/payment_method_parser.rb +1 -7
  27. data/lib/braintree/resource_collection.rb +8 -3
  28. data/lib/braintree/subscription.rb +5 -5
  29. data/lib/braintree/successful_result.rb +0 -1
  30. data/lib/braintree/test/credit_card.rb +1 -0
  31. data/lib/braintree/test/nonce.rb +4 -20
  32. data/lib/braintree/transaction.rb +12 -74
  33. data/lib/braintree/transaction/disbursement_details.rb +1 -0
  34. data/lib/braintree/transaction/{android_pay_details.rb → google_pay_details.rb} +1 -1
  35. data/lib/braintree/transaction/installment.rb +28 -0
  36. data/lib/braintree/transaction/installment/adjustment.rb +33 -0
  37. data/lib/braintree/transaction/paypal_details.rb +3 -0
  38. data/lib/braintree/transaction/subscription_details.rb +2 -0
  39. data/lib/braintree/transaction_gateway.rb +14 -20
  40. data/lib/braintree/transaction_search.rb +0 -1
  41. data/lib/braintree/util.rb +17 -2
  42. data/lib/braintree/version.rb +2 -2
  43. data/lib/braintree/webhook_notification.rb +0 -10
  44. data/lib/braintree/webhook_testing_gateway.rb +0 -43
  45. data/lib/braintree/xml/libxml.rb +1 -0
  46. data/lib/braintree/xml/parser.rb +11 -34
  47. data/spec/integration/braintree/address_spec.rb +2 -89
  48. data/spec/integration/braintree/client_api/spec_helper.rb +0 -26
  49. data/spec/integration/braintree/credit_card_spec.rb +6 -471
  50. data/spec/integration/braintree/customer_spec.rb +189 -362
  51. data/spec/integration/braintree/dispute_search_spec.rb +3 -3
  52. data/spec/integration/braintree/dispute_spec.rb +1 -2
  53. data/spec/integration/braintree/merchant_spec.rb +2 -2
  54. data/spec/integration/braintree/payment_method_spec.rb +254 -120
  55. data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +8 -4
  56. data/spec/integration/braintree/paypal_account_spec.rb +1 -1
  57. data/spec/integration/braintree/subscription_spec.rb +11 -16
  58. data/spec/integration/braintree/transaction_search_spec.rb +3 -3
  59. data/spec/integration/braintree/transaction_spec.rb +300 -534
  60. data/spec/integration/braintree/transaction_us_bank_account_spec.rb +12 -6
  61. data/spec/integration/spec_helper.rb +1 -4
  62. data/spec/spec_helper.rb +2 -11
  63. data/spec/unit/braintree/address_spec.rb +0 -8
  64. data/spec/unit/braintree/credit_card_spec.rb +3 -22
  65. data/spec/unit/braintree/customer_spec.rb +2 -13
  66. data/spec/unit/braintree/dispute_spec.rb +3 -12
  67. data/spec/unit/braintree/http_spec.rb +3 -3
  68. data/spec/unit/braintree/local_payment_completed_spec.rb +14 -0
  69. data/spec/unit/braintree/resource_collection_spec.rb +29 -0
  70. data/spec/unit/braintree/transaction/installment_spec.rb +25 -0
  71. data/spec/unit/braintree/transaction/paypal_details_spec.rb +59 -0
  72. data/spec/unit/braintree/transaction_spec.rb +1 -35
  73. data/spec/unit/braintree/util_spec.rb +37 -3
  74. data/spec/unit/braintree/webhook_notification_spec.rb +1 -1
  75. data/spec/unit/braintree/xml/parser_spec.rb +21 -16
  76. metadata +30 -30
  77. data/lib/braintree/amex_express_checkout_card.rb +0 -38
  78. data/lib/braintree/coinbase_account.rb +0 -34
  79. data/lib/braintree/europe_bank_account.rb +0 -36
  80. data/lib/braintree/europe_bank_account_gateway.rb +0 -17
  81. data/lib/braintree/ideal_payment.rb +0 -61
  82. data/lib/braintree/ideal_payment_gateway.rb +0 -19
  83. data/lib/braintree/masterpass_card.rb +0 -81
  84. data/lib/braintree/transaction/amex_express_checkout_details.rb +0 -21
  85. data/lib/braintree/transaction/coinbase_details.rb +0 -16
  86. data/lib/braintree/transaction/ideal_payment_details.rb +0 -19
  87. data/lib/braintree/transaction/masterpass_card_details.rb +0 -47
  88. data/lib/braintree/transparent_redirect.rb +0 -40
  89. data/lib/braintree/transparent_redirect_gateway.rb +0 -105
  90. data/lib/braintree/xml/rexml.rb +0 -71
  91. data/spec/hacks/tcp_socket.rb +0 -18
  92. data/spec/integration/braintree/coinbase_spec.rb +0 -34
  93. data/spec/integration/braintree/masterpass_card_spec.rb +0 -97
  94. data/spec/integration/braintree/transparent_redirect_spec.rb +0 -268
  95. data/spec/unit/braintree/transparent_redirect_spec.rb +0 -223
  96. data/spec/unit/braintree/xml/rexml_spec.rb +0 -51
@@ -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
-
@@ -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