braintree 3.2.0 → 3.3.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.
- checksums.yaml +4 -4
- data/lib/braintree/risk_data.rb +3 -1
- data/lib/braintree/three_d_secure_info.rb +22 -12
- data/lib/braintree/version.rb +1 -1
- data/spec/integration/braintree/credit_card_spec.rb +7 -5
- data/spec/integration/braintree/merchant_spec.rb +2 -2
- data/spec/integration/braintree/transaction_spec.rb +24 -16
- data/spec/integration/spec_helper.rb +7 -1
- data/spec/unit/braintree/credit_card_verification_spec.rb +6 -2
- data/spec/unit/braintree/risk_data_spec.rb +9 -5
- data/spec/unit/braintree/three_d_secure_info_spec.rb +32 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6f4e51f43d816075ea0d94fdf7b9c7cc93b66293d6f03eb2bf2c1b387f25f46
|
4
|
+
data.tar.gz: b0318dcc9f2a0d539a2dd43090e93bd2deaaedc339a7fe56844714b3a2d0e794
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5db81d38673b53ee88428054ede01e065ae0ff4399548ddddd951676e34dc5cde4ca87654a39f9f3ef3a50403974a895e4347c876d85139bea88937dadc5e55f
|
7
|
+
data.tar.gz: 1bb19f771028a007c21da653a5efc1ca484f5c237da528eafab7bb783840973739df2c88cd7ea54ad21e1ec9bad592eebc62ff4eddf96965ba8307eccd91d6c4
|
data/lib/braintree/risk_data.rb
CHANGED
@@ -6,16 +6,18 @@ module Braintree
|
|
6
6
|
attr_reader :customer_location_zip
|
7
7
|
attr_reader :customer_tenure
|
8
8
|
attr_reader :decision
|
9
|
+
attr_reader :decision_reasons
|
9
10
|
attr_reader :device_data_captured
|
10
11
|
attr_reader :fraud_service_provider
|
11
12
|
attr_reader :id
|
13
|
+
attr_reader :transaction_risk_score
|
12
14
|
|
13
15
|
def initialize(attributes)
|
14
16
|
set_instance_variables_from_hash attributes unless attributes.nil?
|
15
17
|
end
|
16
18
|
|
17
19
|
def inspect
|
18
|
-
attr_order = [:id, :decision, :device_data_captured, :fraud_service_provider]
|
20
|
+
attr_order = [:id, :decision, :decision_reasons, :device_data_captured, :fraud_service_provider, :transaction_risk_score]
|
19
21
|
formatted_attrs = attr_order.map do |attr|
|
20
22
|
"#{attr}: #{send(attr).inspect}"
|
21
23
|
end
|
@@ -2,16 +2,21 @@ module Braintree
|
|
2
2
|
class ThreeDSecureInfo # :nodoc:
|
3
3
|
include BaseModule
|
4
4
|
|
5
|
+
attr_reader :acs_transaction_id
|
6
|
+
attr_reader :cavv
|
7
|
+
attr_reader :ds_transaction_id
|
8
|
+
attr_reader :eci_flag
|
5
9
|
attr_reader :enrolled
|
6
|
-
attr_reader :liability_shifted
|
7
10
|
attr_reader :liability_shift_possible
|
11
|
+
attr_reader :liability_shifted
|
12
|
+
attr_reader :pares_status
|
8
13
|
attr_reader :status
|
9
|
-
attr_reader :cavv
|
10
|
-
attr_reader :xid
|
11
|
-
attr_reader :eci_flag
|
12
|
-
attr_reader :three_d_secure_version
|
13
|
-
attr_reader :ds_transaction_id
|
14
14
|
attr_reader :three_d_secure_authentication_id
|
15
|
+
attr_reader :three_d_secure_transaction_id
|
16
|
+
attr_reader :three_d_secure_version
|
17
|
+
attr_reader :xid
|
18
|
+
attr_reader :lookup
|
19
|
+
attr_reader :authentication
|
15
20
|
|
16
21
|
alias_method :liability_shifted?, :liability_shifted
|
17
22
|
alias_method :liability_shift_possible?, :liability_shift_possible
|
@@ -22,16 +27,21 @@ module Braintree
|
|
22
27
|
|
23
28
|
def inspect
|
24
29
|
attr_order = [
|
30
|
+
:acs_transaction_id,
|
31
|
+
:authentication,
|
32
|
+
:cavv,
|
33
|
+
:ds_transaction_id,
|
34
|
+
:eci_flag,
|
25
35
|
:enrolled,
|
26
|
-
:liability_shifted,
|
27
36
|
:liability_shift_possible,
|
37
|
+
:liability_shifted,
|
38
|
+
:lookup,
|
39
|
+
:pares_status,
|
28
40
|
:status,
|
29
|
-
:cavv,
|
30
|
-
:xid,
|
31
|
-
:eci_flag,
|
32
|
-
:three_d_secure_version,
|
33
|
-
:ds_transaction_id,
|
34
41
|
:three_d_secure_authentication_id,
|
42
|
+
:three_d_secure_transaction_id,
|
43
|
+
:three_d_secure_version,
|
44
|
+
:xid
|
35
45
|
]
|
36
46
|
|
37
47
|
formatted_attrs = attr_order.map do |attr|
|
data/lib/braintree/version.rb
CHANGED
@@ -137,7 +137,7 @@ describe Braintree::CreditCard do
|
|
137
137
|
end
|
138
138
|
|
139
139
|
it "returns risk data on verification on credit_card create" do
|
140
|
-
|
140
|
+
with_fraud_protection_enterprise_merchant do
|
141
141
|
customer = Braintree::Customer.create!
|
142
142
|
credit_card = Braintree::CreditCard.create!(
|
143
143
|
:cardholder_name => "Original Holder",
|
@@ -148,10 +148,12 @@ describe Braintree::CreditCard do
|
|
148
148
|
:options => {:verify_card => true}
|
149
149
|
)
|
150
150
|
verification = credit_card.verification
|
151
|
-
verification.risk_data.
|
152
|
-
verification.risk_data.
|
153
|
-
verification.risk_data.
|
154
|
-
verification.risk_data.
|
151
|
+
verification.risk_data.id.should_not be_nil
|
152
|
+
verification.risk_data.decision.should_not be_nil
|
153
|
+
verification.risk_data.decision_reasons.should_not be_nil
|
154
|
+
verification.risk_data.device_data_captured.should_not be_nil
|
155
|
+
verification.risk_data.fraud_service_provider.should_not be_nil
|
156
|
+
expect(verification.risk_data).to respond_to(:transaction_risk_score)
|
155
157
|
end
|
156
158
|
end
|
157
159
|
|
@@ -305,7 +305,7 @@ describe Braintree::MerchantGateway do
|
|
305
305
|
it "succeeds" do
|
306
306
|
result = Braintree::Merchant.provision_raw_apple_pay
|
307
307
|
result.should be_success
|
308
|
-
result.supported_networks.should == ["visa", "mastercard", "amex", "discover", "maestro"]
|
308
|
+
result.supported_networks.should == ["visa", "mastercard", "amex", "discover", "maestro", "elo"]
|
309
309
|
end
|
310
310
|
|
311
311
|
it "is repeatable" do
|
@@ -313,7 +313,7 @@ describe Braintree::MerchantGateway do
|
|
313
313
|
result.should be_success
|
314
314
|
result = Braintree::Merchant.provision_raw_apple_pay
|
315
315
|
result.should be_success
|
316
|
-
result.supported_networks.should == ["visa", "mastercard", "amex", "discover", "maestro"]
|
316
|
+
result.supported_networks.should == ["visa", "mastercard", "amex", "discover", "maestro", "elo"]
|
317
317
|
end
|
318
318
|
end
|
319
319
|
|
@@ -123,8 +123,8 @@ describe Braintree::Transaction do
|
|
123
123
|
|
124
124
|
describe "self.create" do
|
125
125
|
describe "risk data" do
|
126
|
-
it "returns decision, device_data_captured and
|
127
|
-
|
126
|
+
it "returns decision, device_data_captured, id, transaction_risk_score, and decision_reasons" do
|
127
|
+
with_fraud_protection_enterprise_merchant do
|
128
128
|
result = Braintree::Transaction.create(
|
129
129
|
:type => "sale",
|
130
130
|
:amount => 1_00,
|
@@ -134,15 +134,17 @@ describe Braintree::Transaction do
|
|
134
134
|
}
|
135
135
|
)
|
136
136
|
result.transaction.risk_data.should be_a(Braintree::RiskData)
|
137
|
-
result.transaction.risk_data.
|
138
|
-
result.transaction.risk_data.
|
139
|
-
result.transaction.risk_data.
|
140
|
-
result.transaction.risk_data.
|
137
|
+
result.transaction.risk_data.id.should_not be_nil
|
138
|
+
result.transaction.risk_data.decision.should_not be_nil
|
139
|
+
result.transaction.risk_data.decision_reasons.should_not be_nil
|
140
|
+
result.transaction.risk_data.device_data_captured.should_not be_nil
|
141
|
+
result.transaction.risk_data.fraud_service_provider.should_not be_nil
|
142
|
+
expect(result.transaction.risk_data).to respond_to(:transaction_risk_score)
|
141
143
|
end
|
142
144
|
end
|
143
145
|
|
144
146
|
it "handles validation errors for invalid risk data attributes" do
|
145
|
-
|
147
|
+
with_advanced_fraud_kount_integration_merchant do
|
146
148
|
result = Braintree::Transaction.create(
|
147
149
|
:type => "sale",
|
148
150
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
@@ -930,7 +932,7 @@ describe Braintree::Transaction do
|
|
930
932
|
end
|
931
933
|
|
932
934
|
it "exposes the fraud gateway rejection reason" do
|
933
|
-
|
935
|
+
with_advanced_fraud_kount_integration_merchant do
|
934
936
|
result = Braintree::Transaction.sale(
|
935
937
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
936
938
|
:credit_card => {
|
@@ -945,7 +947,7 @@ describe Braintree::Transaction do
|
|
945
947
|
end
|
946
948
|
|
947
949
|
it "exposes the risk_threshold gateway rejection reason (via test cc num)" do
|
948
|
-
|
950
|
+
with_advanced_fraud_kount_integration_merchant do
|
949
951
|
result = Braintree::Transaction.sale(
|
950
952
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
951
953
|
:credit_card => {
|
@@ -960,7 +962,7 @@ describe Braintree::Transaction do
|
|
960
962
|
end
|
961
963
|
|
962
964
|
it "exposes the risk_threshold gateway rejection reason (via test test nonce)" do
|
963
|
-
|
965
|
+
with_advanced_fraud_kount_integration_merchant do
|
964
966
|
result = Braintree::Transaction.sale(
|
965
967
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
966
968
|
:payment_method_nonce => Braintree::Test::Nonce::GatewayRejectedRiskThresholds,
|
@@ -5044,7 +5046,7 @@ describe Braintree::Transaction do
|
|
5044
5046
|
end
|
5045
5047
|
|
5046
5048
|
it "skips advanced fraud checking if transaction[options][skip_advanced_fraud_checking] is set to true" do
|
5047
|
-
|
5049
|
+
with_advanced_fraud_kount_integration_merchant do
|
5048
5050
|
result = Braintree::Transaction.sale(
|
5049
5051
|
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
5050
5052
|
:credit_card => {
|
@@ -6238,15 +6240,21 @@ describe Braintree::Transaction do
|
|
6238
6240
|
it "returns all the three_d_secure_info" do
|
6239
6241
|
transaction = Braintree::Transaction.find("threedsecuredtransaction")
|
6240
6242
|
|
6243
|
+
expect(transaction.three_d_secure_info.authentication).to have_key(:trans_status)
|
6244
|
+
expect(transaction.three_d_secure_info.authentication).to have_key(:trans_status_reason)
|
6245
|
+
expect(transaction.three_d_secure_info.lookup).to have_key(:trans_status)
|
6246
|
+
expect(transaction.three_d_secure_info.lookup).to have_key(:trans_status_reason)
|
6247
|
+
transaction.three_d_secure_info.cavv.should == "somebase64value"
|
6248
|
+
transaction.three_d_secure_info.ds_transaction_id.should == "dstxnid"
|
6249
|
+
transaction.three_d_secure_info.eci_flag.should == "07"
|
6241
6250
|
transaction.three_d_secure_info.enrolled.should == "Y"
|
6242
|
-
transaction.three_d_secure_info.should
|
6251
|
+
transaction.three_d_secure_info.pares_status.should == "Y"
|
6243
6252
|
transaction.three_d_secure_info.should be_liability_shift_possible
|
6253
|
+
transaction.three_d_secure_info.should be_liability_shifted
|
6244
6254
|
transaction.three_d_secure_info.status.should == "authenticate_successful"
|
6245
|
-
transaction.three_d_secure_info.
|
6246
|
-
transaction.three_d_secure_info.xid.should == "xidvalue"
|
6247
|
-
transaction.three_d_secure_info.eci_flag.should == "07"
|
6255
|
+
expect(transaction.three_d_secure_info.three_d_secure_authentication_id).to be
|
6248
6256
|
transaction.three_d_secure_info.three_d_secure_version.should == "1.0.2"
|
6249
|
-
transaction.three_d_secure_info.
|
6257
|
+
transaction.three_d_secure_info.xid.should == "xidvalue"
|
6250
6258
|
end
|
6251
6259
|
|
6252
6260
|
it "is nil if the transaction wasn't 3d secured" do
|
@@ -42,12 +42,18 @@ unless defined?(INTEGRATION_SPEC_HELPER_LOADED)
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def with_advanced_fraud_kount_integration_merchant(&block)
|
46
46
|
with_other_merchant("advanced_fraud_integration_merchant_id", "advanced_fraud_integration_public_key", "advanced_fraud_integration_private_key") do
|
47
47
|
block.call
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
def with_fraud_protection_enterprise_merchant(&block)
|
52
|
+
with_other_merchant("fraud_protection_enterprise_integration_merchant_id", "fraud_protection_enterprise_integration_public_key", "fraud_protection_enterprise_integration_private_key") do
|
53
|
+
block.call
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
51
57
|
def with_altpay_merchant(&block)
|
52
58
|
with_other_merchant("altpay_merchant", "altpay_merchant_public_key", "altpay_merchant_private_key", &block)
|
53
59
|
end
|
@@ -117,14 +117,18 @@ describe Braintree::CreditCardVerification do
|
|
117
117
|
verification = Braintree::CreditCardVerification._new(:risk_data => {
|
118
118
|
:id => "123",
|
119
119
|
:decision => "WOO YOU WON $1000 dollars",
|
120
|
+
:decision_reasons => ["reason"],
|
120
121
|
:device_data_captured => true,
|
121
|
-
:fraud_service_provider => "
|
122
|
+
:fraud_service_provider => "paypal_fraud_protection",
|
123
|
+
:transaction_risk_score => "12",
|
122
124
|
})
|
123
125
|
|
124
126
|
verification.risk_data.id.should == "123"
|
125
127
|
verification.risk_data.decision.should == "WOO YOU WON $1000 dollars"
|
128
|
+
verification.risk_data.decision_reasons.should == ["reason"]
|
126
129
|
verification.risk_data.device_data_captured.should == true
|
127
|
-
verification.risk_data.fraud_service_provider.should == "
|
130
|
+
verification.risk_data.fraud_service_provider.should == "paypal_fraud_protection"
|
131
|
+
verification.risk_data.transaction_risk_score.should == "12"
|
128
132
|
end
|
129
133
|
|
130
134
|
it "handles a nil risk_data" do
|
@@ -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
|
6
|
-
risk_data = Braintree::RiskData.new(:id => "123", :decision => "YOU WON $1000 DOLLARS", :device_data_captured => true, :fraud_service_provider => "
|
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 == "
|
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 => "
|
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: "
|
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
|
@@ -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
|
-
:
|
10
|
-
:
|
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.
|
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",
|
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
|
|
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: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Braintree
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|