braintree 2.104.1 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/braintree.gemspec +7 -4
  4. data/lib/braintree.rb +7 -18
  5. data/lib/braintree/account_updater_daily_report.rb +1 -1
  6. data/lib/braintree/address.rb +1 -23
  7. data/lib/braintree/apple_pay.rb +1 -1
  8. data/lib/braintree/apple_pay_card.rb +1 -1
  9. data/lib/braintree/apple_pay_options.rb +1 -1
  10. data/lib/braintree/authorization_adjustment.rb +1 -1
  11. data/lib/braintree/base_module.rb +6 -0
  12. data/lib/braintree/bin_data.rb +9 -2
  13. data/lib/braintree/client_token.rb +1 -1
  14. data/lib/braintree/configuration.rb +12 -12
  15. data/lib/braintree/connected_merchant_paypal_status_changed.rb +1 -1
  16. data/lib/braintree/connected_merchant_status_transitioned.rb +1 -1
  17. data/lib/braintree/credit_card.rb +2 -77
  18. data/lib/braintree/credit_card_gateway.rb +7 -36
  19. data/lib/braintree/credit_card_verification.rb +18 -5
  20. data/lib/braintree/credit_card_verification_search.rb +1 -1
  21. data/lib/braintree/customer.rb +5 -76
  22. data/lib/braintree/customer_gateway.rb +0 -23
  23. data/lib/braintree/customer_search.rb +1 -1
  24. data/lib/braintree/disbursement.rb +1 -1
  25. data/lib/braintree/dispute.rb +2 -8
  26. data/lib/braintree/dispute/{history_event.rb → status_history.rb} +3 -1
  27. data/lib/braintree/dispute_gateway.rb +4 -9
  28. data/lib/braintree/dispute_search.rb +2 -2
  29. data/lib/braintree/document_upload.rb +1 -1
  30. data/lib/braintree/error_codes.rb +151 -170
  31. data/lib/braintree/exceptions.rb +5 -3
  32. data/lib/braintree/gateway.rb +0 -14
  33. data/lib/braintree/{android_pay_card.rb → google_pay_card.rb} +2 -3
  34. data/lib/braintree/granted_payment_instrument_update.rb +1 -1
  35. data/lib/braintree/graphql_client.rb +7 -7
  36. data/lib/braintree/http.rb +3 -3
  37. data/lib/braintree/local_payment_completed.rb +1 -1
  38. data/lib/braintree/local_payment_reversed.rb +19 -0
  39. data/lib/braintree/merchant.rb +1 -1
  40. data/lib/braintree/merchant_account.rb +1 -1
  41. data/lib/braintree/merchant_account_gateway.rb +3 -1
  42. data/lib/braintree/merchant_gateway.rb +1 -1
  43. data/lib/braintree/modification.rb +1 -1
  44. data/lib/braintree/oauth_credentials.rb +1 -1
  45. data/lib/braintree/oauth_gateway.rb +5 -5
  46. data/lib/braintree/payment_instrument_type.rb +10 -14
  47. data/lib/braintree/payment_method_gateway.rb +8 -13
  48. data/lib/braintree/payment_method_nonce_gateway.rb +1 -1
  49. data/lib/braintree/payment_method_parser.rb +1 -8
  50. data/lib/braintree/plan.rb +1 -1
  51. data/lib/braintree/processor_response_types.rb +3 -3
  52. data/lib/braintree/resource_collection.rb +8 -3
  53. data/lib/braintree/revoked_payment_method_metadata.rb +1 -1
  54. data/lib/braintree/risk_data.rb +3 -1
  55. data/lib/braintree/samsung_pay_card.rb +1 -1
  56. data/lib/braintree/settlement_batch_summary.rb +2 -2
  57. data/lib/braintree/subscription.rb +11 -11
  58. data/lib/braintree/successful_result.rb +0 -1
  59. data/lib/braintree/test/credit_card.rb +1 -0
  60. data/lib/braintree/test/nonce.rb +4 -23
  61. data/lib/braintree/three_d_secure_info.rb +22 -12
  62. data/lib/braintree/transaction.rb +44 -104
  63. data/lib/braintree/transaction/disbursement_details.rb +1 -0
  64. data/lib/braintree/transaction/{android_pay_details.rb → google_pay_details.rb} +1 -1
  65. data/lib/braintree/transaction/installment.rb +28 -0
  66. data/lib/braintree/transaction/installment/adjustment.rb +33 -0
  67. data/lib/braintree/transaction/paypal_details.rb +1 -0
  68. data/lib/braintree/transaction/subscription_details.rb +2 -0
  69. data/lib/braintree/transaction_gateway.rb +37 -25
  70. data/lib/braintree/transaction_line_item.rb +1 -1
  71. data/lib/braintree/transaction_search.rb +3 -2
  72. data/lib/braintree/unknown_payment_method.rb +1 -1
  73. data/lib/braintree/us_bank_account.rb +3 -3
  74. data/lib/braintree/us_bank_account_verification.rb +1 -1
  75. data/lib/braintree/us_bank_account_verification_gateway.rb +1 -1
  76. data/lib/braintree/util.rb +21 -6
  77. data/lib/braintree/venmo_account.rb +1 -1
  78. data/lib/braintree/version.rb +3 -3
  79. data/lib/braintree/visa_checkout_card.rb +2 -2
  80. data/lib/braintree/webhook_notification.rb +28 -29
  81. data/lib/braintree/webhook_notification_gateway.rb +5 -5
  82. data/lib/braintree/webhook_testing_gateway.rb +10 -43
  83. data/lib/braintree/xml/generator.rb +5 -4
  84. data/lib/braintree/xml/libxml.rb +1 -0
  85. data/lib/braintree/xml/parser.rb +21 -44
  86. data/spec/integration/braintree/add_on_spec.rb +1 -1
  87. data/spec/integration/braintree/address_spec.rb +26 -113
  88. data/spec/integration/braintree/advanced_search_spec.rb +45 -45
  89. data/spec/integration/braintree/apple_pay_spec.rb +3 -3
  90. data/spec/integration/braintree/braintree_gateway_spec.rb +2 -1
  91. data/spec/integration/braintree/client_api/client_token_spec.rb +14 -14
  92. data/spec/integration/braintree/client_api/spec_helper.rb +5 -31
  93. data/spec/integration/braintree/credit_card_spec.rb +130 -593
  94. data/spec/integration/braintree/credit_card_verification_search_spec.rb +2 -2
  95. data/spec/integration/braintree/credit_card_verification_spec.rb +1 -1
  96. data/spec/integration/braintree/customer_search_spec.rb +8 -8
  97. data/spec/integration/braintree/customer_spec.rb +336 -509
  98. data/spec/integration/braintree/dispute_search_spec.rb +6 -6
  99. data/spec/integration/braintree/dispute_spec.rb +6 -7
  100. data/spec/integration/braintree/error_codes_spec.rb +1 -1
  101. data/spec/integration/braintree/http_spec.rb +2 -2
  102. data/spec/integration/braintree/merchant_account_spec.rb +25 -26
  103. data/spec/integration/braintree/merchant_spec.rb +14 -14
  104. data/spec/integration/braintree/oauth_spec.rb +11 -11
  105. data/spec/integration/braintree/payment_method_nonce_spec.rb +12 -12
  106. data/spec/integration/braintree/payment_method_spec.rb +403 -269
  107. data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +17 -13
  108. data/spec/integration/braintree/paypal_account_spec.rb +28 -28
  109. data/spec/integration/braintree/samsung_pay_card_spec.rb +9 -9
  110. data/spec/integration/braintree/settlement_batch_summary_spec.rb +8 -8
  111. data/spec/integration/braintree/subscription_spec.rb +144 -149
  112. data/spec/integration/braintree/test/transaction_amounts_spec.rb +2 -2
  113. data/spec/integration/braintree/test_transaction_spec.rb +10 -10
  114. data/spec/integration/braintree/transaction_search_spec.rb +96 -70
  115. data/spec/integration/braintree/transaction_spec.rb +832 -904
  116. data/spec/integration/braintree/transaction_us_bank_account_spec.rb +32 -26
  117. data/spec/integration/braintree/us_bank_account_spec.rb +6 -6
  118. data/spec/integration/braintree/us_bank_account_verification_search_spec.rb +7 -7
  119. data/spec/integration/braintree/us_bank_account_verification_spec.rb +8 -8
  120. data/spec/integration/braintree/visa_checkout_card_spec.rb +5 -5
  121. data/spec/integration/spec_helper.rb +10 -7
  122. data/spec/oauth_test_helper.rb +1 -1
  123. data/spec/script/httpsd.rb +6 -6
  124. data/spec/spec_helper.rb +6 -14
  125. data/spec/unit/braintree/address_spec.rb +1 -9
  126. data/spec/unit/braintree/apple_pay_card_spec.rb +1 -1
  127. data/spec/unit/braintree/client_token_spec.rb +2 -2
  128. data/spec/unit/braintree/configuration_spec.rb +42 -42
  129. data/spec/unit/braintree/credit_card_spec.rb +9 -28
  130. data/spec/unit/braintree/credit_card_verification_search_spec.rb +1 -1
  131. data/spec/unit/braintree/credit_card_verification_spec.rb +8 -4
  132. data/spec/unit/braintree/customer_spec.rb +5 -16
  133. data/spec/unit/braintree/disbursement_spec.rb +7 -7
  134. data/spec/unit/braintree/dispute_spec.rb +9 -20
  135. data/spec/unit/braintree/error_result_spec.rb +5 -5
  136. data/spec/unit/braintree/errors_spec.rb +8 -8
  137. data/spec/unit/braintree/http_spec.rb +8 -8
  138. data/spec/unit/braintree/merchant_account_spec.rb +1 -1
  139. data/spec/unit/braintree/payment_method_spec.rb +1 -1
  140. data/spec/unit/braintree/paypal_account_spec.rb +2 -2
  141. data/spec/unit/braintree/resource_collection_spec.rb +30 -1
  142. data/spec/unit/braintree/risk_data_spec.rb +9 -5
  143. data/spec/unit/braintree/subscription_search_spec.rb +1 -1
  144. data/spec/unit/braintree/successful_result_spec.rb +1 -1
  145. data/spec/unit/braintree/three_d_secure_info_spec.rb +32 -14
  146. data/spec/unit/braintree/transaction/credit_card_details_spec.rb +3 -3
  147. data/spec/unit/braintree/transaction/customer_details_spec.rb +1 -1
  148. data/spec/unit/braintree/transaction/deposit_details_spec.rb +2 -2
  149. data/spec/unit/braintree/transaction/installment_spec.rb +25 -0
  150. data/spec/unit/braintree/transaction/paypal_details_spec.rb +3 -1
  151. data/spec/unit/braintree/transaction_search_spec.rb +12 -12
  152. data/spec/unit/braintree/transaction_spec.rb +25 -51
  153. data/spec/unit/braintree/util_spec.rb +55 -21
  154. data/spec/unit/braintree/validation_error_collection_spec.rb +36 -36
  155. data/spec/unit/braintree/webhook_notification_spec.rb +73 -57
  156. data/spec/unit/braintree/xml/parser_spec.rb +21 -16
  157. data/spec/unit/braintree/xml_spec.rb +31 -31
  158. metadata +30 -31
  159. data/lib/braintree/amex_express_checkout_card.rb +0 -40
  160. data/lib/braintree/coinbase_account.rb +0 -34
  161. data/lib/braintree/europe_bank_account.rb +0 -36
  162. data/lib/braintree/europe_bank_account_gateway.rb +0 -17
  163. data/lib/braintree/ideal_payment.rb +0 -61
  164. data/lib/braintree/ideal_payment_gateway.rb +0 -19
  165. data/lib/braintree/masterpass_card.rb +0 -83
  166. data/lib/braintree/settlement_batch.rb +0 -0
  167. data/lib/braintree/transaction/amex_express_checkout_details.rb +0 -21
  168. data/lib/braintree/transaction/coinbase_details.rb +0 -16
  169. data/lib/braintree/transaction/ideal_payment_details.rb +0 -19
  170. data/lib/braintree/transaction/masterpass_card_details.rb +0 -49
  171. data/lib/braintree/transparent_redirect.rb +0 -40
  172. data/lib/braintree/transparent_redirect_gateway.rb +0 -105
  173. data/lib/braintree/xml/rexml.rb +0 -71
  174. data/spec/hacks/tcp_socket.rb +0 -18
  175. data/spec/integration/braintree/coinbase_spec.rb +0 -34
  176. data/spec/integration/braintree/masterpass_card_spec.rb +0 -97
  177. data/spec/integration/braintree/transparent_redirect_spec.rb +0 -268
  178. data/spec/unit/braintree/transparent_redirect_spec.rb +0 -223
  179. data/spec/unit/braintree/xml/rexml_spec.rb +0 -51
@@ -28,7 +28,7 @@ describe Braintree::PaymentMethod do
28
28
  end
29
29
 
30
30
  describe "delete" do
31
- let(:http_stub) { double('http_stub').as_null_object }
31
+ let(:http_stub) { double("http_stub").as_null_object }
32
32
  it "accepts revoke_all_grants option with value true" do
33
33
  Braintree::Http.stub(:new).and_return http_stub
34
34
  http_stub.should_receive(:delete).with("/merchants/integration_merchant_id/payment_methods/any/some_token?revoke_all_grants=true")
@@ -8,7 +8,7 @@ describe Braintree::PayPalAccount do
8
8
  :invalid_key => "bad stuff",
9
9
  :options => {
10
10
  :invalid_option => "bad option",
11
- }
11
+ },
12
12
  )
13
13
  end.to raise_error(ArgumentError, "invalid keys: invalid_key, options[invalid_option]")
14
14
  end
@@ -17,7 +17,7 @@ describe Braintree::PayPalAccount do
17
17
  describe "self.update" do
18
18
  it "raises an exception if attributes contain an invalid key" do
19
19
  expect do
20
- Braintree::PayPalAccount.update("some_token", :invalid_key => 'val')
20
+ Braintree::PayPalAccount.update("some_token", :invalid_key => "val")
21
21
  end.to raise_error(ArgumentError, "invalid keys: invalid_key")
22
22
  end
23
23
  end
@@ -5,7 +5,7 @@ describe "Braintree::ResourceCollection" do
5
5
  it "iterates over the elements, yielding to the block in pages" do
6
6
  values = %w(a b c d e)
7
7
  collection = Braintree::ResourceCollection.new(:search_results => {:ids => [0,1,2,3,4], :page_size => 2}) do |ids|
8
- ids.map {|id| values[id] }
8
+ ids.map { |id| values[id] }
9
9
  end
10
10
 
11
11
  count = 0
@@ -18,6 +18,35 @@ describe "Braintree::ResourceCollection" do
18
18
  end
19
19
  end
20
20
 
21
+ describe "#first" do
22
+ it "returns nil with no results" do
23
+ values = %w(a b c d e)
24
+ collection = Braintree::ResourceCollection.new(:search_results => {:ids => [], :page_size => 2}) do |ids|
25
+ ids.map { |id| values[id] }
26
+ end
27
+
28
+ collection.first.should == nil
29
+ end
30
+
31
+ context "with results" do
32
+ let(:collection) do
33
+ values = %w(a b c d e)
34
+
35
+ Braintree::ResourceCollection.new(:search_results => {:ids => [0,1,2,3,4], :page_size => 2}) do |ids|
36
+ ids.map { |id| values[id] }
37
+ end
38
+ end
39
+
40
+ it "returns the first occourence" do
41
+ collection.first.should == "a"
42
+ end
43
+
44
+ it "returns the first N occourences" do
45
+ collection.first(4).should == ["a","b","c","d"]
46
+ end
47
+ end
48
+ end
49
+
21
50
  describe "#ids" do
22
51
  it "returns a list of the resource collection ids" do
23
52
  collection = Braintree::ResourceCollection.new(:search_results => {:ids => [0,1,2,3,4], :page_size => 2})
@@ -2,12 +2,14 @@ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
2
 
3
3
  describe Braintree::RiskData do
4
4
  describe "#initialize" do
5
- it "sets id, decision and device_data_captured" do
6
- risk_data = Braintree::RiskData.new(:id => "123", :decision => "YOU WON $1000 DOLLARS", :device_data_captured => true, :fraud_service_provider => "kount")
5
+ it "sets id, decision, device_data_captured, decision_reasons and transaction_risk_score" do
6
+ risk_data = Braintree::RiskData.new(:id => "123", :decision => "YOU WON $1000 DOLLARS", :device_data_captured => true, :fraud_service_provider => "fraud_protection", :decision_reasons => ["reason"], :transaction_risk_score => "12")
7
7
  risk_data.id.should == "123"
8
8
  risk_data.decision.should == "YOU WON $1000 DOLLARS"
9
9
  risk_data.device_data_captured.should be_truthy
10
- risk_data.fraud_service_provider.should == "kount"
10
+ risk_data.fraud_service_provider.should == "fraud_protection"
11
+ risk_data.decision_reasons.should == ["reason"]
12
+ risk_data.transaction_risk_score.should == "12"
11
13
  end
12
14
  end
13
15
 
@@ -16,10 +18,12 @@ describe Braintree::RiskData do
16
18
  details = Braintree::RiskData.new(
17
19
  :id => "123",
18
20
  :decision => "YOU WON $1000 DOLLARS",
21
+ :decision_reasons => ["reason"],
19
22
  :device_data_captured => true,
20
- :fraud_service_provider => "kount",
23
+ :fraud_service_provider => "fraud_protection",
24
+ :transaction_risk_score => "12",
21
25
  )
22
- details.inspect.should == %(#<RiskData id: "123", decision: "YOU WON $1000 DOLLARS", device_data_captured: true, fraud_service_provider: "kount">)
26
+ details.inspect.should == %(#<RiskData id: "123", decision: "YOU WON $1000 DOLLARS", decision_reasons: ["reason"], device_data_captured: true, fraud_service_provider: "fraud_protection", transaction_risk_score: "12">)
23
27
  end
24
28
  end
25
29
  end
@@ -11,7 +11,7 @@ module Braintree
11
11
  Subscription::Status::Active,
12
12
  Subscription::Status::Canceled,
13
13
  Subscription::Status::Expired,
14
- Subscription::Status::PastDue
14
+ Subscription::Status::PastDue,
15
15
  )
16
16
  end.should_not raise_error
17
17
  end
@@ -5,7 +5,7 @@ describe Braintree::SuccessfulResult do
5
5
  it "sets instance variables from the values in the hash" do
6
6
  result = Braintree::SuccessfulResult.new(
7
7
  :transaction => "transaction_value",
8
- :credit_card => "credit_card_value"
8
+ :credit_card => "credit_card_value",
9
9
  )
10
10
  result.success?.should == true
11
11
  result.transaction.should == "transaction_value"
@@ -3,37 +3,55 @@ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
3
3
  describe Braintree::ThreeDSecureInfo do
4
4
  let(:three_d_secure_info) {
5
5
  Braintree::ThreeDSecureInfo.new(
6
+ :acs_transaction_id => "acs_id",
7
+ :cavv => "cavvvalue",
8
+ :ds_transaction_id => "dstrxid",
9
+ :eci_flag => "06",
6
10
  :enrolled => "Y",
7
- :liability_shifted => true,
8
11
  :liability_shift_possible => true,
9
- :cavv => "cavvvalue",
10
- :xid => "xidvalue",
12
+ :liability_shifted => true,
13
+ :pares_status => "Y",
11
14
  :status => "authenticate_successful",
12
- :eci_flag => "06",
13
- :three_d_secure_version => "1.0.2",
14
- :ds_transaction_id => "dstrxid",
15
15
  :three_d_secure_authentication_id => "auth_id",
16
+ :three_d_secure_transaction_id => "trans_id",
17
+ :three_d_secure_version => "1.0.2",
18
+ :xid => "xidvalue",
19
+ :authentication => {
20
+ :trans_status => "authstatus",
21
+ :trans_status_reason => "authstatusreason"
22
+ },
23
+ :lookup => {
24
+ :trans_status => "lookupstatus",
25
+ :trans_status_reason => "lookupstatusreason"
26
+ },
16
27
  )
17
28
  }
18
29
 
19
30
  describe "#initialize" do
20
31
  it "sets attributes" do
21
- three_d_secure_info.enrolled.should == "Y"
22
- three_d_secure_info.status.should == "authenticate_successful"
23
- three_d_secure_info.liability_shifted.should == true
24
- three_d_secure_info.liability_shift_possible.should == true
32
+ three_d_secure_info.acs_transaction_id.should == "acs_id"
25
33
  three_d_secure_info.cavv.should == "cavvvalue"
26
- three_d_secure_info.xid.should == "xidvalue"
27
- three_d_secure_info.eci_flag.should == "06"
28
- three_d_secure_info.three_d_secure_version.should == "1.0.2"
29
34
  three_d_secure_info.ds_transaction_id.should == "dstrxid"
35
+ three_d_secure_info.eci_flag.should == "06"
36
+ three_d_secure_info.enrolled.should == "Y"
37
+ three_d_secure_info.liability_shift_possible.should == true
38
+ three_d_secure_info.liability_shifted.should == true
39
+ three_d_secure_info.pares_status.should == "Y"
40
+ three_d_secure_info.status.should == "authenticate_successful"
30
41
  three_d_secure_info.three_d_secure_authentication_id.should == "auth_id"
42
+ three_d_secure_info.three_d_secure_transaction_id.should == "trans_id"
43
+ three_d_secure_info.three_d_secure_version.should == "1.0.2"
44
+ three_d_secure_info.xid.should == "xidvalue"
45
+ three_d_secure_info.lookup[:trans_status].should == "lookupstatus"
46
+ three_d_secure_info.lookup[:trans_status_reason].should == "lookupstatusreason"
47
+ three_d_secure_info.authentication[:trans_status].should == "authstatus"
48
+ three_d_secure_info.authentication[:trans_status_reason].should == "authstatusreason"
31
49
  end
32
50
  end
33
51
 
34
52
  describe "inspect" do
35
53
  it "prints the attributes" do
36
- three_d_secure_info.inspect.should == %(#<ThreeDSecureInfo enrolled: "Y", liability_shifted: true, liability_shift_possible: true, status: "authenticate_successful", cavv: "cavvvalue", xid: "xidvalue", eci_flag: "06", three_d_secure_version: "1.0.2", ds_transaction_id: "dstrxid", three_d_secure_authentication_id: "auth_id">)
54
+ three_d_secure_info.inspect.should == %(#<ThreeDSecureInfo acs_transaction_id: "acs_id", authentication: {:trans_status=>"authstatus", :trans_status_reason=>"authstatusreason"}, cavv: "cavvvalue", ds_transaction_id: "dstrxid", eci_flag: "06", enrolled: "Y", liability_shift_possible: true, liability_shifted: true, lookup: {:trans_status=>"lookupstatus", :trans_status_reason=>"lookupstatusreason"}, pares_status: "Y", status: "authenticate_successful", three_d_secure_authentication_id: "auth_id", three_d_secure_transaction_id: "trans_id", three_d_secure_version: "1.0.2", xid: "xidvalue">)
37
55
  end
38
56
  end
39
57
 
@@ -5,7 +5,7 @@ describe Braintree::Transaction::CreditCardDetails do
5
5
  it "concats expiration_month and expiration_year" do
6
6
  details = Braintree::Transaction::CreditCardDetails.new(
7
7
  :expiration_month => "08",
8
- :expiration_year => "2009"
8
+ :expiration_year => "2009",
9
9
  )
10
10
  details.expiration_date.should == "08/2009"
11
11
  end
@@ -32,7 +32,7 @@ describe Braintree::Transaction::CreditCardDetails do
32
32
  :country_of_issuance => "Lilliput",
33
33
  :issuing_bank => "Gulliver Bank",
34
34
  :image_url => "example.com/visa.png",
35
- :unique_number_identifier => "abc123"
35
+ :unique_number_identifier => "abc123",
36
36
  )
37
37
  details.inspect.should == %(#<token: "token", bin: "123456", last_4: "6789", card_type: "Visa", expiration_date: "05/2012", cardholder_name: "The Cardholder", customer_location: "US", prepaid: "Yes", healthcare: "No", durbin_regulated: "No", debit: "Yes", commercial: "Unknown", payroll: "Unknown", product_id: "Unknown", country_of_issuance: "Lilliput", issuing_bank: "Gulliver Bank", image_url: "example.com/visa.png", unique_number_identifier: "abc123">)
38
38
  end
@@ -41,7 +41,7 @@ describe Braintree::Transaction::CreditCardDetails do
41
41
  describe "masked_number" do
42
42
  it "concatenates the bin, some *'s, and the last_4" do
43
43
  details = Braintree::Transaction::CreditCardDetails.new(
44
- :bin => "510510", :last_4 => "5100"
44
+ :bin => "510510", :last_4 => "5100",
45
45
  )
46
46
  details.masked_number.should == "510510******5100"
47
47
  end
@@ -11,7 +11,7 @@ describe Braintree::Transaction::CustomerDetails do
11
11
  :company => "Smith Co.",
12
12
  :website => "http://www.example.com",
13
13
  :phone => "6145551234",
14
- :fax => "3125551234"
14
+ :fax => "3125551234",
15
15
  )
16
16
  details.inspect.should == %(#<id: "id", first_name: "Amy", last_name: "Smith", email: "amy.smith@example.com", company: "Smith Co.", website: "http://www.example.com", phone: "6145551234", fax: "3125551234">)
17
17
  end
@@ -4,13 +4,13 @@ describe Braintree::Transaction::DisbursementDetails do
4
4
  describe "valid?" do
5
5
  it "returns true if disbursement details are initialized" do
6
6
  details = Braintree::Transaction::DisbursementDetails.new(
7
- :disbursement_date => Date.new(2013, 4, 1)
7
+ :disbursement_date => Date.new(2013, 4, 1),
8
8
  )
9
9
  details.valid?.should == true
10
10
  end
11
11
  it "returns true if disbursement details are initialized" do
12
12
  details = Braintree::Transaction::DisbursementDetails.new(
13
- :disbursement_date => nil
13
+ :disbursement_date => nil,
14
14
  )
15
15
  details.valid?.should == false
16
16
  end
@@ -0,0 +1,25 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Braintree::Transaction::Installment do
4
+ describe "inspect" do
5
+ it "assigns all fields" do
6
+ adjustment_attributes = {
7
+ :amount => "0.98",
8
+ :kind => "REFUND",
9
+ :projected_disbursement_date => "2020-01-03 01:02:03Z",
10
+ :actual_disbursement_date => "2020-01-04 01:02:03Z",
11
+ }
12
+ installment_attributes = {
13
+ :id => "abc123",
14
+ :amount => "1.23",
15
+ :projected_disbursement_date => "2020-01-01 01:02:03Z",
16
+ :actual_disbursement_date => "2020-01-02 01:02:03Z",
17
+ :adjustments => [adjustment_attributes],
18
+ }
19
+
20
+ installment = Braintree::Transaction::Installment.new(installment_attributes)
21
+
22
+ expect(installment.inspect).to eq('#<id: "abc123", amount: 0.123e1, projected_disbursement_date: "2020-01-01 01:02:03Z", actual_disbursement_date: "2020-01-02 01:02:03Z", adjustments: [#<amount: 0.98e0, kind: "REFUND", projected_disbursement_date: "2020-01-03 01:02:03Z", actual_disbursement_date: "2020-01-04 01:02:03Z">]>')
23
+ end
24
+ end
25
+ end
@@ -5,6 +5,7 @@ describe Braintree::Transaction::PayPalDetails do
5
5
  it "sets all fields" do
6
6
  details = Braintree::Transaction::PayPalDetails.new(
7
7
  :authorization_id => "id",
8
+ :billing_agreement_id => "billing-agreement-id",
8
9
  :capture_id => "capture-id",
9
10
  :custom_field => "custom-field",
10
11
  :debug_id => "debug-id",
@@ -26,10 +27,11 @@ describe Braintree::Transaction::PayPalDetails do
26
27
  :seller_protection_status => "seller-protection-status",
27
28
  :token => "token",
28
29
  :transaction_fee_amount => "2.00",
29
- :transaction_fee_currency_iso_code => "123"
30
+ :transaction_fee_currency_iso_code => "123",
30
31
  )
31
32
 
32
33
  expect(details.authorization_id).to eq("id")
34
+ expect(details.billing_agreement_id).to eq("billing-agreement-id")
33
35
  expect(details.capture_id).to eq("capture-id")
34
36
  expect(details.custom_field).to eq("custom-field")
35
37
  expect(details.debug_id).to eq("debug-id")
@@ -1,19 +1,19 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
2
 
3
3
  describe Braintree::TransactionSearch do
4
- it "overrides previous 'is' with new 'is' for the same field" do
5
- search = Braintree::TransactionSearch.new
6
- search.billing_company.is "one"
7
- search.billing_company.is "two"
8
- search.to_hash.should == {:billing_company => {:is => "two"}}
9
- end
4
+ it "overrides previous 'is' with new 'is' for the same field" do
5
+ search = Braintree::TransactionSearch.new
6
+ search.billing_company.is "one"
7
+ search.billing_company.is "two"
8
+ search.to_hash.should == {:billing_company => {:is => "two"}}
9
+ end
10
10
 
11
- it "overrides previous 'in' with new 'in' for the same field" do
12
- search = Braintree::TransactionSearch.new
13
- search.status.in Braintree::Transaction::Status::Authorized
14
- search.status.in Braintree::Transaction::Status::SubmittedForSettlement
15
- search.to_hash.should == {:status => [Braintree::Transaction::Status::SubmittedForSettlement]}
16
- end
11
+ it "overrides previous 'in' with new 'in' for the same field" do
12
+ search = Braintree::TransactionSearch.new
13
+ search.status.in Braintree::Transaction::Status::Authorized
14
+ search.status.in Braintree::Transaction::Status::SubmittedForSettlement
15
+ search.to_hash.should == {:status => [Braintree::Transaction::Status::SubmittedForSettlement]}
16
+ end
17
17
 
18
18
  it "raises if the operator 'is' is left off" do
19
19
  search = Braintree::TransactionSearch.new
@@ -17,14 +17,6 @@ describe Braintree::Transaction do
17
17
  end
18
18
  end
19
19
 
20
- describe "self.create_from_transparent_redirect" do
21
- it "raises an exception if the query string is forged" do
22
- expect do
23
- Braintree::Transaction.create_from_transparent_redirect("http_status=200&forged=query_string")
24
- end.to raise_error(Braintree::ForgedQueryString)
25
- end
26
- end
27
-
28
20
  describe "self.find" do
29
21
  it "raises error if passed empty string" do
30
22
  expect do
@@ -45,17 +37,18 @@ describe Braintree::Transaction do
45
37
  end
46
38
  end
47
39
 
48
- describe "self.create_transaction_url" do
49
- it "returns the url" do
50
- config = Braintree::Configuration.instantiate
51
- Braintree::Transaction.create_transaction_url.should == "http#{config.ssl? ? 's' : ''}://#{config.server}:#{config.port}/merchants/integration_merchant_id/transactions/all/create_via_transparent_redirect_request"
40
+ describe "self.submit_for_settlement" do
41
+ it "raises an ArgumentError if transaction_id is an invalid format" do
42
+ expect do
43
+ Braintree::Transaction.submit_for_settlement("invalid-transaction-id")
44
+ end.to raise_error(ArgumentError, "transaction_id is invalid")
52
45
  end
53
46
  end
54
47
 
55
- describe "self.submit_for_settlement" do
48
+ describe "self.adjust_authorization" do
56
49
  it "raises an ArgumentError if transaction_id is an invalid format" do
57
50
  expect do
58
- Braintree::Transaction.submit_for_settlement("invalid-transaction-id")
51
+ Braintree::Transaction.adjust_authorization("invalid-transaction-id", "10.00")
59
52
  end.to raise_error(ArgumentError, "transaction_id is invalid")
60
53
  end
61
54
  end
@@ -81,7 +74,7 @@ describe Braintree::Transaction do
81
74
  :website => "lednerllc.com",
82
75
  :phone => "1-999-652-4189 x56883",
83
76
  :fax => "012-161-8055"
84
- }
77
+ },
85
78
  )
86
79
  transaction.customer_details.id.should == "123"
87
80
  transaction.customer_details.first_name.should == "Adam"
@@ -103,10 +96,10 @@ describe Braintree::Transaction do
103
96
  :settlement_currency_exchange_rate => "1",
104
97
  :funds_held => false,
105
98
  :success => true
106
- }
99
+ },
107
100
  )
108
101
  disbursement = transaction.disbursement_details
109
- disbursement.disbursement_date.should == "2013-04-03"
102
+ disbursement.disbursement_date.should == Date.parse("2013-04-03")
110
103
  disbursement.settlement_amount.should == "120.00"
111
104
  disbursement.settlement_currency_iso_code.should == "USD"
112
105
  disbursement.settlement_currency_exchange_rate.should == "1"
@@ -134,7 +127,7 @@ describe Braintree::Transaction do
134
127
  :product_id => "Unknown",
135
128
  :country_of_issuance => "Narnia",
136
129
  :issuing_bank => "Mr Tumnus"
137
- }
130
+ },
138
131
  )
139
132
  transaction.credit_card_details.token.should == "mzg2"
140
133
  transaction.credit_card_details.bin.should == "411111"
@@ -162,7 +155,7 @@ describe Braintree::Transaction do
162
155
  :liability_shifted => true,
163
156
  :liability_shift_possible => true,
164
157
  :status => "authenticate_successful",
165
- }
158
+ },
166
159
  )
167
160
 
168
161
  transaction.three_d_secure_info.enrolled.should == "Y"
@@ -171,33 +164,14 @@ describe Braintree::Transaction do
171
164
  transaction.three_d_secure_info.liability_shift_possible.should == true
172
165
  end
173
166
 
174
- it "sets up ideal_payment_details" do
175
- transaction = Braintree::Transaction._new(
176
- :gateway,
177
- :ideal_payment => {
178
- :ideal_payment_id => "idealpayment_abc_123",
179
- :ideal_transaction_id => "1150000008857321",
180
- :masked_iban => "12************7890",
181
- :bic => "RABONL2U",
182
- :image_url => "http://www.example.com/ideal.png"
183
- }
184
- )
185
-
186
- transaction.ideal_payment_details.ideal_payment_id.should == "idealpayment_abc_123"
187
- transaction.ideal_payment_details.ideal_transaction_id.should == "1150000008857321"
188
- transaction.ideal_payment_details.masked_iban.should == "12************7890"
189
- transaction.ideal_payment_details.bic.should == "RABONL2U"
190
- transaction.ideal_payment_details.image_url.should == "http://www.example.com/ideal.png"
191
- end
192
-
193
167
  it "sets up history attributes in status_history" do
194
168
  time = Time.utc(2010,1,14)
195
169
  transaction = Braintree::Transaction._new(
196
170
  :gateway,
197
171
  :status_history => [
198
- { :timestamp => time, :amount => "12.00", :transaction_source => "API",
199
- :user => "larry", :status => Braintree::Transaction::Status::Authorized },
200
- { :timestamp => Time.utc(2010,1,15), :amount => "12.00", :transaction_source => "API",
172
+ {:timestamp => time, :amount => "12.00", :transaction_source => "API",
173
+ :user => "larry", :status => Braintree::Transaction::Status::Authorized},
174
+ {:timestamp => Time.utc(2010,1,15), :amount => "12.00", :transaction_source => "API",
201
175
  :user => "curly", :status => "scheduled_for_settlement"}
202
176
  ])
203
177
  transaction.status_history.size.should == 2
@@ -214,8 +188,8 @@ describe Braintree::Transaction do
214
188
  transaction = Braintree::Transaction._new(
215
189
  :gateway,
216
190
  :authorization_adjustments => [
217
- { :timestamp => timestamp, :processor_response_code => "1000", :processor_response_text => "Approved", :amount => "12.00", :success => true },
218
- { :timestamp => timestamp, :processor_response_code => "3000", :processor_response_text => "Processor Network Unavailable - Try Again", :amount => "12.34", :success => false },
191
+ {:timestamp => timestamp, :processor_response_code => "1000", :processor_response_text => "Approved", :amount => "12.00", :success => true},
192
+ {:timestamp => timestamp, :processor_response_code => "3000", :processor_response_text => "Processor Network Unavailable - Try Again", :amount => "12.34", :success => false},
219
193
  ])
220
194
  transaction.authorization_adjustments.size.should == 2
221
195
  transaction.authorization_adjustments[0].amount.should == "12.00"
@@ -233,7 +207,7 @@ describe Braintree::Transaction do
233
207
  it "handles receiving custom as an empty string" do
234
208
  transaction = Braintree::Transaction._new(
235
209
  :gateway,
236
- :custom => "\n "
210
+ :custom => "\n ",
237
211
  )
238
212
  end
239
213
 
@@ -251,7 +225,7 @@ describe Braintree::Transaction do
251
225
  it "handles nil risk_data" do
252
226
  transaction = Braintree::Transaction._new(
253
227
  :gateway,
254
- :risk_data => nil
228
+ :risk_data => nil,
255
229
  )
256
230
  transaction.risk_data.should be_nil
257
231
  end
@@ -259,7 +233,7 @@ describe Braintree::Transaction do
259
233
  it "accepts network_transaction_id" do
260
234
  transaction = Braintree::Transaction._new(
261
235
  :gateway,
262
- :network_transaction_id => "123456789012345"
236
+ :network_transaction_id => "123456789012345",
263
237
  )
264
238
  transaction.network_transaction_id.should == "123456789012345"
265
239
  end
@@ -341,8 +315,8 @@ describe Braintree::Transaction do
341
315
  end
342
316
 
343
317
  describe "sale" do
344
- let(:mock_response) { {:transaction => {}}}
345
- let(:http_stub) { double('http_stub').as_null_object }
318
+ let(:mock_response) { {:transaction => {}} }
319
+ let(:http_stub) { double("http_stub").as_null_object }
346
320
 
347
321
  RSpec::Matchers.define :skip_advanced_fraud_check_value_is do |value|
348
322
  match { |params| params[:transaction][:options][:skip_advanced_fraud_checking] == value }
@@ -360,7 +334,7 @@ describe Braintree::Transaction do
360
334
  },
361
335
  :options => {
362
336
  :skip_advanced_fraud_checking => true
363
- }
337
+ },
364
338
  )
365
339
  end
366
340
 
@@ -376,7 +350,7 @@ describe Braintree::Transaction do
376
350
  },
377
351
  :options => {
378
352
  :skip_advanced_fraud_checking => false
379
- }
353
+ },
380
354
  )
381
355
  end
382
356
 
@@ -392,7 +366,7 @@ describe Braintree::Transaction do
392
366
  },
393
367
  :options => {
394
368
  :submit_for_settlement => false
395
- }
369
+ },
396
370
  )
397
371
  end
398
372
  end