braintree 4.17.0 → 4.19.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/braintree/advanced_search.rb +1 -2
  3. data/lib/braintree/configuration.rb +1 -1
  4. data/lib/braintree/disbursement.rb +1 -1
  5. data/lib/braintree/dispute.rb +1 -0
  6. data/lib/braintree/error_codes.rb +4 -0
  7. data/lib/braintree/http.rb +2 -4
  8. data/lib/braintree/transaction/package_details.rb +16 -0
  9. data/lib/braintree/transaction.rb +10 -0
  10. data/lib/braintree/transaction_gateway.rb +21 -3
  11. data/lib/braintree/transaction_line_item.rb +11 -8
  12. data/lib/braintree/util.rb +1 -1
  13. data/lib/braintree/version.rb +1 -1
  14. data/lib/braintree/webhook_notification.rb +4 -3
  15. data/lib/braintree/webhook_testing_gateway.rb +78 -6
  16. data/lib/braintree/xml/parser.rb +2 -2
  17. data/lib/braintree.rb +1 -0
  18. data/spec/integration/braintree/address_spec.rb +3 -3
  19. data/spec/integration/braintree/advanced_search_spec.rb +3 -3
  20. data/spec/integration/braintree/client_api/client_token_spec.rb +0 -2
  21. data/spec/integration/braintree/client_api/spec_helper.rb +1 -1
  22. data/spec/integration/braintree/credit_card_spec.rb +11 -15
  23. data/spec/integration/braintree/credit_card_verification_spec.rb +2 -2
  24. data/spec/integration/braintree/customer_spec.rb +12 -12
  25. data/spec/integration/braintree/dispute_search_spec.rb +0 -1
  26. data/spec/integration/braintree/dispute_spec.rb +1 -1
  27. data/spec/integration/braintree/document_upload_spec.rb +1 -1
  28. data/spec/integration/braintree/http_spec.rb +0 -2
  29. data/spec/integration/braintree/oauth_spec.rb +1 -1
  30. data/spec/integration/braintree/package_tracking_spec.rb +111 -0
  31. data/spec/integration/braintree/payment_method_nonce_spec.rb +2 -2
  32. data/spec/integration/braintree/payment_method_spec.rb +12 -14
  33. data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +3 -3
  34. data/spec/integration/braintree/paypal_account_spec.rb +6 -6
  35. data/spec/integration/braintree/plan_spec.rb +0 -1
  36. data/spec/integration/braintree/sepa_direct_debit_account_spec.rb +0 -2
  37. data/spec/integration/braintree/subscription_spec.rb +5 -6
  38. data/spec/integration/braintree/transaction_line_item_spec.rb +6 -0
  39. data/spec/integration/braintree/transaction_search_spec.rb +3 -7
  40. data/spec/integration/braintree/transaction_spec.rb +117 -49
  41. data/spec/unit/braintree/client_token_spec.rb +1 -1
  42. data/spec/unit/braintree/digest_spec.rb +0 -1
  43. data/spec/unit/braintree/error_result_spec.rb +1 -1
  44. data/spec/unit/braintree/package_tracking_spec.rb +74 -0
  45. data/spec/unit/braintree/paypal_account_spec.rb +1 -1
  46. data/spec/unit/braintree/transaction_gateway_spec.rb +3 -3
  47. data/spec/unit/braintree/transaction_spec.rb +2 -2
  48. data/spec/unit/braintree/webhook_notification_spec.rb +16 -0
  49. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02bb65b55ac949e73761f1a9ded2f1cf844bc81b7bbfc48d39e080387166e4d2
4
- data.tar.gz: b3975e3c6a0d415544cc643aaa2471f3efe532537a0ad1a8175dcf42767b2684
3
+ metadata.gz: f43df747b2db22253268db6e5f01b79ea162b6c0911125b056b7bab73684dd3f
4
+ data.tar.gz: 6fad0280817f00e0c0e3e8c6ef3761a5bd20d3e3a777a9f91182e556fad59aba
5
5
  SHA512:
6
- metadata.gz: 6eb74dc8f70c828d8112b177bd9c424816626064fbfba2615d7246f9bae54513c5637b43be0c70a36e4dff5ac0b00aefbf208f66549829e64d37e30a37f0920a
7
- data.tar.gz: d6af576d6a66816007de302db284e2bb456c1a37347eadac4df3ba483d5ab728e2a04dc26f2d98be91082c1a4b30790417e2d102bfd8b054b524c4b6d40174d5
6
+ metadata.gz: 7e6aa6b5b10734d82c66f9f7f315c5759700412ddda2642e2424f71c8be71aca06d35aa77b69936514c8e3d0ddc2e5dd24d479e8c4359ff9d67e43222ebe0256
7
+ data.tar.gz: f762c62cadc6476aebfc9f0f2aee72bd254b32b93c1c069c22c67661482ac433b2598ff1f86f2f1cad943dcf28878bac4f3293025d7b45e26cb34aec3c6fbc81
@@ -80,8 +80,7 @@ module Braintree
80
80
  operators :is
81
81
 
82
82
  def between(min, max)
83
- self >= min
84
- self <= max
83
+ self >= min && self <= max
85
84
  end
86
85
 
87
86
  def >=(min)
@@ -72,7 +72,7 @@ module Braintree
72
72
  end
73
73
 
74
74
  def self.instantiate
75
- config = new(
75
+ new(
76
76
  :custom_user_agent => @custom_user_agent,
77
77
  :endpoint => @endpoint,
78
78
  :environment => environment,
@@ -29,7 +29,7 @@ module Braintree
29
29
  end
30
30
 
31
31
  def transactions
32
- transactions = @gateway.transaction.search do |search|
32
+ @gateway.transaction.search do |search|
33
33
  search.ids.in transaction_ids
34
34
  end
35
35
  end
@@ -43,6 +43,7 @@ module Braintree
43
43
  Expired = "expired"
44
44
  Open = "open"
45
45
  Lost = "lost"
46
+ UnderReview = "under_review"
46
47
  Won = "won"
47
48
 
48
49
  All = constants.map { |c| const_get(c) }
@@ -561,6 +561,10 @@ module Braintree
561
561
  UnitTaxAmountCannotBeNegative = "95826"
562
562
  UnitTaxAmountFormatIsInvalid = "95824"
563
563
  UnitTaxAmountIsTooLarge = "95825"
564
+ UPCCodeIsMissing = "95830"
565
+ UPCCodeIsTooLong = "95831"
566
+ UPCTypeIsMissing = "95832"
567
+ UPCTypeIsInvalid = "95833"
564
568
  end
565
569
 
566
570
  module Merchant
@@ -8,7 +8,6 @@ module Braintree
8
8
  end
9
9
 
10
10
  def delete(path, query_params = {})
11
- full_path = path + _build_query_string(query_params)
12
11
  response = _http_do Net::HTTP::Delete, path
13
12
  if response.code.to_i == 200 || response.code.to_i == 204
14
13
  true
@@ -20,7 +19,6 @@ module Braintree
20
19
  end
21
20
 
22
21
  def get(path, query_params = {})
23
- full_path = path + _build_query_string(query_params)
24
22
  response = _http_do Net::HTTP::Get, path
25
23
  if response.code.to_i == 200 || response.code.to_i == 422
26
24
  Xml.hash_from_xml(_body(response))
@@ -69,7 +67,7 @@ module Braintree
69
67
 
70
68
  def _setup_connection(server = @config.server, port = @config.port)
71
69
  if @config.proxy_address
72
- connection = Net::HTTP.new(
70
+ Net::HTTP.new(
73
71
  server,
74
72
  port,
75
73
  @config.proxy_address,
@@ -78,7 +76,7 @@ module Braintree
78
76
  @config.proxy_pass,
79
77
  )
80
78
  else
81
- connection = Net::HTTP.new(server, port)
79
+ Net::HTTP.new(server, port)
82
80
  end
83
81
  end
84
82
 
@@ -0,0 +1,16 @@
1
+ module Braintree
2
+ class Transaction
3
+ class PackageDetails
4
+ include BaseModule
5
+
6
+ attr_reader :carrier
7
+ attr_reader :id
8
+ attr_reader :paypal_tracking_id
9
+ attr_reader :tracking_number
10
+
11
+ def initialize(attributes)
12
+ set_instance_variables_from_hash attributes unless attributes.nil?
13
+ end
14
+ end
15
+ end
16
+ end
@@ -138,6 +138,7 @@ module Braintree
138
138
  attr_reader :network_token_details
139
139
  attr_reader :network_transaction_id
140
140
  attr_reader :order_id
141
+ attr_reader :packages
141
142
  attr_reader :partial_settlement_transaction_ids
142
143
  attr_reader :payment_instrument_type
143
144
  attr_reader :payment_receipt
@@ -284,6 +285,14 @@ module Braintree
284
285
  return_object_or_raise(:transaction) { update_details(*args) }
285
286
  end
286
287
 
288
+ def self.package_tracking(*args)
289
+ Configuration.gateway.transaction.package_tracking(*args)
290
+ end
291
+
292
+ def self.package_tracking!(*args)
293
+ Configuration.gateway.transaction.package_tracking!(*args)
294
+ end
295
+
287
296
  def self.submit_for_partial_settlement(*args)
288
297
  Configuration.gateway.transaction.submit_for_partial_settlement(*args)
289
298
  end
@@ -325,6 +334,7 @@ module Braintree
325
334
  @sca_exemption_requested = attributes[:sca_exemption_requested]
326
335
  @sepa_direct_debit_account_details = SepaDirectDebitAccountDetails.new(@sepa_debit_account_detail)
327
336
  @service_fee_amount = Util.to_big_decimal(service_fee_amount)
337
+ @packages = attributes[:shipments] ? attributes[:shipments].map { |pd| PackageDetails.new(pd) } : []
328
338
  @shipping_details = AddressDetails.new(@shipping)
329
339
  @status_history = attributes[:status_history] ? attributes[:status_history].map { |s| StatusDetails.new(s) } : []
330
340
  @subscription_details = SubscriptionDetails.new(@subscription)
@@ -112,6 +112,16 @@ module Braintree
112
112
  return_object_or_raise(:transaction) { sale(*args) }
113
113
  end
114
114
 
115
+ def package_tracking(transaction_id, package_tracking_request)
116
+ raise ArgumentError, "transaction_id is invalid" unless transaction_id =~ /\A[0-9a-z]+\z/
117
+ Util.verify_keys(TransactionGateway._package_tracking_request_signature, package_tracking_request)
118
+ _do_create "/transactions/#{transaction_id}/shipments", :shipment => package_tracking_request
119
+ end
120
+
121
+ def package_tracking!(*args)
122
+ return_object_or_raise(:transaction) { package_tracking(*args) }
123
+ end
124
+
115
125
  def search(&block)
116
126
  search = TransactionSearch.new
117
127
  block.call(search) if block
@@ -187,6 +197,14 @@ module Braintree
187
197
  return_object_or_raise(:transaction) { void(*args) }
188
198
  end
189
199
 
200
+ def self._package_tracking_request_signature
201
+ [
202
+ :carrier,
203
+ {:line_items => [:commodity_code, :description, :discount_amount, :image_url, :kind, :name, :product_code, :quantity, :tax_amount, :total_amount, :unit_amount, :unit_of_measure, :unit_tax_amount, :upc_code, :upc_type, :url]},
204
+ :notify_payer, :tracking_number,
205
+ ]
206
+ end
207
+
190
208
  def self._clone_signature
191
209
  [:amount, :channel, {:options => [:submit_for_settlement]}]
192
210
  end
@@ -204,7 +222,7 @@ module Braintree
204
222
  :ships_from_postal_code, :tax_amount, :tax_exempt, :three_d_secure_authentication_id,:three_d_secure_token, #Deprecated
205
223
  :transaction_source, :type, :venmo_sdk_payment_method_code, # Deprecated
206
224
  :sca_exemption, :currency_iso_code, :exchange_rate_quote_id,
207
- {:line_items => [:quantity, :name, :description, :kind, :unit_amount, :unit_tax_amount, :total_amount, :discount_amount, :tax_amount, :unit_of_measure, :product_code, :commodity_code, :url]},
225
+ {:line_items => [:commodity_code, :description, :discount_amount, :image_url, :kind, :name, :product_code, :quantity, :tax_amount, :total_amount, :unit_amount, :unit_of_measure, :unit_tax_amount, :upc_code, :upc_type, :url]},
208
226
  {:risk_data => [:customer_browser, :customer_device_id, :customer_ip, :customer_location_zip, :customer_tenure]},
209
227
  {:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, {:payment_reader_card_details => [:encrypted_card_data, :key_serial_number]}, {:network_tokenization_attributes => [:cryptogram, :ecommerce_indicator, :token_requestor_id]}]},
210
228
  {:customer => [:id, :company, :email, :fax, :first_name, :last_name, :phone, :website]},
@@ -244,7 +262,7 @@ module Braintree
244
262
  {:three_d_secure => [:required]},
245
263
  {:amex_rewards => [:request_id, :points, :currency_amount, :currency_iso_code]},
246
264
  {:venmo => [:profile_id]},
247
- {:credit_card => [:account_type]},
265
+ {:credit_card => [:account_type, :process_debit_as_credit]},
248
266
  ]
249
267
  },
250
268
  {:external_vault => [
@@ -300,7 +318,7 @@ module Braintree
300
318
  :discount_amount,
301
319
  :shipping_amount,
302
320
  :ships_from_postal_code,
303
- :line_items => [:commodity_code, :description, :discount_amount, :kind, :name, :product_code, :quantity, :tax_amount, :total_amount, :unit_amount, :unit_of_measure, :unit_tax_amount, :url, :tax_amount],
321
+ :line_items => [:commodity_code, :description, :discount_amount, :image_url, :kind, :name, :product_code, :quantity, :tax_amount, :total_amount, :unit_amount, :unit_of_measure, :unit_tax_amount, :upc_code, :upc_type, :url],
304
322
  ]
305
323
  end
306
324
 
@@ -1,18 +1,21 @@
1
1
  module Braintree
2
2
  class TransactionLineItem
3
3
  include BaseModule
4
- attr_reader :quantity
5
- attr_reader :name
4
+ attr_reader :commodity_code
6
5
  attr_reader :description
7
- attr_reader :kind
8
- attr_reader :unit_amount
9
- attr_reader :unit_tax_amount
10
- attr_reader :unit_of_measure
11
6
  attr_reader :discount_amount
7
+ attr_reader :image_url
8
+ attr_reader :kind
9
+ attr_reader :name
10
+ attr_reader :product_code
11
+ attr_reader :quantity
12
12
  attr_reader :tax_amount
13
13
  attr_reader :total_amount
14
- attr_reader :product_code
15
- attr_reader :commodity_code
14
+ attr_reader :unit_amount
15
+ attr_reader :unit_of_measure
16
+ attr_reader :unit_tax_amount
17
+ attr_reader :upc_code
18
+ attr_reader :upc_type
16
19
  attr_reader :url
17
20
 
18
21
  def initialize(gateway, attributes)
@@ -191,7 +191,7 @@ module Braintree
191
191
  def self._get_invalid_keys(valid_keys, hash)
192
192
  flattened_valid_keys = _flatten_valid_keys(valid_keys)
193
193
  keys = _flatten_hash_keys(hash) - flattened_valid_keys
194
- keys = _remove_wildcard_keys(flattened_valid_keys, keys)
194
+ _remove_wildcard_keys(flattened_valid_keys, keys)
195
195
  end
196
196
 
197
197
  module IdEquality
@@ -1,7 +1,7 @@
1
1
  module Braintree
2
2
  module Version
3
3
  Major = 4
4
- Minor = 17
4
+ Minor = 19
5
5
  Tiny = 0
6
6
 
7
7
  String = "#{Major}.#{Minor}.#{Tiny}"
@@ -15,13 +15,14 @@ module Braintree
15
15
  Disbursement = "disbursement"
16
16
  DisbursementException = "disbursement_exception"
17
17
 
18
- DisputeOpened = "dispute_opened"
19
- DisputeLost = "dispute_lost"
20
- DisputeWon = "dispute_won"
21
18
  DisputeAccepted = "dispute_accepted"
22
19
  DisputeAutoAccepted = "dispute_auto_accepted"
23
20
  DisputeDisputed = "dispute_disputed"
24
21
  DisputeExpired = "dispute_expired"
22
+ DisputeLost = "dispute_lost"
23
+ DisputeOpened = "dispute_opened"
24
+ DisputeUnderReview = "dispute_under_review"
25
+ DisputeWon = "dispute_won"
25
26
 
26
27
  GrantedPaymentInstrumentRevoked = "granted_payment_instrument_revoked"
27
28
 
@@ -34,12 +34,6 @@ module Braintree
34
34
  case kind
35
35
  when Braintree::WebhookNotification::Kind::Check
36
36
  _check
37
- when Braintree::WebhookNotification::Kind::DisputeOpened
38
- _dispute_opened_sample_xml(id)
39
- when Braintree::WebhookNotification::Kind::DisputeLost
40
- _dispute_lost_sample_xml(id)
41
- when Braintree::WebhookNotification::Kind::DisputeWon
42
- _dispute_won_sample_xml(id)
43
37
  when Braintree::WebhookNotification::Kind::DisputeAccepted
44
38
  _dispute_accepted_sample_xml(id)
45
39
  when Braintree::WebhookNotification::Kind::DisputeAutoAccepted
@@ -48,6 +42,14 @@ module Braintree
48
42
  _dispute_disputed_sample_xml(id)
49
43
  when Braintree::WebhookNotification::Kind::DisputeExpired
50
44
  _dispute_expired_sample_xml(id)
45
+ when Braintree::WebhookNotification::Kind::DisputeLost
46
+ _dispute_lost_sample_xml(id)
47
+ when Braintree::WebhookNotification::Kind::DisputeOpened
48
+ _dispute_opened_sample_xml(id)
49
+ when Braintree::WebhookNotification::Kind::DisputeUnderReview
50
+ _dispute_under_review_sample_xml(id)
51
+ when Braintree::WebhookNotification::Kind::DisputeWon
52
+ _dispute_won_sample_xml(id)
51
53
  when Braintree::WebhookNotification::Kind::PartnerMerchantConnected
52
54
  _partner_merchant_connected_sample_xml(id)
53
55
  when Braintree::WebhookNotification::Kind::PartnerMerchantDisconnected
@@ -324,6 +326,14 @@ module Braintree
324
326
  XML
325
327
  end
326
328
 
329
+ def _dispute_under_review_sample_xml(id)
330
+ if id == "legacy_dispute_id"
331
+ _old_dispute_under_review_sample_xml(id)
332
+ else
333
+ _new_dispute_under_review_sample_xml(id)
334
+ end
335
+ end
336
+
327
337
  def _dispute_opened_sample_xml(id)
328
338
  if id == "legacy_dispute_id"
329
339
  _old_dispute_opened_sample_xml(id)
@@ -380,6 +390,26 @@ module Braintree
380
390
  end
381
391
  end
382
392
 
393
+ def _old_dispute_under_review_sample_xml(id)
394
+ <<-XML
395
+ <dispute>
396
+ <amount>100.00</amount>
397
+ <currency-iso-code>USD</currency-iso-code>
398
+ <received-date type="date">2014-03-01</received-date>
399
+ <reply-by-date type="date">2014-03-21</reply-by-date>
400
+ <kind>chargeback</kind>
401
+ <status>under_review</status>
402
+ <reason>fraud</reason>
403
+ <id>#{id}</id>
404
+ <transaction>
405
+ <id>#{id}</id>
406
+ <amount>100.00</amount>
407
+ </transaction>
408
+ <date-opened type=\"date\">2014-03-21</date-opened>
409
+ </dispute>
410
+ XML
411
+ end
412
+
383
413
  def _old_dispute_opened_sample_xml(id)
384
414
  <<-XML
385
415
  <dispute>
@@ -521,6 +551,48 @@ module Braintree
521
551
  XML
522
552
  end
523
553
 
554
+ def _new_dispute_under_review_sample_xml(id)
555
+ <<-XML
556
+ <dispute>
557
+ <id>#{id}</id>
558
+ <amount>100.00</amount>
559
+ <amount-disputed>100.00</amount-disputed>
560
+ <amount-won>95.00</amount-won>
561
+ <case-number>CASE-12345</case-number>
562
+ <created-at type="datetime">2017-06-16T20:44:41Z</created-at>
563
+ <currency-iso-code>USD</currency-iso-code>
564
+ <forwarded-comments nil="true"/>
565
+ <kind>chargeback</kind>
566
+ <merchant-account-id>ytnlulaloidoqwvzxjrdqputg</merchant-account-id>
567
+ <reason>fraud</reason>
568
+ <reason-code nil="true"/>
569
+ <reason-description nil="true"/>
570
+ <received-date type="date">2016-02-15</received-date>
571
+ <reference-number>REF-9876</reference-number>
572
+ <reply-by-date type="date">2016-02-22</reply-by-date>
573
+ <status>under_review</status>
574
+ <updated-at type="datetime">2017-06-16T20:44:41Z</updated-at>
575
+ <original-dispute-id>9qde5qgp</original-dispute-id>
576
+ <status-history type="array">
577
+ <status-history>
578
+ <status>under_review</status>
579
+ <timestamp type="datetime">2017-06-16T20:44:41Z</timestamp>
580
+ </status-history>
581
+ </status-history>
582
+ <evidence type="array"/>
583
+ <transaction>
584
+ <id>#{id}</id>
585
+ <amount>100.00</amount>
586
+ <created-at>2017-06-21T20:44:41Z</created-at>
587
+ <order-id nil="true"/>
588
+ <purchase-order-number nil="true"/>
589
+ <payment-instrument-subtype>Visa</payment-instrument-subtype>
590
+ </transaction>
591
+ <date-opened type=\"date\">2014-03-21</date-opened>
592
+ </dispute>
593
+ XML
594
+ end
595
+
524
596
  def _new_dispute_opened_sample_xml(id)
525
597
  <<-XML
526
598
  <dispute>
@@ -32,7 +32,7 @@ module Braintree
32
32
  case value.class.to_s
33
33
  when "Hash"
34
34
  if value["type"] == "array"
35
- child_key, entries = value.detect { |k,_v| k != "type" } # child_key is throwaway
35
+ _child_key, entries = value.detect { |k,_v| k != "type" } # child_key is throwaway
36
36
  if entries.nil? || ((c = value[CONTENT_ROOT]) && c.strip.empty?)
37
37
  []
38
38
  else
@@ -47,7 +47,7 @@ module Braintree
47
47
  end
48
48
  elsif value.has_key?(CONTENT_ROOT)
49
49
  content = value[CONTENT_ROOT]
50
- if (parser = XML_PARSING[value["type"]])
50
+ if (XML_PARSING[value["type"]])
51
51
  XML_PARSING[value["type"]].call(content)
52
52
  else
53
53
  content
data/lib/braintree.rb CHANGED
@@ -156,6 +156,7 @@ require "braintree/transaction/payment_receipt/card_present_data.rb"
156
156
  require "braintree/transaction/payment_receipt/merchant_address.rb"
157
157
  require "braintree/transaction/meta_checkout_card_details"
158
158
  require "braintree/transaction/meta_checkout_token_details"
159
+ require "braintree/transaction/package_details"
159
160
  require "braintree/transaction/paypal_details"
160
161
  require "braintree/transaction/paypal_here_details"
161
162
  require "braintree/transaction/samsung_pay_card_details"
@@ -203,7 +203,7 @@ describe Braintree::Address do
203
203
 
204
204
  it "raises a NotFoundError if it cannot be found because of address id" do
205
205
  customer = Braintree::Customer.create!(:last_name => "Wilson")
206
- address = Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
206
+ Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
207
207
  expect do
208
208
  Braintree::Address.find(customer, "invalid")
209
209
  end.to raise_error(
@@ -215,7 +215,7 @@ describe Braintree::Address do
215
215
  describe "self.update" do
216
216
  it "raises NotFoundError if the address can't be found" do
217
217
  customer = Braintree::Customer.create!(:last_name => "Wilson")
218
- address = Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
218
+ Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
219
219
  expect do
220
220
  Braintree::Address.update(customer.id, "bad-id", {})
221
221
  end.to raise_error(Braintree::NotFoundError)
@@ -293,7 +293,7 @@ describe Braintree::Address do
293
293
  describe "self.update!" do
294
294
  it "raises NotFoundError if the address can't be found" do
295
295
  customer = Braintree::Customer.create!(:last_name => "Wilson")
296
- address = Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
296
+ Braintree::Address.create!(:customer_id => customer.id, :street_address => "123 E Main St")
297
297
  expect do
298
298
  Braintree::Address.update!(customer.id, "bad-id", {})
299
299
  end.to raise_error(Braintree::NotFoundError)
@@ -263,19 +263,19 @@ describe Braintree::AdvancedSearch do
263
263
  context "multiple_value_or_text_field" do
264
264
  describe "in" do
265
265
  it "works for the in operator" do
266
- subscription1 = Braintree::Subscription.create(
266
+ Braintree::Subscription.create(
267
267
  :payment_method_token => @credit_card.token,
268
268
  :plan_id => SpecHelper::TriallessPlan[:id],
269
269
  :price => "17",
270
270
  ).subscription
271
271
 
272
- subscription2 = Braintree::Subscription.create(
272
+ Braintree::Subscription.create(
273
273
  :payment_method_token => @credit_card.token,
274
274
  :plan_id => SpecHelper::TrialPlan[:id],
275
275
  :price => "17",
276
276
  ).subscription
277
277
 
278
- subscription3 = Braintree::Subscription.create(
278
+ Braintree::Subscription.create(
279
279
  :payment_method_token => @credit_card.token,
280
280
  :plan_id => SpecHelper::AddOnDiscountPlan[:id],
281
281
  :price => "17",
@@ -28,14 +28,12 @@ describe Braintree::ClientToken do
28
28
 
29
29
  describe "version" do
30
30
  it "allows a client token version to be specified" do
31
- config = Braintree::Configuration.instantiate
32
31
  client_token_string = Braintree::ClientToken.generate(:version => 1)
33
32
  client_token = JSON.parse(client_token_string)
34
33
  expect(client_token["version"]).to eq(1)
35
34
  end
36
35
 
37
36
  it "defaults to 2" do
38
- config = Braintree::Configuration.instantiate
39
37
  client_token_string = Braintree::ClientToken.generate
40
38
  client_token = decode_client_token(client_token_string)
41
39
  expect(client_token["version"]).to eq(2)
@@ -144,7 +144,7 @@ def generate_invalid_us_bank_account_nonce
144
144
  nonce_characters = "bcdfghjkmnpqrstvwxyz23456789".chars.to_a
145
145
  nonce = "tokenusbankacct_"
146
146
  nonce += 4.times.map { sample(nonce_characters) }.join("_")
147
- nonce += "_xxx"
147
+ nonce + "_xxx"
148
148
  end
149
149
 
150
150
  def _cosmos_post(token, url, payload)
@@ -276,7 +276,7 @@ describe Braintree::CreditCard do
276
276
  :customer_id => customer.id,
277
277
  :payment_method_nonce => Braintree::Test::Nonce::Transactable,
278
278
  :three_d_secure_pass_thru => {
279
- :eci_flag => "02",
279
+ :eci_flag => "05",
280
280
  :cavv => "some_cavv",
281
281
  :xid => "some_xid",
282
282
  :authentication_response => "Y",
@@ -298,7 +298,7 @@ describe Braintree::CreditCard do
298
298
  :customer_id => customer.id,
299
299
  :payment_method_nonce => Braintree::Test::Nonce::Transactable,
300
300
  :three_d_secure_pass_thru => {
301
- :eci_flag => "02",
301
+ :eci_flag => "05",
302
302
  :cavv => "some_cavv",
303
303
  :xid => "some_xid",
304
304
  :three_d_secure_version => "1.0.2",
@@ -310,7 +310,6 @@ describe Braintree::CreditCard do
310
310
  :options => {:verify_card => true},
311
311
  )
312
312
  expect(result.success?).to eq(true)
313
-
314
313
  end
315
314
 
316
315
  it "returns 3DS info on cc verification" do
@@ -323,16 +322,15 @@ describe Braintree::CreditCard do
323
322
  expect(result.success?).to eq(true)
324
323
 
325
324
  three_d_secure_info = result.credit_card.verification.three_d_secure_info
326
- expect(three_d_secure_info.enrolled).to eq("Y")
325
+ expect(three_d_secure_info.status).to eq("authenticate_successful")
327
326
  expect(three_d_secure_info).to be_liability_shifted
328
327
  expect(three_d_secure_info).to be_liability_shift_possible
329
- expect(three_d_secure_info.status).to eq("authenticate_successful")
330
- expect(three_d_secure_info.cavv).to eq("cavv_value")
331
- expect(three_d_secure_info.xid).to eq("xid_value")
332
- expect(three_d_secure_info.eci_flag).to eq("05")
333
- expect(three_d_secure_info.three_d_secure_version).to eq("1.0.2")
334
- expect(three_d_secure_info.ds_transaction_id).to eq(nil)
335
- expect(three_d_secure_info.three_d_secure_authentication_id).not_to be_nil
328
+ expect(three_d_secure_info.enrolled).to be_a(String)
329
+ expect(three_d_secure_info.cavv).to be_a(String)
330
+ expect(three_d_secure_info.xid).to be_a(String)
331
+ expect(three_d_secure_info.eci_flag).to be_a(String)
332
+ expect(three_d_secure_info.three_d_secure_version).to be_a(String)
333
+ expect(three_d_secure_info.three_d_secure_authentication_id).to be_a(String)
336
334
  end
337
335
 
338
336
  it "adds credit card with billing address to customer" do
@@ -650,7 +648,6 @@ describe Braintree::CreditCard do
650
648
  end
651
649
 
652
650
  it "errors with invalid account_type" do
653
- customer = Braintree::Customer.create!
654
651
  result = Braintree::CreditCard.create(
655
652
  :number => Braintree::Test::CreditCardNumbers::Hiper,
656
653
  :expiration_month => "11",
@@ -667,7 +664,6 @@ describe Braintree::CreditCard do
667
664
  end
668
665
 
669
666
  it "errors when account_type not supported by merchant" do
670
- customer = Braintree::Customer.create!
671
667
  result = Braintree::CreditCard.create(
672
668
  :number => Braintree::Test::CreditCardNumbers::Visa,
673
669
  :expiration_month => "11",
@@ -793,7 +789,7 @@ describe Braintree::CreditCard do
793
789
  result = Braintree::CreditCard.update(credit_card.token,
794
790
  :payment_method_nonce => Braintree::Test::Nonce::Transactable,
795
791
  :three_d_secure_pass_thru => {
796
- :eci_flag => "02",
792
+ :eci_flag => "05",
797
793
  :cavv => "some_cavv",
798
794
  :xid => "some_xid",
799
795
  :authentication_response => "Y",
@@ -821,7 +817,7 @@ describe Braintree::CreditCard do
821
817
  result = Braintree::CreditCard.update(credit_card.token,
822
818
  :payment_method_nonce => Braintree::Test::Nonce::Transactable,
823
819
  :three_d_secure_pass_thru => {
824
- :eci_flag => "02",
820
+ :eci_flag => "05",
825
821
  :cavv => "some_cavv",
826
822
  :three_d_secure_version=> "2.1.0",
827
823
  :xid => "some_xid",
@@ -283,7 +283,7 @@ describe Braintree::CreditCardVerification, "search" do
283
283
  it "returns prepaid on a prepaid card" do
284
284
  cardholder_name = "Tom #{rand(1_000_000)} Smith"
285
285
 
286
- result = Braintree::Customer.create(
286
+ Braintree::Customer.create(
287
287
  :credit_card => {
288
288
  :cardholder_name => cardholder_name,
289
289
  :expiration_date => "05/2012",
@@ -405,7 +405,7 @@ describe Braintree::CreditCardVerification, "search" do
405
405
  :amount => "10.00",
406
406
  },
407
407
  :three_d_secure_pass_thru => {
408
- :eci_flag => "02",
408
+ :eci_flag => "05",
409
409
  :cavv => "some_cavv",
410
410
  :xid => "some_xid",
411
411
  :three_d_secure_version => "1.0.2",