braintree 2.101.0 → 2.102.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -300,6 +300,50 @@ describe Braintree::PaymentMethod do
300
300
  result.credit_card_verification.amount.should == BigDecimal("100.00")
301
301
  end
302
302
 
303
+ it "validates presence of three_d_secure_version in 3ds pass thru params" do
304
+ customer = Braintree::Customer.create!
305
+ result = Braintree::PaymentMethod.create(
306
+ :customer_id => customer.id,
307
+ :payment_method_nonce => Braintree::Test::Nonce::Transactable,
308
+ :three_d_secure_pass_thru => {
309
+ :eci_flag => '02',
310
+ :cavv => 'some_cavv',
311
+ :xid => 'some_xid',
312
+ :three_d_secure_version => 'xx',
313
+ :authentication_response => 'Y',
314
+ :directory_response => 'Y',
315
+ :cavv_algorithm => '2',
316
+ :ds_transaction_id => 'some_ds_transaction_id',
317
+ },
318
+ :options => {:verify_card => true}
319
+ )
320
+ expect(result).not_to be_success
321
+ error = result.errors.for(:verification).first
322
+ expect(error.code).to eq(Braintree::ErrorCodes::Verification::ThreeDSecurePassThru::ThreeDSecureVersionIsInvalid)
323
+ expect(error.message).to eq("The version of 3D Secure authentication must be composed only of digits and separated by periods (e.g. `1.0.2`).")
324
+ end
325
+
326
+ it "accepts three_d_secure pass thru params in the request" do
327
+ customer = Braintree::Customer.create!
328
+ result = Braintree::PaymentMethod.create(
329
+ :customer_id => customer.id,
330
+ :payment_method_nonce => Braintree::Test::Nonce::Transactable,
331
+ :three_d_secure_pass_thru => {
332
+ :eci_flag => '02',
333
+ :cavv => 'some_cavv',
334
+ :xid => 'some_xid',
335
+ :three_d_secure_version => '1.0.2',
336
+ :authentication_response => 'Y',
337
+ :directory_response => 'Y',
338
+ :cavv_algorithm => '2',
339
+ :ds_transaction_id => 'some_ds_transaction_id',
340
+ },
341
+ :options => {:verify_card => true}
342
+ )
343
+
344
+ expect(result).to be_success
345
+ end
346
+
303
347
  it "returns 3DS info on cc verification" do
304
348
  customer = Braintree::Customer.create.customer
305
349
  result = Braintree::PaymentMethod.create(
@@ -1169,6 +1213,71 @@ describe Braintree::PaymentMethod do
1169
1213
 
1170
1214
  describe "self.update" do
1171
1215
  context "credit cards" do
1216
+ it "throws validation error when passing invalid pass thru params" do
1217
+ customer = Braintree::Customer.create!
1218
+ credit_card = Braintree::CreditCard.create!(
1219
+ :customer_id => customer.id,
1220
+ :payment_method_nonce => Braintree::Test::Nonce::ThreeDSecureVisaFullAuthentication,
1221
+ :options => {:verify_card => true},
1222
+ )
1223
+
1224
+ update_result = Braintree::PaymentMethod.update(credit_card.token,
1225
+ :cardholder_name => "New Holder",
1226
+ :cvv => "456",
1227
+ :number => Braintree::Test::CreditCardNumbers::MasterCard,
1228
+ :expiration_date => "06/2013",
1229
+ :three_d_secure_pass_thru => {
1230
+ :eci_flag => '02',
1231
+ :cavv => 'some_cavv',
1232
+ :xid => 'some_xid',
1233
+ :three_d_secure_version => 'xx',
1234
+ :authentication_response => 'Y',
1235
+ :directory_response => 'Y',
1236
+ :cavv_algorithm => '2',
1237
+ :ds_transaction_id => 'some_ds_transaction_id',
1238
+ },
1239
+ :options => {:verify_card => true},
1240
+ )
1241
+ expect(update_result).to_not be_success
1242
+ error = update_result.errors.for(:verification).first
1243
+ expect(error.code).to eq(Braintree::ErrorCodes::Verification::ThreeDSecurePassThru::ThreeDSecureVersionIsInvalid)
1244
+ expect(error.message).to eq("The version of 3D Secure authentication must be composed only of digits and separated by periods (e.g. `1.0.2`).")
1245
+ end
1246
+
1247
+ it "updates the credit card with three_d_secure pass thru params" do
1248
+ customer = Braintree::Customer.create!
1249
+ credit_card = Braintree::CreditCard.create!(
1250
+ :customer_id => customer.id,
1251
+ :payment_method_nonce => Braintree::Test::Nonce::ThreeDSecureVisaFullAuthentication,
1252
+ :options => {:verify_card => true},
1253
+ )
1254
+
1255
+ update_result = Braintree::PaymentMethod.update(credit_card.token,
1256
+ :cardholder_name => "New Holder",
1257
+ :cvv => "456",
1258
+ :number => Braintree::Test::CreditCardNumbers::MasterCard,
1259
+ :expiration_date => "06/2013",
1260
+ :three_d_secure_pass_thru => {
1261
+ :eci_flag => '02',
1262
+ :cavv => 'some_cavv',
1263
+ :xid => 'some_xid',
1264
+ :three_d_secure_version => '1.0.2',
1265
+ :authentication_response => 'Y',
1266
+ :directory_response => 'Y',
1267
+ :cavv_algorithm => '2',
1268
+ :ds_transaction_id => 'some_ds_transaction_id',
1269
+ },
1270
+ :options => {:verify_card => true},
1271
+ )
1272
+ update_result.success?.should == true
1273
+ update_result.payment_method.should == credit_card
1274
+ updated_credit_card = update_result.payment_method
1275
+ updated_credit_card.cardholder_name.should == "New Holder"
1276
+ updated_credit_card.bin.should == Braintree::Test::CreditCardNumbers::MasterCard[0, 6]
1277
+ updated_credit_card.last_4.should == Braintree::Test::CreditCardNumbers::MasterCard[-4..-1]
1278
+ updated_credit_card.expiration_date.should == "06/2013"
1279
+ end
1280
+
1172
1281
  it "updates the credit card" do
1173
1282
  customer = Braintree::Customer.create!
1174
1283
  credit_card = Braintree::CreditCard.create!(
@@ -419,6 +419,7 @@ describe Braintree::Transaction do
419
419
  result.transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
420
420
  result.transaction.credit_card_details.expiration_date.should == "05/2009"
421
421
  result.transaction.credit_card_details.customer_location.should == "US"
422
+ result.transaction.retrieval_reference_number.should_not be_nil
422
423
  end
423
424
 
424
425
  it "returns a successful network response code if successful" do
@@ -41,7 +41,17 @@ describe Braintree::CreditCard do
41
41
  :region,
42
42
  :street_address
43
43
  ]},
44
- :customer_id
44
+ {:three_d_secure_pass_thru => [
45
+ :eci_flag,
46
+ :cavv,
47
+ :xid,
48
+ :three_d_secure_version,
49
+ :authentication_response,
50
+ :directory_response,
51
+ :cavv_algorithm,
52
+ :ds_transaction_id,
53
+ ]},
54
+ :customer_id,
45
55
  ]
46
56
  end
47
57
  end
@@ -78,7 +88,17 @@ describe Braintree::CreditCard do
78
88
  :region,
79
89
  :street_address,
80
90
  {:options => [:update_existing]}
81
- ]}
91
+ ]},
92
+ {:three_d_secure_pass_thru => [
93
+ :eci_flag,
94
+ :cavv,
95
+ :xid,
96
+ :three_d_secure_version,
97
+ :authentication_response,
98
+ :directory_response,
99
+ :cavv_algorithm,
100
+ :ds_transaction_id,
101
+ ]},
82
102
  ]
83
103
  end
84
104
  end
@@ -116,7 +116,17 @@ describe Braintree::Customer do
116
116
  :postal_code,
117
117
  :region,
118
118
  :street_address
119
- ]}
119
+ ]},
120
+ {:three_d_secure_pass_thru => [
121
+ :eci_flag,
122
+ :cavv,
123
+ :xid,
124
+ :three_d_secure_version,
125
+ :authentication_response,
126
+ :directory_response,
127
+ :cavv_algorithm,
128
+ :ds_transaction_id,
129
+ ]},
120
130
  ]},
121
131
  {:paypal_account => [
122
132
  :email,
@@ -205,7 +215,17 @@ describe Braintree::Customer do
205
215
  :region,
206
216
  :street_address,
207
217
  {:options => [:update_existing]}
208
- ]}
218
+ ]},
219
+ {:three_d_secure_pass_thru => [
220
+ :eci_flag,
221
+ :cavv,
222
+ :xid,
223
+ :three_d_secure_version,
224
+ :authentication_response,
225
+ :directory_response,
226
+ :cavv_algorithm,
227
+ :ds_transaction_id,
228
+ ]},
209
229
  ]},
210
230
  {:options =>
211
231
  [:paypal => [
@@ -184,6 +184,54 @@ describe Braintree::WebhookNotification do
184
184
  dispute.kind.should == Braintree::Dispute::Kind::Chargeback
185
185
  end
186
186
 
187
+ it "builds a sample notification for a dispute accepted webhook" do
188
+ sample_notification = Braintree::WebhookTesting.sample_notification(
189
+ Braintree::WebhookNotification::Kind::DisputeAccepted,
190
+ dispute_id
191
+ )
192
+
193
+ notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
194
+
195
+ notification.kind.should == Braintree::WebhookNotification::Kind::DisputeAccepted
196
+
197
+ dispute = notification.dispute
198
+ dispute.status.should == Braintree::Dispute::Status::Accepted
199
+ dispute.id.should == dispute_id
200
+ dispute.kind.should == Braintree::Dispute::Kind::Chargeback
201
+ end
202
+
203
+ it "builds a sample notification for a dispute disputed webhook" do
204
+ sample_notification = Braintree::WebhookTesting.sample_notification(
205
+ Braintree::WebhookNotification::Kind::DisputeDisputed,
206
+ dispute_id
207
+ )
208
+
209
+ notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
210
+
211
+ notification.kind.should == Braintree::WebhookNotification::Kind::DisputeDisputed
212
+
213
+ dispute = notification.dispute
214
+ dispute.status.should == Braintree::Dispute::Status::Disputed
215
+ dispute.id.should == dispute_id
216
+ dispute.kind.should == Braintree::Dispute::Kind::Chargeback
217
+ end
218
+
219
+ it "builds a sample notification for a dispute expired webhook" do
220
+ sample_notification = Braintree::WebhookTesting.sample_notification(
221
+ Braintree::WebhookNotification::Kind::DisputeExpired,
222
+ dispute_id
223
+ )
224
+
225
+ notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
226
+
227
+ notification.kind.should == Braintree::WebhookNotification::Kind::DisputeExpired
228
+
229
+ dispute = notification.dispute
230
+ dispute.status.should == Braintree::Dispute::Status::Expired
231
+ dispute.id.should == dispute_id
232
+ dispute.kind.should == Braintree::Dispute::Kind::Chargeback
233
+ end
234
+
187
235
  it "is compatible with the previous dispute won webhook interface" do
188
236
  sample_notification = Braintree::WebhookTesting.sample_notification(
189
237
  Braintree::WebhookNotification::Kind::DisputeWon,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: braintree
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.101.0
4
+ version: 2.102.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Braintree
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-20 00:00:00.000000000 Z
11
+ date: 2020-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -133,6 +133,7 @@ files:
133
133
  - lib/braintree/subscription_gateway.rb
134
134
  - lib/braintree/subscription_search.rb
135
135
  - lib/braintree/successful_result.rb
136
+ - lib/braintree/test/authentication_id.rb
136
137
  - lib/braintree/test/credit_card.rb
137
138
  - lib/braintree/test/merchant_account.rb
138
139
  - lib/braintree/test/nonce.rb
@@ -320,7 +321,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
320
321
  - !ruby/object:Gem::Version
321
322
  version: '0'
322
323
  requirements: []
323
- rubygems_version: 3.1.2
324
+ rubyforge_project:
325
+ rubygems_version: 2.7.6.2
324
326
  signing_key:
325
327
  specification_version: 4
326
328
  summary: Braintree Gateway Ruby Client Library