braintree 2.104.1 → 3.0.1

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/braintree.gemspec +6 -3
  4. data/lib/braintree.rb +3 -17
  5. data/lib/braintree/address.rb +0 -22
  6. data/lib/braintree/base_module.rb +6 -0
  7. data/lib/braintree/configuration.rb +1 -1
  8. data/lib/braintree/credit_card.rb +0 -75
  9. data/lib/braintree/credit_card_gateway.rb +3 -32
  10. data/lib/braintree/credit_card_verification.rb +13 -0
  11. data/lib/braintree/customer.rb +3 -74
  12. data/lib/braintree/customer_gateway.rb +0 -23
  13. data/lib/braintree/dispute.rb +1 -7
  14. data/lib/braintree/dispute/{history_event.rb → status_history.rb} +3 -1
  15. data/lib/braintree/dispute_gateway.rb +2 -7
  16. data/lib/braintree/error_codes.rb +139 -170
  17. data/lib/braintree/exceptions.rb +5 -3
  18. data/lib/braintree/gateway.rb +0 -14
  19. data/lib/braintree/{android_pay_card.rb → google_pay_card.rb} +1 -2
  20. data/lib/braintree/merchant_account_gateway.rb +2 -0
  21. data/lib/braintree/payment_instrument_type.rb +1 -5
  22. data/lib/braintree/payment_method_gateway.rb +4 -9
  23. data/lib/braintree/payment_method_parser.rb +1 -8
  24. data/lib/braintree/subscription.rb +5 -5
  25. data/lib/braintree/successful_result.rb +0 -1
  26. data/lib/braintree/test/nonce.rb +4 -23
  27. data/lib/braintree/transaction.rb +2 -79
  28. data/lib/braintree/transaction/disbursement_details.rb +1 -0
  29. data/lib/braintree/transaction/{android_pay_details.rb → google_pay_details.rb} +1 -1
  30. data/lib/braintree/transaction/subscription_details.rb +2 -0
  31. data/lib/braintree/transaction_gateway.rb +12 -21
  32. data/lib/braintree/transaction_search.rb +0 -1
  33. data/lib/braintree/util.rb +17 -2
  34. data/lib/braintree/version.rb +2 -2
  35. data/lib/braintree/webhook_notification.rb +0 -10
  36. data/lib/braintree/webhook_testing_gateway.rb +0 -43
  37. data/lib/braintree/xml/libxml.rb +1 -0
  38. data/lib/braintree/xml/parser.rb +11 -34
  39. data/spec/integration/braintree/address_spec.rb +2 -89
  40. data/spec/integration/braintree/client_api/spec_helper.rb +0 -26
  41. data/spec/integration/braintree/credit_card_spec.rb +6 -471
  42. data/spec/integration/braintree/customer_spec.rb +22 -362
  43. data/spec/integration/braintree/dispute_search_spec.rb +2 -2
  44. data/spec/integration/braintree/dispute_spec.rb +1 -2
  45. data/spec/integration/braintree/payment_method_spec.rb +77 -120
  46. data/spec/integration/braintree/subscription_spec.rb +11 -16
  47. data/spec/integration/braintree/transaction_search_spec.rb +3 -3
  48. data/spec/integration/braintree/transaction_spec.rb +83 -511
  49. data/spec/integration/spec_helper.rb +1 -4
  50. data/spec/spec_helper.rb +1 -11
  51. data/spec/unit/braintree/address_spec.rb +0 -8
  52. data/spec/unit/braintree/credit_card_spec.rb +1 -20
  53. data/spec/unit/braintree/customer_spec.rb +0 -12
  54. data/spec/unit/braintree/dispute_spec.rb +1 -12
  55. data/spec/unit/braintree/http_spec.rb +3 -3
  56. data/spec/unit/braintree/transaction_spec.rb +1 -35
  57. data/spec/unit/braintree/util_spec.rb +37 -3
  58. data/spec/unit/braintree/webhook_notification_spec.rb +1 -1
  59. data/spec/unit/braintree/xml/parser_spec.rb +21 -16
  60. metadata +26 -30
  61. data/lib/braintree/amex_express_checkout_card.rb +0 -40
  62. data/lib/braintree/coinbase_account.rb +0 -34
  63. data/lib/braintree/europe_bank_account.rb +0 -36
  64. data/lib/braintree/europe_bank_account_gateway.rb +0 -17
  65. data/lib/braintree/ideal_payment.rb +0 -61
  66. data/lib/braintree/ideal_payment_gateway.rb +0 -19
  67. data/lib/braintree/masterpass_card.rb +0 -83
  68. data/lib/braintree/transaction/amex_express_checkout_details.rb +0 -21
  69. data/lib/braintree/transaction/coinbase_details.rb +0 -16
  70. data/lib/braintree/transaction/ideal_payment_details.rb +0 -19
  71. data/lib/braintree/transaction/masterpass_card_details.rb +0 -49
  72. data/lib/braintree/transparent_redirect.rb +0 -40
  73. data/lib/braintree/transparent_redirect_gateway.rb +0 -105
  74. data/lib/braintree/xml/rexml.rb +0 -71
  75. data/spec/hacks/tcp_socket.rb +0 -18
  76. data/spec/integration/braintree/coinbase_spec.rb +0 -34
  77. data/spec/integration/braintree/masterpass_card_spec.rb +0 -97
  78. data/spec/integration/braintree/transparent_redirect_spec.rb +0 -268
  79. data/spec/unit/braintree/transparent_redirect_spec.rb +0 -223
  80. data/spec/unit/braintree/xml/rexml_spec.rb +0 -51
@@ -82,7 +82,7 @@ describe Braintree::Dispute, "search" do
82
82
  effective_date = transaction.disputes.first.status_history.first.effective_date
83
83
 
84
84
  collection = Braintree::Dispute.search do |search|
85
- search.effective_date.between(effective_date, Date.parse(effective_date).next_day.to_s)
85
+ search.effective_date.between(effective_date, effective_date.next_day)
86
86
  end
87
87
 
88
88
  expect(collection.disputes.count).to be >= 1
@@ -95,7 +95,7 @@ describe Braintree::Dispute, "search" do
95
95
  disbursement_date = transaction.disputes.first.status_history.first.disbursement_date
96
96
 
97
97
  collection = Braintree::Dispute.search do |search|
98
- search.disbursement_date.between(disbursement_date, Date.parse(disbursement_date).next_day.to_s)
98
+ search.disbursement_date.between(disbursement_date, disbursement_date.next_day)
99
99
  end
100
100
 
101
101
  expect(collection.disputes.count).to be >= 1
@@ -141,7 +141,7 @@ describe Braintree::Dispute do
141
141
  end
142
142
 
143
143
  it "creates text evidence for the dispute with optional parameters" do
144
- result = Braintree::Dispute.add_text_evidence(dispute.id, { content: "123456789", tag: "REFUND_ID", sequence_number: 7 })
144
+ result = Braintree::Dispute.add_text_evidence(dispute.id, { content: "123456789", category: "REFUND_ID", sequence_number: 7 })
145
145
 
146
146
  result.success?.should == true
147
147
  result.evidence.category.should == "REFUND_ID"
@@ -149,7 +149,6 @@ describe Braintree::Dispute do
149
149
  result.evidence.created_at.between?(Time.now - 10, Time.now).should == true
150
150
  result.evidence.id.should =~ /^\w{16,}$/
151
151
  result.evidence.sent_to_processor_at.should == nil
152
- result.evidence.tag.should == "REFUND_ID"
153
152
  result.evidence.sequence_number.should == 7
154
153
  end
155
154
  end
@@ -101,87 +101,60 @@ describe Braintree::PaymentMethod do
101
101
  apple_pay_card.customer_id.should == customer.id
102
102
  end
103
103
 
104
- it "creates a payment method from a fake android pay proxy card nonce" do
104
+ it "creates a payment method from a fake google pay proxy card nonce" do
105
105
  customer = Braintree::Customer.create.customer
106
106
  token = SecureRandom.hex(16)
107
107
  result = Braintree::PaymentMethod.create(
108
- :payment_method_nonce => Braintree::Test::Nonce::AndroidPayDiscover,
108
+ :payment_method_nonce => Braintree::Test::Nonce::GooglePayDiscover,
109
109
  :customer_id => customer.id,
110
110
  :token => token
111
111
  )
112
112
 
113
113
  result.should be_success
114
- android_pay_card = result.payment_method
115
- android_pay_card.should be_a(Braintree::AndroidPayCard)
116
- android_pay_card.should_not be_nil
117
- android_pay_card.token.should == token
118
- android_pay_card.card_type.should == Braintree::CreditCard::CardType::Discover
119
- android_pay_card.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
120
- android_pay_card.expiration_month.to_i.should > 0
121
- android_pay_card.expiration_year.to_i.should > 0
122
- android_pay_card.default.should == true
123
- android_pay_card.image_url.should =~ /android_pay/
124
- android_pay_card.is_network_tokenized?.should == false
125
- android_pay_card.source_card_type.should == Braintree::CreditCard::CardType::Discover
126
- android_pay_card.source_card_last_4.should == "1111"
127
- android_pay_card.google_transaction_id.should == "google_transaction_id"
128
- android_pay_card.source_description.should == "Discover 1111"
129
- android_pay_card.customer_id.should == customer.id
114
+ google_pay_card = result.payment_method
115
+ google_pay_card.should be_a(Braintree::GooglePayCard)
116
+ google_pay_card.should_not be_nil
117
+ google_pay_card.token.should == token
118
+ google_pay_card.card_type.should == Braintree::CreditCard::CardType::Discover
119
+ google_pay_card.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
120
+ google_pay_card.expiration_month.to_i.should > 0
121
+ google_pay_card.expiration_year.to_i.should > 0
122
+ google_pay_card.default.should == true
123
+ google_pay_card.image_url.should =~ /android_pay/
124
+ google_pay_card.is_network_tokenized?.should == false
125
+ google_pay_card.source_card_type.should == Braintree::CreditCard::CardType::Discover
126
+ google_pay_card.source_card_last_4.should == "1111"
127
+ google_pay_card.google_transaction_id.should == "google_transaction_id"
128
+ google_pay_card.source_description.should == "Discover 1111"
129
+ google_pay_card.customer_id.should == customer.id
130
130
  end
131
131
 
132
- it "creates a payment method from a android pay network token nonce" do
132
+ it "creates a payment method from a google pay network token nonce" do
133
133
  customer = Braintree::Customer.create.customer
134
134
  token = SecureRandom.hex(16)
135
135
  result = Braintree::PaymentMethod.create(
136
- :payment_method_nonce => Braintree::Test::Nonce::AndroidPayMasterCard,
136
+ :payment_method_nonce => Braintree::Test::Nonce::GooglePayMasterCard,
137
137
  :customer_id => customer.id,
138
138
  :token => token
139
139
  )
140
140
 
141
141
  result.should be_success
142
- android_pay_card = result.payment_method
143
- android_pay_card.should be_a(Braintree::AndroidPayCard)
144
- android_pay_card.should_not be_nil
145
- android_pay_card.token.should == token
146
- android_pay_card.card_type.should == Braintree::CreditCard::CardType::MasterCard
147
- android_pay_card.virtual_card_type.should == Braintree::CreditCard::CardType::MasterCard
148
- android_pay_card.expiration_month.to_i.should > 0
149
- android_pay_card.expiration_year.to_i.should > 0
150
- android_pay_card.default.should == true
151
- android_pay_card.image_url.should =~ /android_pay/
152
- android_pay_card.is_network_tokenized?.should == true
153
- android_pay_card.source_card_type.should == Braintree::CreditCard::CardType::MasterCard
154
- android_pay_card.source_card_last_4.should == "4444"
155
- android_pay_card.google_transaction_id.should == "google_transaction_id"
156
- android_pay_card.source_description.should == "MasterCard 4444"
157
- android_pay_card.customer_id.should == customer.id
158
- end
159
-
160
- it "creates a payment method from an amex express checkout card nonce" do
161
- customer = Braintree::Customer.create.customer
162
- token = SecureRandom.hex(16)
163
- result = Braintree::PaymentMethod.create(
164
- :payment_method_nonce => Braintree::Test::Nonce::AmexExpressCheckout,
165
- :customer_id => customer.id,
166
- :token => token
167
- )
168
-
169
- result.should be_success
170
- amex_express_checkout_card = result.payment_method
171
- amex_express_checkout_card.should be_a(Braintree::AmexExpressCheckoutCard)
172
- amex_express_checkout_card.should_not be_nil
173
-
174
- amex_express_checkout_card.default.should == true
175
- amex_express_checkout_card.card_type.should == "American Express"
176
- amex_express_checkout_card.token.should == token
177
- amex_express_checkout_card.bin.should =~ /\A\d{6}\z/
178
- amex_express_checkout_card.expiration_month.should =~ /\A\d{2}\z/
179
- amex_express_checkout_card.expiration_year.should =~ /\A\d{4}\z/
180
- amex_express_checkout_card.card_member_number.should =~ /\A\d{4}\z/
181
- amex_express_checkout_card.card_member_expiry_date.should =~ /\A\d{2}\/\d{2}\z/
182
- amex_express_checkout_card.image_url.should include(".png")
183
- amex_express_checkout_card.source_description.should =~ /\AAmEx \d{4}\z/
184
- amex_express_checkout_card.customer_id.should == customer.id
142
+ google_pay_card = result.payment_method
143
+ google_pay_card.should be_a(Braintree::GooglePayCard)
144
+ google_pay_card.should_not be_nil
145
+ google_pay_card.token.should == token
146
+ google_pay_card.card_type.should == Braintree::CreditCard::CardType::MasterCard
147
+ google_pay_card.virtual_card_type.should == Braintree::CreditCard::CardType::MasterCard
148
+ google_pay_card.expiration_month.to_i.should > 0
149
+ google_pay_card.expiration_year.to_i.should > 0
150
+ google_pay_card.default.should == true
151
+ google_pay_card.image_url.should =~ /android_pay/
152
+ google_pay_card.is_network_tokenized?.should == true
153
+ google_pay_card.source_card_type.should == Braintree::CreditCard::CardType::MasterCard
154
+ google_pay_card.source_card_last_4.should == "4444"
155
+ google_pay_card.google_transaction_id.should == "google_transaction_id"
156
+ google_pay_card.source_description.should == "MasterCard 4444"
157
+ google_pay_card.customer_id.should == customer.id
185
158
  end
186
159
 
187
160
  it "creates a payment method from venmo account nonce" do
@@ -1024,61 +997,61 @@ describe Braintree::PaymentMethod do
1024
997
  end
1025
998
  end
1026
999
 
1027
- context "android pay cards" do
1000
+ context "google pay cards" do
1028
1001
  it "finds the proxy card payment method with the given token" do
1029
1002
  customer = Braintree::Customer.create!
1030
1003
  payment_method_token = make_token
1031
1004
  result = Braintree::PaymentMethod.create(
1032
- :payment_method_nonce => Braintree::Test::Nonce::AndroidPayDiscover,
1005
+ :payment_method_nonce => Braintree::Test::Nonce::GooglePayDiscover,
1033
1006
  :customer_id => customer.id,
1034
1007
  :token => payment_method_token
1035
1008
  )
1036
1009
  result.should be_success
1037
1010
 
1038
- android_pay_card = Braintree::PaymentMethod.find(payment_method_token)
1039
- android_pay_card.should be_a(Braintree::AndroidPayCard)
1040
- android_pay_card.should_not be_nil
1041
- android_pay_card.token.should == payment_method_token
1042
- android_pay_card.card_type.should == Braintree::CreditCard::CardType::Discover
1043
- android_pay_card.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
1044
- android_pay_card.expiration_month.to_i.should > 0
1045
- android_pay_card.expiration_year.to_i.should > 0
1046
- android_pay_card.default.should == true
1047
- android_pay_card.image_url.should =~ /android_pay/
1048
- android_pay_card.is_network_tokenized?.should == false
1049
- android_pay_card.source_card_type.should == Braintree::CreditCard::CardType::Discover
1050
- android_pay_card.source_card_last_4.should == "1111"
1051
- android_pay_card.google_transaction_id.should == "google_transaction_id"
1052
- android_pay_card.source_description.should == "Discover 1111"
1053
- android_pay_card.customer_id.should == customer.id
1011
+ google_pay_card = Braintree::PaymentMethod.find(payment_method_token)
1012
+ google_pay_card.should be_a(Braintree::GooglePayCard)
1013
+ google_pay_card.should_not be_nil
1014
+ google_pay_card.token.should == payment_method_token
1015
+ google_pay_card.card_type.should == Braintree::CreditCard::CardType::Discover
1016
+ google_pay_card.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
1017
+ google_pay_card.expiration_month.to_i.should > 0
1018
+ google_pay_card.expiration_year.to_i.should > 0
1019
+ google_pay_card.default.should == true
1020
+ google_pay_card.image_url.should =~ /android_pay/
1021
+ google_pay_card.is_network_tokenized?.should == false
1022
+ google_pay_card.source_card_type.should == Braintree::CreditCard::CardType::Discover
1023
+ google_pay_card.source_card_last_4.should == "1111"
1024
+ google_pay_card.google_transaction_id.should == "google_transaction_id"
1025
+ google_pay_card.source_description.should == "Discover 1111"
1026
+ google_pay_card.customer_id.should == customer.id
1054
1027
  end
1055
1028
 
1056
1029
  it "finds the network token payment method with the given token" do
1057
1030
  customer = Braintree::Customer.create!
1058
1031
  payment_method_token = make_token
1059
1032
  result = Braintree::PaymentMethod.create(
1060
- :payment_method_nonce => Braintree::Test::Nonce::AndroidPayMasterCard,
1033
+ :payment_method_nonce => Braintree::Test::Nonce::GooglePayMasterCard,
1061
1034
  :customer_id => customer.id,
1062
1035
  :token => payment_method_token
1063
1036
  )
1064
1037
  result.should be_success
1065
1038
 
1066
- android_pay_card = Braintree::PaymentMethod.find(payment_method_token)
1067
- android_pay_card.should be_a(Braintree::AndroidPayCard)
1068
- android_pay_card.should_not be_nil
1069
- android_pay_card.token.should == payment_method_token
1070
- android_pay_card.card_type.should == Braintree::CreditCard::CardType::MasterCard
1071
- android_pay_card.virtual_card_type.should == Braintree::CreditCard::CardType::MasterCard
1072
- android_pay_card.expiration_month.to_i.should > 0
1073
- android_pay_card.expiration_year.to_i.should > 0
1074
- android_pay_card.default.should == true
1075
- android_pay_card.image_url.should =~ /android_pay/
1076
- android_pay_card.is_network_tokenized?.should == true
1077
- android_pay_card.source_card_type.should == Braintree::CreditCard::CardType::MasterCard
1078
- android_pay_card.source_card_last_4.should == "4444"
1079
- android_pay_card.google_transaction_id.should == "google_transaction_id"
1080
- android_pay_card.source_description.should == "MasterCard 4444"
1081
- android_pay_card.customer_id.should == customer.id
1039
+ google_pay_card = Braintree::PaymentMethod.find(payment_method_token)
1040
+ google_pay_card.should be_a(Braintree::GooglePayCard)
1041
+ google_pay_card.should_not be_nil
1042
+ google_pay_card.token.should == payment_method_token
1043
+ google_pay_card.card_type.should == Braintree::CreditCard::CardType::MasterCard
1044
+ google_pay_card.virtual_card_type.should == Braintree::CreditCard::CardType::MasterCard
1045
+ google_pay_card.expiration_month.to_i.should > 0
1046
+ google_pay_card.expiration_year.to_i.should > 0
1047
+ google_pay_card.default.should == true
1048
+ google_pay_card.image_url.should =~ /android_pay/
1049
+ google_pay_card.is_network_tokenized?.should == true
1050
+ google_pay_card.source_card_type.should == Braintree::CreditCard::CardType::MasterCard
1051
+ google_pay_card.source_card_last_4.should == "4444"
1052
+ google_pay_card.google_transaction_id.should == "google_transaction_id"
1053
+ google_pay_card.source_description.should == "MasterCard 4444"
1054
+ google_pay_card.customer_id.should == customer.id
1082
1055
  end
1083
1056
  end
1084
1057
 
@@ -1110,18 +1083,18 @@ describe Braintree::PaymentMethod do
1110
1083
  end
1111
1084
 
1112
1085
  describe "self.delete" do
1113
- it "deletes an android pay card" do
1086
+ it "deletes an google pay card" do
1114
1087
  customer = Braintree::Customer.create!
1115
1088
 
1116
1089
  create_result = Braintree::PaymentMethod.create(
1117
- :payment_method_nonce => Braintree::Test::Nonce::AndroidPayDiscover,
1090
+ :payment_method_nonce => Braintree::Test::Nonce::GooglePayDiscover,
1118
1091
  :customer_id => customer.id
1119
1092
  )
1120
1093
 
1121
1094
  token = create_result.payment_method.token
1122
1095
 
1123
- android_card = Braintree::PaymentMethod.find(token)
1124
- android_card.should be_a(Braintree::AndroidPayCard)
1096
+ google_card = Braintree::PaymentMethod.find(token)
1097
+ google_card.should be_a(Braintree::GooglePayCard)
1125
1098
 
1126
1099
  delete_result = Braintree::PaymentMethod.delete(token)
1127
1100
  delete_result.success?.should == true
@@ -1522,22 +1495,6 @@ describe Braintree::PaymentMethod do
1522
1495
  end
1523
1496
  end
1524
1497
 
1525
- context "coinbase accounts" do
1526
- it "cannot create a payment method token with Coinbase" do
1527
- customer = Braintree::Customer.create!
1528
-
1529
- nonce = Braintree::Test::Nonce::Coinbase
1530
- result = Braintree::PaymentMethod.create(
1531
- :payment_method_nonce => nonce,
1532
- :customer_id => customer.id
1533
- )
1534
-
1535
- result.should_not be_success
1536
-
1537
- result.errors.for(:coinbase_account).first.code.should == Braintree::ErrorCodes::PaymentMethod::PaymentMethodNoLongerSupported
1538
- end
1539
- end
1540
-
1541
1498
  context "paypal accounts" do
1542
1499
  it "updates a paypal account's token" do
1543
1500
  customer = Braintree::Customer.create!
@@ -1739,7 +1696,7 @@ describe Braintree::PaymentMethod do
1739
1696
  it "raises an error if the token isn't found" do
1740
1697
  expect do
1741
1698
  @granting_gateway.payment_method.grant("not_a_real_token", false)
1742
- end.to raise_error
1699
+ end.to raise_error(Braintree::NotFoundError)
1743
1700
  end
1744
1701
 
1745
1702
  it "returns a valid nonce with no options set" do
@@ -1754,7 +1711,7 @@ describe Braintree::PaymentMethod do
1754
1711
  it "raises an error if the token isn't found" do
1755
1712
  expect do
1756
1713
  @granting_gateway.payment_method.revoke("not_a_real_token")
1757
- end.to raise_error
1714
+ end.to raise_error(Braintree::NotFoundError)
1758
1715
  end
1759
1716
 
1760
1717
  it "renders a granted nonce useless" do
@@ -19,23 +19,21 @@ describe Braintree::Subscription do
19
19
  :plan_id => SpecHelper::TriallessPlan[:id]
20
20
  )
21
21
 
22
- date_format = /^\d{4}\D\d{1,2}\D\d{1,2}$/
23
22
  result.success?.should == true
24
23
  result.subscription.id.should =~ /^\w{6}$/
25
24
  result.subscription.status.should == Braintree::Subscription::Status::Active
26
25
  result.subscription.plan_id.should == "integration_trialless_plan"
27
26
 
28
- result.subscription.first_billing_date.should match(date_format)
29
- result.subscription.next_billing_date.should match(date_format)
30
- result.subscription.billing_period_start_date.should match(date_format)
31
- result.subscription.billing_period_end_date.should match(date_format)
32
- result.subscription.paid_through_date.should match(date_format)
27
+ expect(result.subscription.first_billing_date).to be_a Date
28
+ expect(result.subscription.next_billing_date).to be_a Date
29
+ expect(result.subscription.billing_period_start_date).to be_a Date
30
+ expect(result.subscription.billing_period_end_date).to be_a Date
31
+ expect(result.subscription.paid_through_date).to be_a Date
33
32
 
34
33
  result.subscription.created_at.between?(Time.now - 60, Time.now).should == true
35
34
  result.subscription.updated_at.between?(Time.now - 60, Time.now).should == true
36
35
 
37
36
  result.subscription.failure_count.should == 0
38
- result.subscription.next_bill_amount.should == "12.34"
39
37
  result.subscription.next_billing_period_amount.should == "12.34"
40
38
  result.subscription.payment_method_token.should == @credit_card.token
41
39
 
@@ -68,7 +66,6 @@ describe Braintree::Subscription do
68
66
  :id => new_id
69
67
  )
70
68
 
71
- date_format = /^\d{4}\D\d{1,2}\D\d{1,2}$/
72
69
  result.success?.should == true
73
70
  result.subscription.id.should == new_id
74
71
  end
@@ -195,7 +192,7 @@ describe Braintree::Subscription do
195
192
  )
196
193
 
197
194
  result.success?.should == true
198
- result.subscription.first_billing_date.should == (Date.today + 3).to_s
195
+ result.subscription.first_billing_date.should == Date.today + 3
199
196
  result.subscription.status.should == Braintree::Subscription::Status::Pending
200
197
  end
201
198
 
@@ -678,20 +675,18 @@ describe Braintree::Subscription do
678
675
  :plan_id => SpecHelper::TriallessPlan[:id]
679
676
  )
680
677
 
681
- date_format = /^\d{4}\D\d{1,2}\D\d{1,2}$/
682
678
  subscription.id.should =~ /^\w{6}$/
683
679
  subscription.status.should == Braintree::Subscription::Status::Active
684
680
  subscription.plan_id.should == "integration_trialless_plan"
685
681
 
686
- subscription.first_billing_date.should match(date_format)
687
- subscription.next_billing_date.should match(date_format)
688
- subscription.billing_period_start_date.should match(date_format)
689
- subscription.billing_period_end_date.should match(date_format)
690
- subscription.paid_through_date.should match(date_format)
682
+ expect(subscription.first_billing_date).to be_a Date
683
+ expect(subscription.next_billing_date).to be_a Date
684
+ expect(subscription.billing_period_start_date).to be_a Date
685
+ expect(subscription.billing_period_end_date).to be_a Date
686
+ expect(subscription.paid_through_date).to be_a Date
691
687
 
692
688
  subscription.failure_count.should == 0
693
689
  subscription.current_billing_cycle.should == 1
694
- subscription.next_bill_amount.should == "12.34"
695
690
  subscription.next_billing_period_amount.should == "12.34"
696
691
  subscription.payment_method_token.should == @credit_card.token
697
692
  end
@@ -468,7 +468,7 @@ describe Braintree::Transaction, "search" do
468
468
  )
469
469
  SpecHelper.settle_transaction transaction.id
470
470
 
471
- refund_transaction = transaction.refund.new_transaction
471
+ refund_transaction = Braintree::Transaction.refund(transaction.id).transaction
472
472
 
473
473
  collection = Braintree::Transaction.search do |search|
474
474
  search.credit_card_cardholder_name.is cardholder_name
@@ -1316,12 +1316,12 @@ describe Braintree::Transaction, "search" do
1316
1316
  end
1317
1317
 
1318
1318
  context "when the search times out" do
1319
- it "raises a Down for Maintenance Error" do
1319
+ it "raises a UnexpectedError" do
1320
1320
  expect {
1321
1321
  collection = Braintree::Transaction.search do |search|
1322
1322
  search.amount.is -10
1323
1323
  end
1324
- }.to raise_error(Braintree::DownForMaintenanceError)
1324
+ }.to raise_error(Braintree::UnexpectedError)
1325
1325
  end
1326
1326
  end
1327
1327
  end
@@ -509,7 +509,7 @@ describe Braintree::Transaction do
509
509
  result.transaction.credit_card_details.customer_location.should == "US"
510
510
  end
511
511
 
512
- it "accepts additional security parameters: device_session_id and fraud_merchant_id" do
512
+ it "accepts additional security parameters: device_data" do
513
513
  result = Braintree::Transaction.create(
514
514
  :type => "sale",
515
515
  :amount => Braintree::Test::TransactionAmounts::Authorize,
@@ -517,8 +517,7 @@ describe Braintree::Transaction do
517
517
  :number => Braintree::Test::CreditCardNumbers::Visa,
518
518
  :expiration_date => "05/2009"
519
519
  },
520
- :device_session_id => "abc123",
521
- :fraud_merchant_id => "7"
520
+ :device_data => "device_data",
522
521
  )
523
522
 
524
523
  result.success?.should == true
@@ -1372,22 +1371,6 @@ describe Braintree::Transaction do
1372
1371
  end
1373
1372
  end
1374
1373
 
1375
- context "recurring" do
1376
- it "marks a transaction as recurring" do
1377
- result = Braintree::Transaction.create(
1378
- :type => "sale",
1379
- :amount => Braintree::Test::TransactionAmounts::Authorize,
1380
- :credit_card => {
1381
- :number => Braintree::Test::CreditCardNumbers::Visa,
1382
- :expiration_date => "12/12",
1383
- },
1384
- :recurring => true
1385
- )
1386
- result.success?.should == true
1387
- result.transaction.recurring.should == true
1388
- end
1389
- end
1390
-
1391
1374
  context "transaction_source" do
1392
1375
  it "marks a transactions as recurring_first" do
1393
1376
  result = Braintree::Transaction.create(
@@ -1804,106 +1787,83 @@ describe Braintree::Transaction do
1804
1787
  apple_pay_details.token.should_not be_nil
1805
1788
  end
1806
1789
 
1807
- it "can create a transaction with a fake android pay proxy card nonce" do
1790
+ it "can create a transaction with a fake google pay proxy card nonce" do
1808
1791
  customer = Braintree::Customer.create!
1809
1792
  result = Braintree::Transaction.create(
1810
1793
  :type => "sale",
1811
1794
  :amount => Braintree::Test::TransactionAmounts::Authorize,
1812
- :payment_method_nonce => Braintree::Test::Nonce::AndroidPayDiscover
1795
+ :payment_method_nonce => Braintree::Test::Nonce::GooglePayDiscover
1813
1796
  )
1814
1797
  result.success?.should == true
1815
1798
  result.transaction.should_not be_nil
1816
- android_pay_details = result.transaction.android_pay_details
1817
- android_pay_details.should_not be_nil
1818
- android_pay_details.bin.should_not be_nil
1819
- android_pay_details.card_type.should == Braintree::CreditCard::CardType::Discover
1820
- android_pay_details.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
1821
- android_pay_details.last_4.should == "1117"
1822
- android_pay_details.virtual_card_last_4.should == "1117"
1823
- android_pay_details.source_description.should == "Discover 1111"
1824
- android_pay_details.expiration_month.to_i.should > 0
1825
- android_pay_details.expiration_year.to_i.should > 0
1826
- android_pay_details.google_transaction_id.should == "google_transaction_id"
1827
- android_pay_details.image_url.should_not be_nil
1828
- android_pay_details.is_network_tokenized?.should == false
1829
- android_pay_details.token.should be_nil
1830
- android_pay_details.prepaid.should_not be_nil
1831
- android_pay_details.healthcare.should_not be_nil
1832
- android_pay_details.debit.should_not be_nil
1833
- android_pay_details.durbin_regulated.should_not be_nil
1834
- android_pay_details.commercial.should_not be_nil
1835
- android_pay_details.payroll.should_not be_nil
1836
- android_pay_details.product_id.should_not be_nil
1837
- end
1838
-
1839
- it "can create a vaulted transaction with a fake android pay proxy card nonce" do
1799
+ google_pay_details = result.transaction.google_pay_details
1800
+ google_pay_details.should_not be_nil
1801
+ google_pay_details.bin.should_not be_nil
1802
+ google_pay_details.card_type.should == Braintree::CreditCard::CardType::Discover
1803
+ google_pay_details.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
1804
+ google_pay_details.last_4.should == "1117"
1805
+ google_pay_details.virtual_card_last_4.should == "1117"
1806
+ google_pay_details.source_description.should == "Discover 1111"
1807
+ google_pay_details.expiration_month.to_i.should > 0
1808
+ google_pay_details.expiration_year.to_i.should > 0
1809
+ google_pay_details.google_transaction_id.should == "google_transaction_id"
1810
+ google_pay_details.image_url.should_not be_nil
1811
+ google_pay_details.is_network_tokenized?.should == false
1812
+ google_pay_details.token.should be_nil
1813
+ google_pay_details.prepaid.should_not be_nil
1814
+ google_pay_details.healthcare.should_not be_nil
1815
+ google_pay_details.debit.should_not be_nil
1816
+ google_pay_details.durbin_regulated.should_not be_nil
1817
+ google_pay_details.commercial.should_not be_nil
1818
+ google_pay_details.payroll.should_not be_nil
1819
+ google_pay_details.product_id.should_not be_nil
1820
+ end
1821
+
1822
+ it "can create a vaulted transaction with a fake google pay proxy card nonce" do
1840
1823
  customer = Braintree::Customer.create!
1841
1824
  result = Braintree::Transaction.create(
1842
1825
  :type => "sale",
1843
1826
  :amount => Braintree::Test::TransactionAmounts::Authorize,
1844
- :payment_method_nonce => Braintree::Test::Nonce::AndroidPayDiscover,
1827
+ :payment_method_nonce => Braintree::Test::Nonce::GooglePayDiscover,
1845
1828
  :options => { :store_in_vault_on_success => true }
1846
1829
  )
1847
1830
  result.success?.should == true
1848
1831
  result.transaction.should_not be_nil
1849
- android_pay_details = result.transaction.android_pay_details
1850
- android_pay_details.should_not be_nil
1851
- android_pay_details.card_type.should == Braintree::CreditCard::CardType::Discover
1852
- android_pay_details.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
1853
- android_pay_details.last_4.should == "1117"
1854
- android_pay_details.virtual_card_last_4.should == "1117"
1855
- android_pay_details.source_description.should == "Discover 1111"
1856
- android_pay_details.expiration_month.to_i.should > 0
1857
- android_pay_details.expiration_year.to_i.should > 0
1858
- android_pay_details.google_transaction_id.should == "google_transaction_id"
1859
- android_pay_details.image_url.should_not be_nil
1860
- android_pay_details.is_network_tokenized?.should == false
1861
- android_pay_details.token.should_not be_nil
1862
- end
1863
-
1864
- it "can create a transaction with a fake android pay network token nonce" do
1832
+ google_pay_details = result.transaction.google_pay_details
1833
+ google_pay_details.should_not be_nil
1834
+ google_pay_details.card_type.should == Braintree::CreditCard::CardType::Discover
1835
+ google_pay_details.virtual_card_type.should == Braintree::CreditCard::CardType::Discover
1836
+ google_pay_details.last_4.should == "1117"
1837
+ google_pay_details.virtual_card_last_4.should == "1117"
1838
+ google_pay_details.source_description.should == "Discover 1111"
1839
+ google_pay_details.expiration_month.to_i.should > 0
1840
+ google_pay_details.expiration_year.to_i.should > 0
1841
+ google_pay_details.google_transaction_id.should == "google_transaction_id"
1842
+ google_pay_details.image_url.should_not be_nil
1843
+ google_pay_details.is_network_tokenized?.should == false
1844
+ google_pay_details.token.should_not be_nil
1845
+ end
1846
+
1847
+ it "can create a transaction with a fake google pay network token nonce" do
1865
1848
  customer = Braintree::Customer.create!
1866
1849
  result = Braintree::Transaction.create(
1867
1850
  :type => "sale",
1868
1851
  :amount => Braintree::Test::TransactionAmounts::Authorize,
1869
- :payment_method_nonce => Braintree::Test::Nonce::AndroidPayMasterCard
1870
- )
1871
- result.success?.should == true
1872
- result.transaction.should_not be_nil
1873
- android_pay_details = result.transaction.android_pay_details
1874
- android_pay_details.should_not be_nil
1875
- android_pay_details.card_type.should == Braintree::CreditCard::CardType::MasterCard
1876
- android_pay_details.virtual_card_type.should == Braintree::CreditCard::CardType::MasterCard
1877
- android_pay_details.last_4.should == "4444"
1878
- android_pay_details.virtual_card_last_4.should == "4444"
1879
- android_pay_details.source_description.should == "MasterCard 4444"
1880
- android_pay_details.expiration_month.to_i.should > 0
1881
- android_pay_details.expiration_year.to_i.should > 0
1882
- android_pay_details.google_transaction_id.should == "google_transaction_id"
1883
- android_pay_details.is_network_tokenized?.should == true
1884
- end
1885
-
1886
- it "can create a transaction with a fake amex express checkout card nonce" do
1887
- result = Braintree::Transaction.create(
1888
- :type => "sale",
1889
- :merchant_account_id => SpecHelper::FakeAmexDirectMerchantAccountId,
1890
- :amount => Braintree::Test::TransactionAmounts::Authorize,
1891
- :payment_method_nonce => Braintree::Test::Nonce::AmexExpressCheckout,
1892
- :options => {:store_in_vault => true}
1852
+ :payment_method_nonce => Braintree::Test::Nonce::GooglePayMasterCard
1893
1853
  )
1894
1854
  result.success?.should == true
1895
1855
  result.transaction.should_not be_nil
1896
- checkout_details = result.transaction.amex_express_checkout_details
1897
- checkout_details.should_not be_nil
1898
- checkout_details.card_type.should == "American Express"
1899
- checkout_details.token.should respond_to(:to_str)
1900
- checkout_details.bin.should =~ /\A\d{6}\z/
1901
- checkout_details.expiration_month.should =~ /\A\d{2}\z/
1902
- checkout_details.expiration_year.should =~ /\A\d{4}\z/
1903
- checkout_details.card_member_number.should =~ /\A\d{4}\z/
1904
- checkout_details.card_member_expiry_date.should =~ /\A\d{2}\/\d{2}\z/
1905
- checkout_details.image_url.should include(".png")
1906
- checkout_details.source_description.should =~ /\AAmEx \d{4}\z/
1856
+ google_pay_details = result.transaction.google_pay_details
1857
+ google_pay_details.should_not be_nil
1858
+ google_pay_details.card_type.should == Braintree::CreditCard::CardType::MasterCard
1859
+ google_pay_details.virtual_card_type.should == Braintree::CreditCard::CardType::MasterCard
1860
+ google_pay_details.last_4.should == "4444"
1861
+ google_pay_details.virtual_card_last_4.should == "4444"
1862
+ google_pay_details.source_description.should == "MasterCard 4444"
1863
+ google_pay_details.expiration_month.to_i.should > 0
1864
+ google_pay_details.expiration_year.to_i.should > 0
1865
+ google_pay_details.google_transaction_id.should == "google_transaction_id"
1866
+ google_pay_details.is_network_tokenized?.should == true
1907
1867
  end
1908
1868
 
1909
1869
  it "can create a transaction with a fake venmo account nonce" do
@@ -2865,14 +2825,6 @@ describe Braintree::Transaction do
2865
2825
  }.to raise_error(ArgumentError)
2866
2826
  end
2867
2827
 
2868
- it "assigns the refund_id on the original transaction" do
2869
- transaction = create_paypal_transaction_for_refund
2870
- refund_transaction = Braintree::Transaction.refund(transaction.id).transaction
2871
- transaction = Braintree::Transaction.find(transaction.id)
2872
-
2873
- transaction.refund_id.should == refund_transaction.id
2874
- end
2875
-
2876
2828
  it "assigns the refunded_transaction_id to the original transaction" do
2877
2829
  transaction = create_paypal_transaction_for_refund
2878
2830
  refund_transaction = Braintree::Transaction.refund(transaction.id).transaction
@@ -2902,7 +2854,13 @@ describe Braintree::Transaction do
2902
2854
  response = config.http.put("#{config.base_merchant_path}/transactions/#{transaction.id}/settle")
2903
2855
  result = Braintree::Transaction.refund(transaction.id, :amount => "2046.00")
2904
2856
  result.success?.should == false
2905
- result.errors.for(:transaction).on(:base)[0].code.should == Braintree::ErrorCodes::Transaction::RefundAuthSoftDeclined
2857
+ result.transaction.id.should =~ /^\w{6,}$/
2858
+ result.transaction.type.should == "credit"
2859
+ result.transaction.status.should == Braintree::Transaction::Status::ProcessorDeclined
2860
+ result.transaction.processor_response_code.should == "2046"
2861
+ result.transaction.processor_response_text.should == "Declined"
2862
+ result.transaction.processor_response_type.should == Braintree::ProcessorResponseTypes::SoftDeclined
2863
+ result.transaction.additional_processor_response.should == "2046 : Declined"
2906
2864
  end
2907
2865
 
2908
2866
  it "handles hard declined refund authorizations" do
@@ -2917,7 +2875,13 @@ describe Braintree::Transaction do
2917
2875
  response = config.http.put("#{config.base_merchant_path}/transactions/#{transaction.id}/settle")
2918
2876
  result = Braintree::Transaction.refund(transaction.id, :amount => "2009.00")
2919
2877
  result.success?.should == false
2920
- result.errors.for(:transaction).on(:base)[0].code.should == Braintree::ErrorCodes::Transaction::RefundAuthHardDeclined
2878
+ result.transaction.id.should =~ /^\w{6,}$/
2879
+ result.transaction.type.should == "credit"
2880
+ result.transaction.status.should == Braintree::Transaction::Status::ProcessorDeclined
2881
+ result.transaction.processor_response_code.should == "2009"
2882
+ result.transaction.processor_response_text.should == "No Such Issuer"
2883
+ result.transaction.processor_response_type.should == Braintree::ProcessorResponseTypes::HardDeclined
2884
+ result.transaction.additional_processor_response.should == "2009 : No Such Issuer"
2921
2885
  end
2922
2886
  end
2923
2887
 
@@ -4571,14 +4535,6 @@ describe Braintree::Transaction do
4571
4535
  result.transaction.type.should == "credit"
4572
4536
  end
4573
4537
 
4574
- it "assigns the refund_id on the original transaction" do
4575
- transaction = create_transaction_to_refund
4576
- refund_transaction = Braintree::Transaction.refund(transaction.id).transaction
4577
- transaction = Braintree::Transaction.find(transaction.id)
4578
-
4579
- transaction.refund_id.should == refund_transaction.id
4580
- end
4581
-
4582
4538
  it "assigns the refunded_transaction_id to the original transaction" do
4583
4539
  transaction = create_transaction_to_refund
4584
4540
  refund_transaction = Braintree::Transaction.refund(transaction.id).transaction
@@ -5020,11 +4976,11 @@ describe Braintree::Transaction do
5020
4976
  result.transaction.status.should == Braintree::Transaction::Status::Authorized
5021
4977
  end
5022
4978
 
5023
- context "Android Pay params" do
4979
+ context "Google Pay params" do
5024
4980
  it "works with full params" do
5025
4981
  params = {
5026
4982
  :amount => "3.12",
5027
- :android_pay_card => {
4983
+ :google_pay_card => {
5028
4984
  :number => "4012888888881881",
5029
4985
  :cryptogram => "AAAAAAAA/COBt84dnIEcwAA3gAAGhgEDoLABAAhAgAABAAAALnNCLw==",
5030
4986
  :google_transaction_id => "25469d622c1dd37cb1a403c6d438e850",
@@ -5043,7 +4999,7 @@ describe Braintree::Transaction do
5043
4999
  it "works with only number, cryptogram, expiration and transaction ID (network tokenized card)" do
5044
5000
  params = {
5045
5001
  :amount => "3.12",
5046
- :android_pay_card => {
5002
+ :google_pay_card => {
5047
5003
  :number => "4012888888881881",
5048
5004
  :cryptogram => "AAAAAAAA/COBt84dnIEcwAA3gAAGhgEDoLABAAhAgAABAAAALnNCLw==",
5049
5005
  :google_transaction_id => "25469d622c1dd37cb1a403c6d438e850",
@@ -5059,7 +5015,7 @@ describe Braintree::Transaction do
5059
5015
  it "works with only number, expiration and transaction ID (non-tokenized card)" do
5060
5016
  params = {
5061
5017
  :amount => "3.12",
5062
- :android_pay_card => {
5018
+ :google_pay_card => {
5063
5019
  :number => "4012888888881881",
5064
5020
  :google_transaction_id => "25469d622c1dd37cb1a403c6d438e850",
5065
5021
  :expiration_month => "10",
@@ -6048,184 +6004,6 @@ describe Braintree::Transaction do
6048
6004
  end
6049
6005
  end
6050
6006
 
6051
- describe "self.create_from_transparent_redirect" do
6052
- it "returns a successful result if successful" do
6053
- params = {
6054
- :transaction => {
6055
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6056
- :credit_card => {
6057
- :number => Braintree::Test::CreditCardNumbers::Visa,
6058
- :expiration_date => "05/2009"
6059
- }
6060
- }
6061
- }
6062
- tr_data_params = {
6063
- :transaction => {
6064
- :type => "sale"
6065
- }
6066
- }
6067
- tr_data = Braintree::TransparentRedirect.transaction_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
6068
- query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params, Braintree::Transaction.create_transaction_url)
6069
- result = Braintree::Transaction.create_from_transparent_redirect(query_string_response)
6070
-
6071
- result.success?.should == true
6072
- transaction = result.transaction
6073
- transaction.type.should == "sale"
6074
- transaction.amount.should == BigDecimal("1000.00")
6075
- transaction.credit_card_details.bin.should == Braintree::Test::CreditCardNumbers::Visa[0, 6]
6076
- transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
6077
- transaction.credit_card_details.expiration_date.should == "05/2009"
6078
- end
6079
-
6080
- it "raises an error with a message if given invalid params" do
6081
- params = {
6082
- :transaction => {
6083
- :bad => "value",
6084
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6085
- :credit_card => {
6086
- :number => Braintree::Test::CreditCardNumbers::Visa,
6087
- :expiration_date => "05/2009"
6088
- }
6089
- }
6090
- }
6091
- tr_data_params = {
6092
- :transaction => {
6093
- :type => "sale"
6094
- }
6095
- }
6096
- tr_data = Braintree::TransparentRedirect.transaction_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
6097
- query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params, Braintree::Transaction.create_transaction_url)
6098
-
6099
- expect do
6100
- Braintree::Transaction.create_from_transparent_redirect(query_string_response)
6101
- end.to raise_error(Braintree::AuthorizationError, "Invalid params: transaction[bad]")
6102
- end
6103
-
6104
- it "can put any param in tr_data" do
6105
- params = {
6106
-
6107
- }
6108
- tr_data_params = {
6109
- :transaction => {
6110
- :amount => "100.00",
6111
- :order_id => "123",
6112
- :channel => "MyShoppingCartProvider",
6113
- :type => "sale",
6114
- :credit_card => {
6115
- :cardholder_name => "The Cardholder",
6116
- :number => "5105105105105100",
6117
- :expiration_date => "05/2011",
6118
- :cvv => "123"
6119
- },
6120
- :customer => {
6121
- :first_name => "Dan",
6122
- :last_name => "Smith",
6123
- :company => "Braintree",
6124
- :email => "dan@example.com",
6125
- :phone => "419-555-1234",
6126
- :fax => "419-555-1235",
6127
- :website => "http://braintreepayments.com"
6128
- },
6129
- :billing => {
6130
- :first_name => "Carl",
6131
- :last_name => "Jones",
6132
- :company => "Braintree",
6133
- :street_address => "123 E Main St",
6134
- :extended_address => "Suite 403",
6135
- :locality => "Chicago",
6136
- :region => "IL",
6137
- :postal_code => "60622",
6138
- :country_name => "United States of America"
6139
- },
6140
- :shipping => {
6141
- :first_name => "Andrew",
6142
- :last_name => "Mason",
6143
- :company => "Braintree",
6144
- :street_address => "456 W Main St",
6145
- :extended_address => "Apt 2F",
6146
- :locality => "Bartlett",
6147
- :region => "IL",
6148
- :postal_code => "60103",
6149
- :country_name => "United States of America"
6150
- }
6151
- }
6152
- }
6153
- tr_data = Braintree::TransparentRedirect.transaction_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
6154
- query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params, Braintree::Transaction.create_transaction_url)
6155
- result = Braintree::Transaction.create_from_transparent_redirect(query_string_response)
6156
-
6157
- transaction = result.transaction
6158
- transaction.id.should =~ /\A\w{6,}\z/
6159
- transaction.type.should == "sale"
6160
- transaction.status.should == Braintree::Transaction::Status::Authorized
6161
- transaction.amount.should == BigDecimal("100.00")
6162
- transaction.order_id.should == "123"
6163
- transaction.channel.should == "MyShoppingCartProvider"
6164
- transaction.processor_response_code.should == "1000"
6165
- transaction.authorization_expires_at.between?(Time.now, Time.now + (60 * 60 * 24 * 60)).should == true
6166
- transaction.created_at.between?(Time.now - 60, Time.now).should == true
6167
- transaction.updated_at.between?(Time.now - 60, Time.now).should == true
6168
- transaction.credit_card_details.bin.should == "510510"
6169
- transaction.credit_card_details.last_4.should == "5100"
6170
- transaction.credit_card_details.cardholder_name.should == "The Cardholder"
6171
- transaction.credit_card_details.masked_number.should == "510510******5100"
6172
- transaction.credit_card_details.card_type.should == "MasterCard"
6173
- transaction.avs_error_response_code.should == nil
6174
- transaction.avs_postal_code_response_code.should == "M"
6175
- transaction.avs_street_address_response_code.should == "M"
6176
- transaction.cvv_response_code.should == "M"
6177
- transaction.customer_details.first_name.should == "Dan"
6178
- transaction.customer_details.last_name.should == "Smith"
6179
- transaction.customer_details.company.should == "Braintree"
6180
- transaction.customer_details.email.should == "dan@example.com"
6181
- transaction.customer_details.phone.should == "419-555-1234"
6182
- transaction.customer_details.fax.should == "419-555-1235"
6183
- transaction.customer_details.website.should == "http://braintreepayments.com"
6184
- transaction.billing_details.first_name.should == "Carl"
6185
- transaction.billing_details.last_name.should == "Jones"
6186
- transaction.billing_details.company.should == "Braintree"
6187
- transaction.billing_details.street_address.should == "123 E Main St"
6188
- transaction.billing_details.extended_address.should == "Suite 403"
6189
- transaction.billing_details.locality.should == "Chicago"
6190
- transaction.billing_details.region.should == "IL"
6191
- transaction.billing_details.postal_code.should == "60622"
6192
- transaction.billing_details.country_name.should == "United States of America"
6193
- transaction.shipping_details.first_name.should == "Andrew"
6194
- transaction.shipping_details.last_name.should == "Mason"
6195
- transaction.shipping_details.company.should == "Braintree"
6196
- transaction.shipping_details.street_address.should == "456 W Main St"
6197
- transaction.shipping_details.extended_address.should == "Apt 2F"
6198
- transaction.shipping_details.locality.should == "Bartlett"
6199
- transaction.shipping_details.region.should == "IL"
6200
- transaction.shipping_details.postal_code.should == "60103"
6201
- transaction.shipping_details.country_name.should == "United States of America"
6202
- end
6203
-
6204
- it "returns an error result if validations fail" do
6205
- params = {
6206
- :transaction => {
6207
- :amount => "",
6208
- :credit_card => {
6209
- :number => Braintree::Test::CreditCardNumbers::Visa,
6210
- :expiration_date => "05/2009"
6211
- }
6212
- }
6213
- }
6214
- tr_data_params = {
6215
- :transaction => {
6216
- :type => "sale"
6217
- }
6218
- }
6219
- tr_data = Braintree::TransparentRedirect.transaction_data({:redirect_url => "http://example.com"}.merge(tr_data_params))
6220
- query_string_response = SpecHelper.simulate_form_post_for_tr(tr_data, params, Braintree::Transaction.create_transaction_url)
6221
- result = Braintree::Transaction.create_from_transparent_redirect(query_string_response)
6222
-
6223
- result.success?.should == false
6224
- result.params[:transaction].should == {:amount => "", :type => "sale", :credit_card => {:expiration_date => "05/2009"}}
6225
- result.errors.for(:transaction).on(:amount)[0].code.should == Braintree::ErrorCodes::Transaction::AmountIsRequired
6226
- end
6227
- end
6228
-
6229
6007
  describe "self.find" do
6230
6008
  it "finds the transaction with the given id" do
6231
6009
  result = Braintree::Transaction.create(
@@ -6274,7 +6052,8 @@ describe Braintree::Transaction do
6274
6052
  found_transaction.disbursed?.should == true
6275
6053
  disbursement = found_transaction.disbursement_details
6276
6054
 
6277
- disbursement.disbursement_date.should == "2013-04-10"
6055
+ expect(disbursement.disbursement_date).to be_a Date
6056
+ expect(disbursement.disbursement_date).to eq Date.parse("2013-04-10")
6278
6057
  disbursement.settlement_amount.should == "100.00"
6279
6058
  disbursement.settlement_currency_iso_code.should == "USD"
6280
6059
  disbursement.settlement_currency_exchange_rate.should == "1"
@@ -6519,151 +6298,6 @@ describe Braintree::Transaction do
6519
6298
  end
6520
6299
  end
6521
6300
 
6522
- describe "refund" do
6523
- context "partial refunds" do
6524
- it "allows partial refunds" do
6525
- transaction = create_transaction_to_refund
6526
- result = transaction.refund(transaction.amount / 2)
6527
- result.success?.should == true
6528
- result.new_transaction.type.should == "credit"
6529
- end
6530
- end
6531
-
6532
- it "returns a successful result if successful" do
6533
- transaction = create_transaction_to_refund
6534
- transaction.status.should == Braintree::Transaction::Status::Settled
6535
- result = transaction.refund
6536
- result.success?.should == true
6537
- result.new_transaction.type.should == "credit"
6538
- end
6539
-
6540
- it "assigns the refund_id on the original transaction" do
6541
- transaction = create_transaction_to_refund
6542
- refund_transaction = transaction.refund.new_transaction
6543
- transaction = Braintree::Transaction.find(transaction.id)
6544
-
6545
- transaction.refund_id.should == refund_transaction.id
6546
- end
6547
-
6548
- it "assigns the refunded_transaction_id to the original transaction" do
6549
- transaction = create_transaction_to_refund
6550
- refund_transaction = transaction.refund.new_transaction
6551
-
6552
- refund_transaction.refunded_transaction_id.should == transaction.id
6553
- end
6554
-
6555
- it "returns an error if already refunded" do
6556
- transaction = create_transaction_to_refund
6557
- result = transaction.refund
6558
- result.success?.should == true
6559
- result = transaction.refund
6560
- result.success?.should == false
6561
- result.errors.for(:transaction).on(:base)[0].code.should == Braintree::ErrorCodes::Transaction::HasAlreadyBeenRefunded
6562
- end
6563
-
6564
- it "returns an error result if unsettled" do
6565
- transaction = Braintree::Transaction.create!(
6566
- :type => "sale",
6567
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6568
- :credit_card => {
6569
- :number => Braintree::Test::CreditCardNumbers::Visa,
6570
- :expiration_date => "05/2009"
6571
- }
6572
- )
6573
- result = transaction.refund
6574
- result.success?.should == false
6575
- result.errors.for(:transaction).on(:base)[0].code.should == Braintree::ErrorCodes::Transaction::CannotRefundUnlessSettled
6576
- end
6577
- end
6578
-
6579
- describe "submit_for_settlement" do
6580
- it "returns a successful result if successful" do
6581
- transaction = Braintree::Transaction.sale!(
6582
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6583
- :credit_card => {
6584
- :number => Braintree::Test::CreditCardNumbers::Visa,
6585
- :expiration_date => "06/2009"
6586
- }
6587
- )
6588
- result = transaction.submit_for_settlement
6589
- result.success?.should == true
6590
- end
6591
-
6592
- it "can submit a specific amount for settlement" do
6593
- transaction = Braintree::Transaction.sale!(
6594
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6595
- :credit_card => {
6596
- :number => Braintree::Test::CreditCardNumbers::Visa,
6597
- :expiration_date => "06/2009"
6598
- }
6599
- )
6600
- transaction.amount.should == BigDecimal("1000.00")
6601
- result = transaction.submit_for_settlement("999.99")
6602
- result.success?.should == true
6603
- transaction.amount.should == BigDecimal("999.99")
6604
- end
6605
-
6606
- it "updates the transaction attributes" do
6607
- transaction = Braintree::Transaction.sale!(
6608
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6609
- :credit_card => {
6610
- :number => Braintree::Test::CreditCardNumbers::Visa,
6611
- :expiration_date => "06/2009"
6612
- }
6613
- )
6614
- transaction.amount.should == BigDecimal("1000.00")
6615
- result = transaction.submit_for_settlement("999.99")
6616
- result.success?.should == true
6617
- transaction.amount.should == BigDecimal("999.99")
6618
- transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
6619
- transaction.updated_at.between?(Time.now - 60, Time.now).should == true
6620
- end
6621
-
6622
- it "returns an error result if unsuccessful" do
6623
- transaction = Braintree::Transaction.sale!(
6624
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6625
- :credit_card => {
6626
- :number => Braintree::Test::CreditCardNumbers::Visa,
6627
- :expiration_date => "06/2009"
6628
- }
6629
- )
6630
- transaction.amount.should == BigDecimal("1000.00")
6631
- result = transaction.submit_for_settlement("1000.01")
6632
- result.success?.should == false
6633
- result.errors.for(:transaction).on(:amount)[0].code.should == Braintree::ErrorCodes::Transaction::SettlementAmountIsTooLarge
6634
- result.params[:transaction][:amount].should == "1000.01"
6635
- end
6636
- end
6637
-
6638
- describe "submit_for_settlement!" do
6639
- it "returns the transaction if successful" do
6640
- original_transaction = Braintree::Transaction.sale!(
6641
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6642
- :credit_card => {
6643
- :number => Braintree::Test::CreditCardNumbers::Visa,
6644
- :expiration_date => "06/2009"
6645
- }
6646
- )
6647
- transaction = original_transaction.submit_for_settlement!
6648
- transaction.status.should == Braintree::Transaction::Status::SubmittedForSettlement
6649
- transaction.id.should == original_transaction.id
6650
- end
6651
-
6652
- it "raises a ValidationsFailed if unsuccessful" do
6653
- transaction = Braintree::Transaction.sale!(
6654
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6655
- :credit_card => {
6656
- :number => Braintree::Test::CreditCardNumbers::Visa,
6657
- :expiration_date => "06/2009"
6658
- }
6659
- )
6660
- transaction.amount.should == BigDecimal("1000.00")
6661
- expect do
6662
- transaction.submit_for_settlement!("1000.01")
6663
- end.to raise_error(Braintree::ValidationsFailed)
6664
- end
6665
- end
6666
-
6667
6301
  describe "status_history" do
6668
6302
  it "returns an array of StatusDetail" do
6669
6303
  transaction = Braintree::Transaction.sale!(
@@ -6673,10 +6307,10 @@ describe Braintree::Transaction do
6673
6307
  :expiration_date => "05/2009"
6674
6308
  }
6675
6309
  )
6676
- transaction.submit_for_settlement!
6677
- transaction.status_history.size.should == 2
6678
- transaction.status_history[0].status.should == Braintree::Transaction::Status::Authorized
6679
- transaction.status_history[1].status.should == Braintree::Transaction::Status::SubmittedForSettlement
6310
+ result = Braintree::Transaction.submit_for_settlement!(transaction.id)
6311
+ result.status_history.size.should == 2
6312
+ result.status_history[0].status.should == Braintree::Transaction::Status::Authorized
6313
+ result.status_history[1].status.should == Braintree::Transaction::Status::SubmittedForSettlement
6680
6314
  end
6681
6315
  end
6682
6316
 
@@ -6731,7 +6365,7 @@ describe Braintree::Transaction do
6731
6365
  :expiration_date => "05/2010"
6732
6366
  }
6733
6367
  )
6734
- transaction = customer.credit_cards[0].sale(:amount => "100.00").transaction
6368
+ transaction = Braintree::CreditCard.sale(customer.credit_cards[0].token, {:amount => "100.00"}).transaction
6735
6369
  transaction.vault_credit_card.should == customer.credit_cards[0]
6736
6370
  end
6737
6371
 
@@ -6756,7 +6390,7 @@ describe Braintree::Transaction do
6756
6390
  :expiration_date => "05/2010"
6757
6391
  }
6758
6392
  )
6759
- transaction = customer.credit_cards[0].sale(:amount => "100.00").transaction
6393
+ transaction = Braintree::CreditCard.sale(customer.credit_cards[0].token, :amount => "100.00").transaction
6760
6394
  transaction.vault_customer.should == customer
6761
6395
  end
6762
6396
 
@@ -6773,68 +6407,6 @@ describe Braintree::Transaction do
6773
6407
  end
6774
6408
  end
6775
6409
 
6776
- describe "void" do
6777
- it "returns a successful result if successful" do
6778
- result = Braintree::Transaction.create(
6779
- :type => "sale",
6780
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6781
- :credit_card => {
6782
- :number => Braintree::Test::CreditCardNumbers::Visa,
6783
- :expiration_date => "05/2009"
6784
- }
6785
- )
6786
- result.success?.should == true
6787
- transaction = result.transaction
6788
- transaction.status.should == Braintree::Transaction::Status::Authorized
6789
- void_result = transaction.void
6790
- void_result.success?.should == true
6791
- void_result.transaction.should == transaction
6792
- transaction.status.should == void_result.transaction.status
6793
- end
6794
-
6795
- it "returns an error result if unsuccessful" do
6796
- transaction = Braintree::Transaction.sale(
6797
- :amount => Braintree::Test::TransactionAmounts::Decline,
6798
- :credit_card => {
6799
- :number => Braintree::Test::CreditCardNumbers::Visa,
6800
- :expiration_date => "05/2009"
6801
- }
6802
- ).transaction
6803
- transaction.status.should == Braintree::Transaction::Status::ProcessorDeclined
6804
- result = transaction.void
6805
- result.success?.should == false
6806
- result.errors.for(:transaction).on(:base)[0].code.should == Braintree::ErrorCodes::Transaction::CannotBeVoided
6807
- end
6808
- end
6809
-
6810
- describe "void!" do
6811
- it "returns the transaction if successful" do
6812
- transaction = Braintree::Transaction.sale!(
6813
- :amount => Braintree::Test::TransactionAmounts::Authorize,
6814
- :credit_card => {
6815
- :number => Braintree::Test::CreditCardNumbers::Visa,
6816
- :expiration_date => "05/2009"
6817
- }
6818
- )
6819
- transaction.void!.should == transaction
6820
- transaction.status.should == Braintree::Transaction::Status::Voided
6821
- end
6822
-
6823
- it "raises a ValidationsFailed if unsuccessful" do
6824
- transaction = Braintree::Transaction.sale(
6825
- :amount => Braintree::Test::TransactionAmounts::Decline,
6826
- :credit_card => {
6827
- :number => Braintree::Test::CreditCardNumbers::Visa,
6828
- :expiration_date => "05/2009"
6829
- }
6830
- ).transaction
6831
- transaction.status.should == Braintree::Transaction::Status::ProcessorDeclined
6832
- expect do
6833
- transaction.void!
6834
- end.to raise_error(Braintree::ValidationsFailed)
6835
- end
6836
- end
6837
-
6838
6410
  def create_transaction_to_refund
6839
6411
  transaction = Braintree::Transaction.sale!(
6840
6412
  :amount => Braintree::Test::TransactionAmounts::Authorize,