braintree 4.2.0 → 4.6.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/braintree.gemspec +1 -1
- data/lib/braintree/apple_pay_card.rb +9 -0
- data/lib/braintree/enriched_customer_data.rb +21 -0
- data/lib/braintree/error_codes.rb +1 -0
- data/lib/braintree/google_pay_card.rb +9 -0
- data/lib/braintree/http.rb +1 -0
- data/lib/braintree/local_payment_expired.rb +21 -0
- data/lib/braintree/local_payment_funded.rb +22 -0
- data/lib/braintree/payment_method_customer_data_updated_metadata.rb +24 -0
- data/lib/braintree/plan.rb +20 -0
- data/lib/braintree/plan_gateway.rb +100 -0
- data/lib/braintree/successful_result.rb +1 -0
- data/lib/braintree/transaction/paypal_details.rb +2 -0
- data/lib/braintree/transaction_gateway.rb +2 -2
- data/lib/braintree/transaction_review.rb +18 -0
- data/lib/braintree/venmo_profile_data.rb +23 -0
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/webhook_notification.rb +14 -0
- data/lib/braintree/webhook_testing_gateway.rb +91 -17
- data/lib/braintree.rb +5 -0
- data/spec/integration/braintree/customer_spec.rb +27 -0
- data/spec/integration/braintree/merchant_account_spec.rb +3 -3
- data/spec/integration/braintree/payment_method_nonce_spec.rb +2 -1
- data/spec/integration/braintree/payment_method_spec.rb +27 -0
- data/spec/integration/braintree/plan_spec.rb +82 -0
- data/spec/integration/braintree/transaction_spec.rb +28 -0
- data/spec/unit/braintree/enriched_customer_data_spec.rb +32 -0
- data/spec/unit/braintree/http_spec.rb +2 -0
- data/spec/unit/braintree/local_payment_expired_spec.rb +24 -0
- data/spec/unit/braintree/local_payment_funded_spec.rb +34 -0
- data/spec/unit/braintree/payment_method_customer_data_updated_metadata_spec.rb +45 -0
- data/spec/unit/braintree/transaction/paypal_details_spec.rb +4 -0
- data/spec/unit/braintree/transaction_spec.rb +3 -3
- data/spec/unit/braintree/venmo_profile_data_spec.rb +32 -0
- data/spec/unit/braintree/webhook_notification_spec.rb +78 -1
- metadata +15 -4
@@ -1021,6 +1021,15 @@ describe Braintree::Customer do
|
|
1021
1021
|
apple_pay_card.token.should_not be_nil
|
1022
1022
|
apple_pay_card.expiration_year.should_not be_nil
|
1023
1023
|
apple_pay_card.payment_instrument_name.should == "AmEx 41002"
|
1024
|
+
apple_pay_card.commercial.should_not be_nil
|
1025
|
+
apple_pay_card.country_of_issuance.should_not be_nil
|
1026
|
+
apple_pay_card.debit.should_not be_nil
|
1027
|
+
apple_pay_card.durbin_regulated.should_not be_nil
|
1028
|
+
apple_pay_card.healthcare.should_not be_nil
|
1029
|
+
apple_pay_card.issuing_bank.should_not be_nil
|
1030
|
+
apple_pay_card.payroll.should_not be_nil
|
1031
|
+
apple_pay_card.prepaid.should_not be_nil
|
1032
|
+
apple_pay_card.product_id.should_not be_nil
|
1024
1033
|
end
|
1025
1034
|
|
1026
1035
|
it "returns associated google pay proxy cards" do
|
@@ -1037,6 +1046,15 @@ describe Braintree::Customer do
|
|
1037
1046
|
google_pay_card.token.should_not be_nil
|
1038
1047
|
google_pay_card.expiration_year.should_not be_nil
|
1039
1048
|
google_pay_card.is_network_tokenized?.should == false
|
1049
|
+
google_pay_card.commercial.should_not be_nil
|
1050
|
+
google_pay_card.country_of_issuance.should_not be_nil
|
1051
|
+
google_pay_card.debit.should_not be_nil
|
1052
|
+
google_pay_card.durbin_regulated.should_not be_nil
|
1053
|
+
google_pay_card.healthcare.should_not be_nil
|
1054
|
+
google_pay_card.issuing_bank.should_not be_nil
|
1055
|
+
google_pay_card.payroll.should_not be_nil
|
1056
|
+
google_pay_card.prepaid.should_not be_nil
|
1057
|
+
google_pay_card.product_id.should_not be_nil
|
1040
1058
|
end
|
1041
1059
|
|
1042
1060
|
it "returns associated google pay network tokens" do
|
@@ -1053,6 +1071,15 @@ describe Braintree::Customer do
|
|
1053
1071
|
google_pay_card.token.should_not be_nil
|
1054
1072
|
google_pay_card.expiration_year.should_not be_nil
|
1055
1073
|
google_pay_card.is_network_tokenized?.should == true
|
1074
|
+
google_pay_card.commercial.should_not be_nil
|
1075
|
+
google_pay_card.country_of_issuance.should_not be_nil
|
1076
|
+
google_pay_card.debit.should_not be_nil
|
1077
|
+
google_pay_card.durbin_regulated.should_not be_nil
|
1078
|
+
google_pay_card.healthcare.should_not be_nil
|
1079
|
+
google_pay_card.issuing_bank.should_not be_nil
|
1080
|
+
google_pay_card.payroll.should_not be_nil
|
1081
|
+
google_pay_card.prepaid.should_not be_nil
|
1082
|
+
google_pay_card.product_id.should_not be_nil
|
1056
1083
|
end
|
1057
1084
|
|
1058
1085
|
it "returns associated venmo accounts" do
|
@@ -41,7 +41,7 @@ VALID_APPLICATION_PARAMS = {
|
|
41
41
|
:business => {
|
42
42
|
:legal_name => "Joe's Bloggs",
|
43
43
|
:dba_name => "Joe's Junkyard",
|
44
|
-
:tax_id => "
|
44
|
+
:tax_id => "423456789",
|
45
45
|
:address => {
|
46
46
|
:street_address => "456 Fake St",
|
47
47
|
:postal_code => "48104",
|
@@ -371,7 +371,7 @@ describe Braintree::MerchantAccount do
|
|
371
371
|
params[:individual][:address][:postal_code] = "60622"
|
372
372
|
params[:business][:dba_name] = "James's Bloggs"
|
373
373
|
params[:business][:legal_name] = "James's Bloggs Inc"
|
374
|
-
params[:business][:tax_id] = "
|
374
|
+
params[:business][:tax_id] = "423456789"
|
375
375
|
params[:business][:address][:street_address] = "999 Fake St"
|
376
376
|
params[:business][:address][:locality] = "Miami"
|
377
377
|
params[:business][:address][:region] = "FL"
|
@@ -397,7 +397,7 @@ describe Braintree::MerchantAccount do
|
|
397
397
|
result.merchant_account.individual_details.address_details.postal_code.should == "60622"
|
398
398
|
result.merchant_account.business_details.dba_name.should == "James's Bloggs"
|
399
399
|
result.merchant_account.business_details.legal_name.should == "James's Bloggs Inc"
|
400
|
-
result.merchant_account.business_details.tax_id.should == "
|
400
|
+
result.merchant_account.business_details.tax_id.should == "423456789"
|
401
401
|
result.merchant_account.business_details.address_details.street_address.should == "999 Fake St"
|
402
402
|
result.merchant_account.business_details.address_details.locality.should == "Miami"
|
403
403
|
result.merchant_account.business_details.address_details.region.should == "FL"
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")
|
3
|
+
require "date"
|
3
4
|
|
4
5
|
describe Braintree::PaymentMethodNonce do
|
5
6
|
let(:config) { Braintree::Configuration.instantiate }
|
@@ -84,7 +85,7 @@ describe Braintree::PaymentMethodNonce do
|
|
84
85
|
nonce.details.bin.should == "401288"
|
85
86
|
nonce.details.card_type.should == "Visa"
|
86
87
|
nonce.details.expiration_month.should == "12"
|
87
|
-
nonce.details.expiration_year.should ==
|
88
|
+
nonce.details.expiration_year.should == Date.today.next_year.year.to_s
|
88
89
|
nonce.details.is_network_tokenized?.should be_nil
|
89
90
|
nonce.details.last_two.should == "81"
|
90
91
|
nonce.details.payer_info.should be_nil
|
@@ -99,6 +99,15 @@ describe Braintree::PaymentMethod do
|
|
99
99
|
apple_pay_card.expiration_month.to_i.should > 0
|
100
100
|
apple_pay_card.expiration_year.to_i.should > 0
|
101
101
|
apple_pay_card.customer_id.should == customer.id
|
102
|
+
apple_pay_card.commercial.should_not be_nil
|
103
|
+
apple_pay_card.country_of_issuance.should_not be_nil
|
104
|
+
apple_pay_card.debit.should_not be_nil
|
105
|
+
apple_pay_card.durbin_regulated.should_not be_nil
|
106
|
+
apple_pay_card.healthcare.should_not be_nil
|
107
|
+
apple_pay_card.issuing_bank.should_not be_nil
|
108
|
+
apple_pay_card.payroll.should_not be_nil
|
109
|
+
apple_pay_card.prepaid.should_not be_nil
|
110
|
+
apple_pay_card.product_id.should_not be_nil
|
102
111
|
end
|
103
112
|
|
104
113
|
it "creates a payment method from a fake google pay proxy card nonce" do
|
@@ -127,6 +136,15 @@ describe Braintree::PaymentMethod do
|
|
127
136
|
google_pay_card.google_transaction_id.should == "google_transaction_id"
|
128
137
|
google_pay_card.source_description.should == "Discover 1111"
|
129
138
|
google_pay_card.customer_id.should == customer.id
|
139
|
+
google_pay_card.commercial.should_not be_nil
|
140
|
+
google_pay_card.country_of_issuance.should_not be_nil
|
141
|
+
google_pay_card.debit.should_not be_nil
|
142
|
+
google_pay_card.durbin_regulated.should_not be_nil
|
143
|
+
google_pay_card.healthcare.should_not be_nil
|
144
|
+
google_pay_card.issuing_bank.should_not be_nil
|
145
|
+
google_pay_card.payroll.should_not be_nil
|
146
|
+
google_pay_card.prepaid.should_not be_nil
|
147
|
+
google_pay_card.product_id.should_not be_nil
|
130
148
|
end
|
131
149
|
|
132
150
|
it "creates a payment method from a google pay network token nonce" do
|
@@ -155,6 +173,15 @@ describe Braintree::PaymentMethod do
|
|
155
173
|
google_pay_card.google_transaction_id.should == "google_transaction_id"
|
156
174
|
google_pay_card.source_description.should == "MasterCard 4444"
|
157
175
|
google_pay_card.customer_id.should == customer.id
|
176
|
+
google_pay_card.commercial.should_not be_nil
|
177
|
+
google_pay_card.country_of_issuance.should_not be_nil
|
178
|
+
google_pay_card.debit.should_not be_nil
|
179
|
+
google_pay_card.durbin_regulated.should_not be_nil
|
180
|
+
google_pay_card.healthcare.should_not be_nil
|
181
|
+
google_pay_card.issuing_bank.should_not be_nil
|
182
|
+
google_pay_card.payroll.should_not be_nil
|
183
|
+
google_pay_card.prepaid.should_not be_nil
|
184
|
+
google_pay_card.product_id.should_not be_nil
|
158
185
|
end
|
159
186
|
|
160
187
|
it "creates a payment method from venmo account nonce" do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")
|
2
3
|
|
3
4
|
describe Braintree::Plan do
|
4
5
|
|
@@ -48,6 +49,87 @@ describe Braintree::Plan do
|
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
52
|
+
describe "self.create" do
|
53
|
+
let(:attributes) do
|
54
|
+
{
|
55
|
+
:billing_day_of_month => 12,
|
56
|
+
:billing_frequency => 1,
|
57
|
+
:currency_iso_code => "USD",
|
58
|
+
:description => "description on create",
|
59
|
+
:name => "my new plan name",
|
60
|
+
:number_of_billing_cycles => 1,
|
61
|
+
:price => "9.99",
|
62
|
+
:trial_period => false
|
63
|
+
}
|
64
|
+
|
65
|
+
it "is successful with given params" do
|
66
|
+
result = Braintree::Plan.create(attributes)
|
67
|
+
expect(result.success?).to be_truthy
|
68
|
+
expect(result.plan.billing_day_of_month).to eq 12
|
69
|
+
expect(result.plan.description).to eq "description on create"
|
70
|
+
expect(result.plan.name).to eq "my new plan name"
|
71
|
+
expect(result.plan.price).to eq "9.99"
|
72
|
+
expect(result.plan.billing_frequency).to eq 1
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "self.find" do
|
78
|
+
it "finds a plan" do
|
79
|
+
plan = Braintree::Plan.create(
|
80
|
+
:billing_day_of_month => 12,
|
81
|
+
:billing_frequency => 1,
|
82
|
+
:currency_iso_code => "USD",
|
83
|
+
:description => "description on create",
|
84
|
+
:name => "my new plan name",
|
85
|
+
:number_of_billing_cycles => 1,
|
86
|
+
:price => "9.99",
|
87
|
+
:trial_period => false,
|
88
|
+
).plan
|
89
|
+
|
90
|
+
found_plan = Braintree::Plan.find(plan.id)
|
91
|
+
expect(found_plan.name).to eq plan.name
|
92
|
+
end
|
93
|
+
|
94
|
+
it "raises Braintree::NotFoundError if it cannot find" do
|
95
|
+
expect {
|
96
|
+
Braintree::Plan.find("noSuchPlan")
|
97
|
+
}.to raise_error(Braintree::NotFoundError, 'plan with id "noSuchPlan" not found')
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "self.update!" do
|
102
|
+
before(:each) do
|
103
|
+
@plan = Braintree::Plan.create(
|
104
|
+
:billing_day_of_month => 12,
|
105
|
+
:billing_frequency => 1,
|
106
|
+
:currency_iso_code => "USD",
|
107
|
+
:description => "description on create",
|
108
|
+
:name => "my new plan name",
|
109
|
+
:number_of_billing_cycles => 1,
|
110
|
+
:price => "9.99",
|
111
|
+
:trial_period => false,
|
112
|
+
).plan
|
113
|
+
end
|
114
|
+
|
115
|
+
it "returns the updated plan if valid" do
|
116
|
+
new_id = rand(36**9).to_s(36)
|
117
|
+
plan = Braintree::Plan.update!(@plan.id,
|
118
|
+
:name => "updated name",
|
119
|
+
:price => 99.88,
|
120
|
+
)
|
121
|
+
|
122
|
+
expect(plan.name).to eq "updated name"
|
123
|
+
expect(plan.price).to eq BigDecimal("99.88")
|
124
|
+
end
|
125
|
+
|
126
|
+
it "raises a ValidationsFailed if invalid" do
|
127
|
+
expect do
|
128
|
+
Braintree::Plan.update!(@plan.id, :number_of_billing_cycles => "number of billing cycles")
|
129
|
+
end.to raise_error(Braintree::ValidationsFailed)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
51
133
|
def create_plan_for_tests(attributes)
|
52
134
|
config = Braintree::Configuration.gateway.config
|
53
135
|
config.http.post("#{config.base_merchant_path}/plans/create_plan_for_tests", :plan => attributes)
|
@@ -999,6 +999,34 @@ describe Braintree::Transaction do
|
|
999
999
|
result.transaction.credit_card_details.expiration_date.should == "05/2011"
|
1000
1000
|
end
|
1001
1001
|
|
1002
|
+
it "accepts exchange_rate_quote_id" do
|
1003
|
+
result = Braintree::Transaction.create(
|
1004
|
+
:type => "sale",
|
1005
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1006
|
+
:credit_card => {
|
1007
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1008
|
+
:expiration_date => "05/2009"
|
1009
|
+
},
|
1010
|
+
:exchange_rate_quote_id => "dummyExchangeRateQuoteId-Brainree-Ruby",
|
1011
|
+
)
|
1012
|
+
result.success?.should == true
|
1013
|
+
result.transaction.credit_card_details.expiration_date.should == "05/2009"
|
1014
|
+
end
|
1015
|
+
|
1016
|
+
it "returns an error if provided invalid exchange_rate_quote_id" do
|
1017
|
+
result = Braintree::Transaction.create(
|
1018
|
+
:type => "sale",
|
1019
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1020
|
+
:credit_card => {
|
1021
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1022
|
+
:expiration_date => "05/2009"
|
1023
|
+
},
|
1024
|
+
:exchange_rate_quote_id => "a" * 4010,
|
1025
|
+
)
|
1026
|
+
result.success?.should == false
|
1027
|
+
result.errors.for(:transaction).on(:exchange_rate_quote_id)[0].code.should == Braintree::ErrorCodes::Transaction::ExchangeRateQuoteIdTooLong
|
1028
|
+
end
|
1029
|
+
|
1002
1030
|
it "returns some error if customer_id is invalid" do
|
1003
1031
|
result = Braintree::Transaction.create(
|
1004
1032
|
:type => "sale",
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Braintree::EnrichedCustomerData do
|
4
|
+
describe "self.new" do
|
5
|
+
it "is protected" do
|
6
|
+
expect do
|
7
|
+
Braintree::EnrichedCustomerData.new
|
8
|
+
end.to raise_error(NoMethodError, /protected method .new/)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "self._new" do
|
13
|
+
it "initializes the object with the appropriate attributes set" do
|
14
|
+
|
15
|
+
params = {
|
16
|
+
fields_updated: ["username"],
|
17
|
+
profile_data: {
|
18
|
+
username: "a-username",
|
19
|
+
first_name: "a-first-name",
|
20
|
+
last_name: "a-last-name",
|
21
|
+
phone_number: "a-phone-number",
|
22
|
+
email: "a-email",
|
23
|
+
},
|
24
|
+
}
|
25
|
+
|
26
|
+
payment_method_customer_data_updated = Braintree::EnrichedCustomerData._new(params)
|
27
|
+
|
28
|
+
payment_method_customer_data_updated.profile_data.should be_a(Braintree::VenmoProfileData)
|
29
|
+
payment_method_customer_data_updated.fields_updated.should eq(["username"])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -25,6 +25,7 @@ END
|
|
25
25
|
<last-name>Doe</last-name>
|
26
26
|
<number>1234560000001234</number>
|
27
27
|
<cvv>123</cvv>
|
28
|
+
<encrypted-card-data>8F34DFB312DC79C24FD5320622F3E11682D79E6B0C0FD881</encrypted-card-data>
|
28
29
|
</customer>
|
29
30
|
END
|
30
31
|
|
@@ -34,6 +35,7 @@ END
|
|
34
35
|
[Braintree] <last-name>Doe</last-name>
|
35
36
|
[Braintree] <number>123456******1234</number>
|
36
37
|
[Braintree] <cvv>***</cvv>
|
38
|
+
[Braintree] <encrypted-card-data>***</encrypted-card-data>
|
37
39
|
[Braintree] </customer>
|
38
40
|
END
|
39
41
|
Braintree::Http.new(:config)._format_and_sanitize_body_for_log(input_xml).should == expected_xml
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Braintree::LocalPaymentExpired do
|
4
|
+
describe "self.new" do
|
5
|
+
it "is protected" do
|
6
|
+
expect do
|
7
|
+
Braintree::LocalPaymentExpired.new
|
8
|
+
end.to raise_error(NoMethodError, /protected method .new/)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "self._new" do
|
13
|
+
it "initializes the object with the appropriate attributes set" do
|
14
|
+
params = {
|
15
|
+
payment_id: "a-payment-id",
|
16
|
+
payment_context_id: "a-payment-context-id",
|
17
|
+
}
|
18
|
+
local_payment_expired = Braintree::LocalPaymentExpired._new(params)
|
19
|
+
|
20
|
+
local_payment_expired.payment_id.should eq("a-payment-id")
|
21
|
+
local_payment_expired.payment_context_id.should eq("a-payment-context-id")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Braintree::LocalPaymentFunded do
|
4
|
+
describe "self.new" do
|
5
|
+
it "is protected" do
|
6
|
+
expect do
|
7
|
+
Braintree::LocalPaymentFunded.new
|
8
|
+
end.to raise_error(NoMethodError, /protected method .new/)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "self._new" do
|
13
|
+
it "initializes the object with the appropriate attributes set" do
|
14
|
+
params = {
|
15
|
+
payment_id: "a-payment-id",
|
16
|
+
payment_context_id: "a-payment-context-id",
|
17
|
+
transaction: {
|
18
|
+
id: "a-transaction-id",
|
19
|
+
amount: "31.00",
|
20
|
+
order_id: "an-order-id",
|
21
|
+
status: Braintree::Transaction::Status::Settled,
|
22
|
+
},
|
23
|
+
}
|
24
|
+
local_payment_funded = Braintree::LocalPaymentFunded._new(params)
|
25
|
+
|
26
|
+
local_payment_funded.payment_id.should eq("a-payment-id")
|
27
|
+
local_payment_funded.payment_context_id.should eq("a-payment-context-id")
|
28
|
+
local_payment_funded.transaction.id.should eq("a-transaction-id")
|
29
|
+
local_payment_funded.transaction.amount.should eq(31.0)
|
30
|
+
local_payment_funded.transaction.order_id.should eq("an-order-id")
|
31
|
+
local_payment_funded.transaction.status.should eq(Braintree::Transaction::Status::Settled)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Braintree::PaymentMethodCustomerDataUpdatedMetadata do
|
4
|
+
describe "self.new" do
|
5
|
+
it "is protected" do
|
6
|
+
expect do
|
7
|
+
Braintree::PaymentMethodCustomerDataUpdatedMetadata.new
|
8
|
+
end.to raise_error(NoMethodError, /protected method .new/)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "self._new" do
|
13
|
+
it "initializes the object with the appropriate attributes set" do
|
14
|
+
|
15
|
+
params = {
|
16
|
+
token: "a-token",
|
17
|
+
payment_method: {
|
18
|
+
venmo_account: {
|
19
|
+
venmo_user_id: "venmo-user-id",
|
20
|
+
},
|
21
|
+
},
|
22
|
+
datetime_updated: "2022-01-01T21:28:37Z",
|
23
|
+
enriched_customer_data: {
|
24
|
+
fields_updated: ["username"],
|
25
|
+
profile_data: {
|
26
|
+
username: "a-username",
|
27
|
+
first_name: "a-first-name",
|
28
|
+
last_name: "a-last-name",
|
29
|
+
phone_number: "a-phone-number",
|
30
|
+
email: "a-email",
|
31
|
+
},
|
32
|
+
},
|
33
|
+
}
|
34
|
+
|
35
|
+
payment_method_customer_data_updated = Braintree::PaymentMethodCustomerDataUpdatedMetadata._new(:gateway, params)
|
36
|
+
|
37
|
+
payment_method_customer_data_updated.token.should eq("a-token")
|
38
|
+
payment_method_customer_data_updated.datetime_updated.should eq("2022-01-01T21:28:37Z")
|
39
|
+
payment_method_customer_data_updated.payment_method.should be_a(Braintree::VenmoAccount)
|
40
|
+
payment_method_customer_data_updated.enriched_customer_data.profile_data.first_name.should eq("a-first-name")
|
41
|
+
payment_method_customer_data_updated.enriched_customer_data.profile_data.last_name.should eq("a-last-name")
|
42
|
+
payment_method_customer_data_updated.enriched_customer_data.fields_updated.should eq(["username"])
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -25,6 +25,8 @@ describe Braintree::Transaction::PayPalDetails do
|
|
25
25
|
:refund_from_transaction_fee_currency_iso_code => "123",
|
26
26
|
:refund_id => "refund-id",
|
27
27
|
:seller_protection_status => "seller-protection-status",
|
28
|
+
:tax_id => "tax-id",
|
29
|
+
:tax_id_type => "tax-id-type",
|
28
30
|
:token => "token",
|
29
31
|
:transaction_fee_amount => "2.00",
|
30
32
|
:transaction_fee_currency_iso_code => "123",
|
@@ -51,6 +53,8 @@ describe Braintree::Transaction::PayPalDetails do
|
|
51
53
|
expect(details.refund_from_transaction_fee_currency_iso_code).to eq("123")
|
52
54
|
expect(details.refund_id).to eq("refund-id")
|
53
55
|
expect(details.seller_protection_status).to eq("seller-protection-status")
|
56
|
+
expect(details.tax_id).to eq("tax-id")
|
57
|
+
expect(details.tax_id_type).to eq("tax-id-type")
|
54
58
|
expect(details.token).to eq("token")
|
55
59
|
expect(details.transaction_fee_amount).to eq("2.00")
|
56
60
|
expect(details.transaction_fee_currency_iso_code).to eq("123")
|
@@ -21,19 +21,19 @@ describe Braintree::Transaction do
|
|
21
21
|
it "raises error if passed empty string" do
|
22
22
|
expect do
|
23
23
|
Braintree::Transaction.find("")
|
24
|
-
end.to raise_error(ArgumentError)
|
24
|
+
end.to raise_error(ArgumentError, "id can not be empty")
|
25
25
|
end
|
26
26
|
|
27
27
|
it "raises error if passed empty string wth space" do
|
28
28
|
expect do
|
29
29
|
Braintree::Transaction.find(" ")
|
30
|
-
end.to raise_error(ArgumentError)
|
30
|
+
end.to raise_error(ArgumentError, "id can not be empty")
|
31
31
|
end
|
32
32
|
|
33
33
|
it "raises error if passed nil" do
|
34
34
|
expect do
|
35
35
|
Braintree::Transaction.find(nil)
|
36
|
-
end.to raise_error(ArgumentError)
|
36
|
+
end.to raise_error(ArgumentError, "id can not be empty")
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Braintree::VenmoProfileData do
|
4
|
+
describe "self.new" do
|
5
|
+
it "is protected" do
|
6
|
+
expect do
|
7
|
+
Braintree::VenmoProfileData.new
|
8
|
+
end.to raise_error(NoMethodError, /protected method .new/)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "self._new" do
|
13
|
+
it "initializes the object with the appropriate attributes set" do
|
14
|
+
|
15
|
+
params = {
|
16
|
+
username: "a-username",
|
17
|
+
first_name: "a-first-name",
|
18
|
+
last_name: "a-last-name",
|
19
|
+
phone_number: "12312312343",
|
20
|
+
email: "a-email",
|
21
|
+
}
|
22
|
+
|
23
|
+
payment_method_customer_data_updated = Braintree::VenmoProfileData._new(params)
|
24
|
+
|
25
|
+
payment_method_customer_data_updated.username.should eq("a-username")
|
26
|
+
payment_method_customer_data_updated.first_name.should eq("a-first-name")
|
27
|
+
payment_method_customer_data_updated.last_name.should eq("a-last-name")
|
28
|
+
payment_method_customer_data_updated.phone_number.should eq("12312312343")
|
29
|
+
payment_method_customer_data_updated.email.should eq("a-email")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -317,6 +317,24 @@ describe Braintree::WebhookNotification do
|
|
317
317
|
end
|
318
318
|
end
|
319
319
|
|
320
|
+
context "transaction review" do
|
321
|
+
it " builds a sample notification for a transaction reviewed webhook" do
|
322
|
+
sample_notification = Braintree::WebhookTesting.sample_notification(
|
323
|
+
Braintree::WebhookNotification::Kind::TransactionReviewed,
|
324
|
+
"my_id",
|
325
|
+
)
|
326
|
+
|
327
|
+
notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
|
328
|
+
|
329
|
+
expect(notification.kind).to eq(Braintree::WebhookNotification::Kind::TransactionReviewed)
|
330
|
+
expect(notification.transaction_review.transaction_id).to eq("my_id")
|
331
|
+
expect(notification.transaction_review.decision).to eq("decision")
|
332
|
+
expect(notification.transaction_review.reviewer_email).to eq("hey@girl.com")
|
333
|
+
expect(notification.transaction_review.reviewer_note).to eq("i reviewed this")
|
334
|
+
expect(notification.transaction_review.reviewed_time).to_not be_nil
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
320
338
|
context "us bank account transactions" do
|
321
339
|
it "builds a sample notification for a settlement webhook" do
|
322
340
|
sample_notification = Braintree::WebhookTesting.sample_notification(
|
@@ -668,6 +686,40 @@ describe Braintree::WebhookNotification do
|
|
668
686
|
end
|
669
687
|
end
|
670
688
|
|
689
|
+
context "local_payment_expired" do
|
690
|
+
it "builds a sample notification for a local_payment_expired webhook" do
|
691
|
+
sample_notification = Braintree::WebhookTesting.sample_notification(
|
692
|
+
Braintree::WebhookNotification::Kind::LocalPaymentExpired,
|
693
|
+
"my_id",
|
694
|
+
)
|
695
|
+
|
696
|
+
notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
|
697
|
+
notification.kind.should == Braintree::WebhookNotification::Kind::LocalPaymentExpired
|
698
|
+
|
699
|
+
local_payment_expired = notification.local_payment_expired
|
700
|
+
local_payment_expired.payment_id.should == "PAY-XYZ123"
|
701
|
+
local_payment_expired.payment_context_id.should == "cG5b="
|
702
|
+
end
|
703
|
+
end
|
704
|
+
|
705
|
+
context "local_payment_funded" do
|
706
|
+
it "builds a sample notification for a local_payment_funded webhook" do
|
707
|
+
sample_notification = Braintree::WebhookTesting.sample_notification(
|
708
|
+
Braintree::WebhookNotification::Kind::LocalPaymentFunded,
|
709
|
+
"my_id",
|
710
|
+
)
|
711
|
+
notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
|
712
|
+
notification.kind.should == Braintree::WebhookNotification::Kind::LocalPaymentFunded
|
713
|
+
|
714
|
+
local_payment_funded = notification.local_payment_funded
|
715
|
+
local_payment_funded.payment_id.should == "PAY-XYZ123"
|
716
|
+
local_payment_funded.payment_context_id.should == "cG5b="
|
717
|
+
local_payment_funded.transaction.id.should == "my_id"
|
718
|
+
local_payment_funded.transaction.status.should == Braintree::Transaction::Status::Settled
|
719
|
+
local_payment_funded.transaction.amount.should == 49.99
|
720
|
+
local_payment_funded.transaction.order_id.should == "order4567"
|
721
|
+
end
|
722
|
+
end
|
671
723
|
|
672
724
|
context "local_payment_reversed" do
|
673
725
|
it "builds a sample notification for a local_payment webhook" do
|
@@ -675,7 +727,6 @@ describe Braintree::WebhookNotification do
|
|
675
727
|
Braintree::WebhookNotification::Kind::LocalPaymentReversed,
|
676
728
|
"my_id",
|
677
729
|
)
|
678
|
-
|
679
730
|
notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
|
680
731
|
notification.kind.should == Braintree::WebhookNotification::Kind::LocalPaymentReversed
|
681
732
|
|
@@ -684,6 +735,32 @@ describe Braintree::WebhookNotification do
|
|
684
735
|
end
|
685
736
|
end
|
686
737
|
|
738
|
+
context "payment_method_customer_data_updated" do
|
739
|
+
it "builds a sample notification for a payment_method_customer_data_updated webhook" do
|
740
|
+
sample_notification = Braintree::WebhookTesting.sample_notification(
|
741
|
+
Braintree::WebhookNotification::Kind::PaymentMethodCustomerDataUpdated,
|
742
|
+
"my_id",
|
743
|
+
)
|
744
|
+
notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
|
745
|
+
notification.kind.should == Braintree::WebhookNotification::Kind::PaymentMethodCustomerDataUpdated
|
746
|
+
|
747
|
+
payment_method_customer_data_updated = notification.payment_method_customer_data_updated_metadata
|
748
|
+
|
749
|
+
payment_method_customer_data_updated.token.should eq("TOKEN-12345")
|
750
|
+
payment_method_customer_data_updated.datetime_updated.should eq("2022-01-01T21:28:37Z")
|
751
|
+
|
752
|
+
enriched_customer_data = payment_method_customer_data_updated.enriched_customer_data
|
753
|
+
enriched_customer_data.fields_updated.should eq(["username"])
|
754
|
+
|
755
|
+
profile_data = enriched_customer_data.profile_data
|
756
|
+
profile_data.first_name.should eq("John")
|
757
|
+
profile_data.last_name.should eq("Doe")
|
758
|
+
profile_data.username.should eq("venmo_username")
|
759
|
+
profile_data.phone_number.should eq("1231231234")
|
760
|
+
profile_data.email.should eq("john.doe@paypal.com")
|
761
|
+
end
|
762
|
+
end
|
763
|
+
|
687
764
|
describe "parse" do
|
688
765
|
it "raises InvalidSignature error when the signature is nil" do
|
689
766
|
expect do
|