braintree 4.24.0 → 4.26.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/apple_pay_card.rb +1 -0
- data/lib/braintree/bin_data.rb +2 -1
- data/lib/braintree/credit_card.rb +6 -5
- data/lib/braintree/customer_session_gateway.rb +194 -0
- data/lib/braintree/error_codes.rb +41 -0
- data/lib/braintree/error_result.rb +1 -1
- data/lib/braintree/errors.rb +2 -1
- data/lib/braintree/gateway.rb +8 -0
- data/lib/braintree/google_pay_card.rb +1 -0
- data/lib/braintree/graphql/enums/recommendations.rb +7 -0
- data/lib/braintree/graphql/enums/recommended_payment_option.rb +8 -0
- data/lib/braintree/graphql/inputs/create_customer_session_input.rb +35 -0
- data/lib/braintree/graphql/inputs/customer_recommendations_input.rb +41 -0
- data/lib/braintree/graphql/inputs/customer_session_input.rb +39 -0
- data/lib/braintree/graphql/inputs/phone_input.rb +32 -0
- data/lib/braintree/graphql/inputs/update_customer_session_input.rb +37 -0
- data/lib/braintree/graphql/types/customer_recommendations_payload.rb +32 -0
- data/lib/braintree/graphql/types/payment_options.rb +33 -0
- data/lib/braintree/graphql/unions/customer_recommendations.rb +34 -0
- data/lib/braintree/graphql_client.rb +16 -0
- data/lib/braintree/meta_checkout_card.rb +6 -5
- data/lib/braintree/meta_checkout_token.rb +6 -5
- data/lib/braintree/paypal_payment_resource.rb +22 -0
- data/lib/braintree/paypal_payment_resource_gateway.rb +36 -0
- data/lib/braintree/successful_result.rb +2 -0
- data/lib/braintree/test/credit_card.rb +1 -0
- data/lib/braintree/transaction/apple_pay_details.rb +1 -0
- data/lib/braintree/transaction/credit_card_details.rb +12 -10
- data/lib/braintree/transaction/google_pay_details.rb +11 -10
- data/lib/braintree/transaction/meta_checkout_card_details.rb +5 -2
- data/lib/braintree/transaction/meta_checkout_token_details.rb +6 -2
- data/lib/braintree/transaction/visa_checkout_card_details.rb +5 -2
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/visa_checkout_card.rb +5 -5
- data/lib/braintree.rb +13 -0
- data/spec/integration/braintree/credit_card_spec.rb +12 -0
- data/spec/integration/braintree/credit_card_verification_spec.rb +24 -0
- data/spec/integration/braintree/customer_session_spec.rb +143 -0
- data/spec/integration/braintree/customer_spec.rb +22 -6
- data/spec/integration/braintree/payment_method_nonce_spec.rb +11 -0
- data/spec/integration/braintree/paypal_payment_resource_spec.rb +141 -0
- data/spec/integration/braintree/transaction_spec.rb +15 -0
- data/spec/unit/braintree/apple_pay_card_spec.rb +1 -0
- data/spec/unit/braintree/credit_card_spec.rb +5 -0
- data/spec/unit/braintree/customer_session_gateway_spec.rb +120 -0
- data/spec/unit/braintree/google_pay_card_spec.rb +8 -0
- data/spec/unit/braintree/graphql/create_customer_session_input_spec.rb +81 -0
- data/spec/unit/braintree/graphql/customer_recommendations_input_spec.rb +110 -0
- data/spec/unit/braintree/graphql/customer_session_input_spec.rb +81 -0
- data/spec/unit/braintree/graphql/phone_input_spec.rb +51 -0
- data/spec/unit/braintree/graphql/update_customer_session_input_spec.rb +93 -0
- data/spec/unit/braintree/graphql_client_spec.rb +37 -0
- data/spec/unit/braintree/meta_checkout_card_spec.rb +53 -51
- data/spec/unit/braintree/meta_checkout_token_spec.rb +3 -1
- data/spec/unit/braintree/payment_method_nonce_spec.rb +4 -1
- data/spec/unit/braintree/paypal_payment_resource_spec.rb +125 -0
- data/spec/unit/braintree/transaction/apple_pay_details_spec.rb +8 -0
- data/spec/unit/braintree/transaction/credit_card_details_spec.rb +2 -1
- data/spec/unit/braintree/transaction/google_pay_details_spec.rb +8 -0
- data/spec/unit/braintree/transaction/meta_checkout_card_details_spec.rb +8 -0
- data/spec/unit/braintree/transaction/meta_checkout_token_details_spec.rb +8 -0
- data/spec/unit/braintree/transaction/visa_checkout_card_details_spec.rb +8 -0
- data/spec/unit/braintree/transaction_spec.rb +2 -0
- data/spec/unit/braintree/visa_checkout_card_spec.rb +8 -0
- data/spec/unit/credit_card_details_spec.rb +8 -0
- metadata +33 -2
|
@@ -230,6 +230,16 @@ describe Braintree::PaymentMethodNonce do
|
|
|
230
230
|
expect(nonce.bin_data.prepaid).to eq(Braintree::CreditCard::Prepaid::Yes)
|
|
231
231
|
end
|
|
232
232
|
|
|
233
|
+
it "returns bin_data with prepaid_reloadable set to Yes" do
|
|
234
|
+
result = Braintree::PaymentMethodNonce.find("fake-valid-prepaid-reloadable-nonce")
|
|
235
|
+
|
|
236
|
+
nonce = result.payment_method_nonce
|
|
237
|
+
|
|
238
|
+
expect(result).to be_success
|
|
239
|
+
expect(nonce.bin_data).not_to be_nil
|
|
240
|
+
expect(nonce.bin_data.prepaid_reloadable).to eq(Braintree::CreditCard::PrepaidReloadable::Yes)
|
|
241
|
+
end
|
|
242
|
+
|
|
233
243
|
it "returns bin_data with unknown indicators" do
|
|
234
244
|
result = Braintree::PaymentMethodNonce.find("fake-valid-unknown-indicators-nonce")
|
|
235
245
|
|
|
@@ -245,6 +255,7 @@ describe Braintree::PaymentMethodNonce do
|
|
|
245
255
|
expect(nonce.bin_data.issuing_bank).to eq(Braintree::CreditCard::IssuingBank::Unknown)
|
|
246
256
|
expect(nonce.bin_data.payroll).to eq(Braintree::CreditCard::Payroll::Unknown)
|
|
247
257
|
expect(nonce.bin_data.prepaid).to eq(Braintree::CreditCard::Prepaid::Unknown)
|
|
258
|
+
expect(nonce.bin_data.prepaid_reloadable).to eq(Braintree::CreditCard::PrepaidReloadable::Unknown)
|
|
248
259
|
expect(nonce.bin_data.product_id).to eq(Braintree::CreditCard::ProductId::Unknown)
|
|
249
260
|
end
|
|
250
261
|
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")
|
|
3
|
+
|
|
4
|
+
describe Braintree::PayPalPaymentResource do
|
|
5
|
+
|
|
6
|
+
describe "self.update" do
|
|
7
|
+
it "successfully updates a payment resource" do
|
|
8
|
+
nonce = nonce_for_paypal_account(
|
|
9
|
+
:intent => "order",
|
|
10
|
+
:payment_token => "fake-paypal-payment-token",
|
|
11
|
+
:payer_id => "fake-paypal-payer-id",
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
result = Braintree::PayPalPaymentResource.update(
|
|
15
|
+
:amount => BigDecimal("55.00"),
|
|
16
|
+
:amount_breakdown => {
|
|
17
|
+
:discount => BigDecimal("15.00"),
|
|
18
|
+
:handling => BigDecimal("0.00"),
|
|
19
|
+
:insurance => BigDecimal("5.00"),
|
|
20
|
+
:item_total => BigDecimal("45.00"),
|
|
21
|
+
:shipping => BigDecimal("10.00"),
|
|
22
|
+
:shipping_discount => BigDecimal("0.00"),
|
|
23
|
+
:tax_total => BigDecimal("10.00"),
|
|
24
|
+
},
|
|
25
|
+
:currency_iso_code => "USD",
|
|
26
|
+
:custom_field => "0437",
|
|
27
|
+
:description => "This is a test",
|
|
28
|
+
:line_items => [{
|
|
29
|
+
:description => "Shoes",
|
|
30
|
+
:image_url => "https://example.com/products/23434/pic.png",
|
|
31
|
+
:kind => "debit",
|
|
32
|
+
:name => "Name #1",
|
|
33
|
+
:product_code => "23434",
|
|
34
|
+
:quantity => "1",
|
|
35
|
+
:total_amount => BigDecimal("45.00"),
|
|
36
|
+
:unit_amount => BigDecimal("45.00"),
|
|
37
|
+
:unit_tax_amount => BigDecimal("10.00"),
|
|
38
|
+
:url => "https://example.com/products/23434",
|
|
39
|
+
}],
|
|
40
|
+
:order_id => "order-123456789",
|
|
41
|
+
:payee_email => "bt_buyer_us@paypal.com",
|
|
42
|
+
:payment_method_nonce => nonce,
|
|
43
|
+
:shipping => {
|
|
44
|
+
:country_name => "United States",
|
|
45
|
+
:country_code_alpha2 => "US",
|
|
46
|
+
:country_code_alpha3 => "USA",
|
|
47
|
+
:country_code_numeric => "484",
|
|
48
|
+
:extended_address => "Apt. #1",
|
|
49
|
+
:first_name => "John",
|
|
50
|
+
:international_phone => {
|
|
51
|
+
:country_code => "1",
|
|
52
|
+
:national_number => "4081111111",
|
|
53
|
+
},
|
|
54
|
+
:last_name => "Doe",
|
|
55
|
+
:locality => "Chicago",
|
|
56
|
+
:postal_code => "60618",
|
|
57
|
+
:region => "IL",
|
|
58
|
+
:street_address => "123 Division Street",
|
|
59
|
+
},
|
|
60
|
+
:shipping_options => [{
|
|
61
|
+
:amount => BigDecimal("10.00"),
|
|
62
|
+
:id => "option1",
|
|
63
|
+
:label => "fast",
|
|
64
|
+
:selected => true,
|
|
65
|
+
:type => "SHIPPING"
|
|
66
|
+
}],
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
expect(result.success?).to eq(true)
|
|
70
|
+
expect(result.payment_method_nonce).not_to be_nil
|
|
71
|
+
expect(result.payment_method_nonce.nonce).not_to be_nil
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "returns validation errors" do
|
|
75
|
+
nonce = nonce_for_paypal_account(
|
|
76
|
+
:intent => "order",
|
|
77
|
+
:payment_token => "fake-paypal-payment-token",
|
|
78
|
+
:payer_id => "fake-paypal-payer-id",
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
result = Braintree::PayPalPaymentResource.update(
|
|
82
|
+
:amount => BigDecimal("55.00"),
|
|
83
|
+
:amount_breakdown => {
|
|
84
|
+
:discount => BigDecimal("15.00"),
|
|
85
|
+
:handling => BigDecimal("0.00"),
|
|
86
|
+
:insurance => BigDecimal("5.00"),
|
|
87
|
+
:item_total => BigDecimal("45.00"),
|
|
88
|
+
:shipping => BigDecimal("10.00"),
|
|
89
|
+
:shipping_discount => BigDecimal("0.00"),
|
|
90
|
+
:tax_total => BigDecimal("10.00"),
|
|
91
|
+
},
|
|
92
|
+
:currency_iso_code => "USD",
|
|
93
|
+
:custom_field => "0437",
|
|
94
|
+
:description => "This is a test",
|
|
95
|
+
:line_items => [{
|
|
96
|
+
:description => "Shoes",
|
|
97
|
+
:image_url => "https://example.com/products/23434/pic.png",
|
|
98
|
+
:kind => "debit",
|
|
99
|
+
:name => "Name #1",
|
|
100
|
+
:product_code => "23434",
|
|
101
|
+
:quantity => "1",
|
|
102
|
+
:total_amount => BigDecimal("45.00"),
|
|
103
|
+
:unit_amount => BigDecimal("45.00"),
|
|
104
|
+
:unit_tax_amount => BigDecimal("10.00"),
|
|
105
|
+
:url => "https://example.com/products/23434",
|
|
106
|
+
}],
|
|
107
|
+
:order_id => "order-123456789",
|
|
108
|
+
:payee_email => "bt_buyer_us@paypal",
|
|
109
|
+
:payment_method_nonce => nonce,
|
|
110
|
+
:shipping => {
|
|
111
|
+
:country_name => "United States",
|
|
112
|
+
:country_code_alpha2 => "US",
|
|
113
|
+
:country_code_alpha3 => "USA",
|
|
114
|
+
:country_code_numeric => "484",
|
|
115
|
+
:extended_address => "Apt. #1",
|
|
116
|
+
:first_name => "John",
|
|
117
|
+
:international_phone => {
|
|
118
|
+
:country_code => "1",
|
|
119
|
+
:national_number => "4081111111",
|
|
120
|
+
},
|
|
121
|
+
:last_name => "Doe",
|
|
122
|
+
:locality => "Chicago",
|
|
123
|
+
:postal_code => "60618",
|
|
124
|
+
:region => "IL",
|
|
125
|
+
:street_address => "123 Division Street",
|
|
126
|
+
},
|
|
127
|
+
:shipping_options => [{
|
|
128
|
+
:amount => BigDecimal("10.00"),
|
|
129
|
+
:id => "option1",
|
|
130
|
+
:label => "fast",
|
|
131
|
+
:selected => true,
|
|
132
|
+
:type => "SHIPPING"
|
|
133
|
+
}],
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
expect(result.success?).to eq(false)
|
|
137
|
+
errors = result.errors.for(:paypal_payment_resource)
|
|
138
|
+
expect(errors.on(:payee_email)[0].code).to eq(Braintree::ErrorCodes::PayPalPaymentResource::InvalidEmail)
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -267,6 +267,19 @@ describe Braintree::Transaction do
|
|
|
267
267
|
expect(result.transaction.credit_card_details.prepaid).to eq(Braintree::CreditCard::Prepaid::Yes)
|
|
268
268
|
expect(result.transaction.payment_instrument_type).to eq(Braintree::PaymentInstrumentType::CreditCard)
|
|
269
269
|
end
|
|
270
|
+
|
|
271
|
+
it "sets the prepaid_reloadable field if the card is prepaid reloadable" do
|
|
272
|
+
result = Braintree::Transaction.create(
|
|
273
|
+
:type => "sale",
|
|
274
|
+
:amount => 1_00,
|
|
275
|
+
:credit_card => {
|
|
276
|
+
:number => Braintree::Test::CreditCardNumbers::CardTypeIndicators::PrepaidReloadable,
|
|
277
|
+
:expiration_date => "05/2009"
|
|
278
|
+
},
|
|
279
|
+
)
|
|
280
|
+
expect(result.transaction.credit_card_details.prepaid_reloadable).to eq(Braintree::CreditCard::PrepaidReloadable::Yes)
|
|
281
|
+
expect(result.transaction.payment_instrument_type).to eq(Braintree::PaymentInstrumentType::CreditCard)
|
|
282
|
+
end
|
|
270
283
|
end
|
|
271
284
|
|
|
272
285
|
describe "sca_exemption" do
|
|
@@ -2183,6 +2196,7 @@ describe Braintree::Transaction do
|
|
|
2183
2196
|
meta_checkout_card_details.last_4.should == "1881"
|
|
2184
2197
|
meta_checkout_card_details.masked_number.should == "401288******1881"
|
|
2185
2198
|
meta_checkout_card_details.prepaid.should == "No"
|
|
2199
|
+
meta_checkout_card_details.prepaid_reloadable.should == "Unknown"
|
|
2186
2200
|
end
|
|
2187
2201
|
|
|
2188
2202
|
it "can create a transaction with a fake meta checkout token nonce" do
|
|
@@ -2213,6 +2227,7 @@ describe Braintree::Transaction do
|
|
|
2213
2227
|
meta_checkout_token_details.last_4.should == "1881"
|
|
2214
2228
|
meta_checkout_token_details.masked_number.should == "401288******1881"
|
|
2215
2229
|
meta_checkout_token_details.prepaid.should == "No"
|
|
2230
|
+
meta_checkout_token_details.prepaid_reloadable.should == "Unknown"
|
|
2216
2231
|
end
|
|
2217
2232
|
|
|
2218
2233
|
it "can create a transaction with a fake apple pay nonce" do
|
|
@@ -266,4 +266,9 @@ describe Braintree::CreditCard do
|
|
|
266
266
|
end
|
|
267
267
|
end
|
|
268
268
|
end
|
|
269
|
+
|
|
270
|
+
it "initializes prepaid reloadable correctly" do
|
|
271
|
+
card = Braintree::CreditCard._new(:gateway, {:prepaid_reloadable => "No"})
|
|
272
|
+
expect(card.prepaid_reloadable).to eq("No")
|
|
273
|
+
end
|
|
269
274
|
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe Braintree::CustomerSessionGateway do
|
|
4
|
+
let(:gateway) { double(:gateway) }
|
|
5
|
+
let(:graphql_client) { double(:graphql_client) }
|
|
6
|
+
let(:customer_session_gateway) { Braintree::CustomerSessionGateway.new(gateway, graphql_client) }
|
|
7
|
+
|
|
8
|
+
describe "#create_customer_session" do
|
|
9
|
+
let(:input) do
|
|
10
|
+
{
|
|
11
|
+
:merchant_account_id => "merchant-account-id",
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let(:response) do
|
|
16
|
+
{
|
|
17
|
+
data: {
|
|
18
|
+
createCustomerSession: {
|
|
19
|
+
sessionId: "session-id"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
it "executes the createCustomerSession mutation" do
|
|
27
|
+
create_input = Braintree::CreateCustomerSessionInput.new(input)
|
|
28
|
+
expect(graphql_client).to receive(:query).with(Braintree::CustomerSessionGateway::CREATE_CUSTOMER_SESSION,
|
|
29
|
+
{
|
|
30
|
+
"input" => create_input.to_graphql_variables
|
|
31
|
+
}).and_return(response)
|
|
32
|
+
|
|
33
|
+
expect(Braintree::GraphQLClient).to receive(:get_validation_errors).with(response).and_return(nil)
|
|
34
|
+
result = customer_session_gateway.create_customer_session(create_input)
|
|
35
|
+
expect(result).to be_a(Braintree::SuccessfulResult)
|
|
36
|
+
expect(result.session_id).to eq("session-id")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "returns an error result if there are validation errors" do
|
|
40
|
+
create_input = Braintree::CreateCustomerSessionInput.new(input)
|
|
41
|
+
errors = {:errors =>
|
|
42
|
+
[ {:attribute => "", :code => "123", :message => "error"} ]
|
|
43
|
+
}
|
|
44
|
+
expect(graphql_client).to receive(:query).and_return(response)
|
|
45
|
+
expect(Braintree::GraphQLClient).to receive(:get_validation_errors).with(response).and_return(errors)
|
|
46
|
+
result = customer_session_gateway.create_customer_session(create_input)
|
|
47
|
+
expect(result).to be_a(Braintree::ErrorResult)
|
|
48
|
+
expect(result.errors.first.message).to eq("error")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "raises an UnexpectedError if there is a problem parsing the response" do
|
|
52
|
+
create_input = Braintree::CreateCustomerSessionInput.new(input)
|
|
53
|
+
badResonse = {:data => {}}
|
|
54
|
+
expect(graphql_client).to receive(:query).and_return(badResonse)
|
|
55
|
+
expect(Braintree::GraphQLClient).to receive(:get_validation_errors).with(badResonse).and_return(nil)
|
|
56
|
+
expect { customer_session_gateway.create_customer_session(create_input) }.to raise_error(Braintree::UnexpectedError)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
describe "#update_customer_session" do
|
|
62
|
+
let(:input) do
|
|
63
|
+
{
|
|
64
|
+
:merchant_account_id => "merchant-account-id", :session_id => "session-id"
|
|
65
|
+
}
|
|
66
|
+
end
|
|
67
|
+
let(:response) do
|
|
68
|
+
{
|
|
69
|
+
data: {
|
|
70
|
+
updateCustomerSession: {
|
|
71
|
+
sessionId: "session-id"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "executes the updateCustomerSession mutation" do
|
|
78
|
+
update_input = Braintree::UpdateCustomerSessionInput.new(input)
|
|
79
|
+
expect(graphql_client).to receive(:query).with(Braintree::CustomerSessionGateway::UPDATE_CUSTOMER_SESSION,
|
|
80
|
+
{
|
|
81
|
+
"input" => update_input.to_graphql_variables
|
|
82
|
+
}).and_return(response)
|
|
83
|
+
expect(Braintree::GraphQLClient).to receive(:get_validation_errors).with(response).and_return(nil)
|
|
84
|
+
result = customer_session_gateway.update_customer_session(update_input)
|
|
85
|
+
expect(result).to be_a(Braintree::SuccessfulResult)
|
|
86
|
+
expect(result.session_id).to eq("session-id")
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe "#get_customer_recommendations" do
|
|
91
|
+
let(:customer_recommendations_input) { double(:customer_recommendations_input, to_graphql_variables: {"sessionId" => "session_id", recommendations: ["PAYMENT_RECOMMENDATIONS"]}) }
|
|
92
|
+
let(:response) do
|
|
93
|
+
{
|
|
94
|
+
data: {
|
|
95
|
+
customerRecommendations: {
|
|
96
|
+
isInPayPalNetwork: true,
|
|
97
|
+
recommendations: {
|
|
98
|
+
paymentOptions: [
|
|
99
|
+
{paymentOption: "PAYPAL", recommendedPriority: 1}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "fetches customer recommendations" do
|
|
108
|
+
expected_variables = {"input" => {"sessionId" => "session_id", recommendations: ["PAYMENT_RECOMMENDATIONS"]}}
|
|
109
|
+
expect(graphql_client).to receive(:query).with(Braintree::CustomerSessionGateway::GET_CUSTOMER_RECOMMENDATIONS, expected_variables).and_return(response)
|
|
110
|
+
expect(Braintree::GraphQLClient).to receive(:get_validation_errors).with(response).and_return(nil)
|
|
111
|
+
|
|
112
|
+
result = customer_session_gateway.get_customer_recommendations(customer_recommendations_input)
|
|
113
|
+
expect(result).to be_a(Braintree::SuccessfulResult)
|
|
114
|
+
expect(result.customer_recommendations.is_in_paypal_network).to eq(true)
|
|
115
|
+
expect(result.customer_recommendations.recommendations.payment_options[0].payment_option).to eq("PAYPAL")
|
|
116
|
+
expect(result.customer_recommendations.recommendations.payment_options[0].recommended_priority).to eq(1)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe Braintree::GooglePayCard do
|
|
4
|
+
it "initializes prepaid reloadable correctly" do
|
|
5
|
+
card = Braintree::GooglePayCard._new(:gateway, {:prepaid_reloadable => "No"})
|
|
6
|
+
expect(card.prepaid_reloadable).to eq("No")
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
describe Braintree::CreateCustomerSessionInput do
|
|
5
|
+
let(:input_data) do
|
|
6
|
+
{
|
|
7
|
+
merchant_account_id: "merchant-account-id",
|
|
8
|
+
session_id: "session-id",
|
|
9
|
+
customer: {
|
|
10
|
+
email: "test@example.com" ,
|
|
11
|
+
},
|
|
12
|
+
domain: "example.com"
|
|
13
|
+
}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "#initialize" do
|
|
17
|
+
it "initializes with attributes" do
|
|
18
|
+
input = Braintree::CreateCustomerSessionInput.new(input_data)
|
|
19
|
+
|
|
20
|
+
expect(input.attrs).to eq(input_data.keys)
|
|
21
|
+
expect(input.merchant_account_id).to eq("merchant-account-id")
|
|
22
|
+
expect(input.session_id).to eq("session-id")
|
|
23
|
+
expect(input.customer).to be_a(Braintree::CustomerSessionInput)
|
|
24
|
+
expect(input.customer.email).to eq("test@example.com")
|
|
25
|
+
expect(input.domain).to eq("example.com")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "handles nil customer" do
|
|
29
|
+
attributes = {merchant_account_id: "merchant-account-id"}
|
|
30
|
+
input = Braintree::CreateCustomerSessionInput.new(attributes)
|
|
31
|
+
expect(input.customer).to be_nil
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
describe "#inspect" do
|
|
37
|
+
it "returns a string representation of the object" do
|
|
38
|
+
input = Braintree::CreateCustomerSessionInput.new(input_data)
|
|
39
|
+
expected_string = "#<Braintree::CreateCustomerSessionInput merchant_account_id:\"merchant-account-id\" session_id:\"session-id\" customer:#<Braintree::CustomerSessionInput email:\"test@example.com\"> domain:\"example.com\">"
|
|
40
|
+
expect(input.inspect).to eq(expected_string)
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "handles nil values" do
|
|
45
|
+
attributes = {
|
|
46
|
+
merchant_account_id: "merchant-account-id",
|
|
47
|
+
session_id: nil,
|
|
48
|
+
customer: nil
|
|
49
|
+
}
|
|
50
|
+
input = Braintree::CreateCustomerSessionInput.new(attributes)
|
|
51
|
+
expected_string = "#<Braintree::CreateCustomerSessionInput merchant_account_id:\"merchant-account-id\" session_id:nil customer:nil>"
|
|
52
|
+
|
|
53
|
+
expect(input.inspect).to eq(expected_string)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe "#to_graphql_variables" do
|
|
59
|
+
it "converts the input to graphql variables" do
|
|
60
|
+
input = Braintree::CreateCustomerSessionInput.new(input_data)
|
|
61
|
+
expected_variables = {
|
|
62
|
+
"merchantAccountId" => "merchant-account-id",
|
|
63
|
+
"sessionId" => "session-id",
|
|
64
|
+
"domain" => "example.com",
|
|
65
|
+
"customer" => {"email" => "test@example.com"}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
expect(input.to_graphql_variables).to eq(expected_variables)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "handles nil values" do
|
|
74
|
+
attributes = {merchant_account_id: "merchant-account-id"}
|
|
75
|
+
input = Braintree::CreateCustomerSessionInput.new(attributes)
|
|
76
|
+
expected_variables = {"merchantAccountId" => "merchant-account-id"}
|
|
77
|
+
|
|
78
|
+
expect(input.to_graphql_variables).to eq(expected_variables)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
describe Braintree::CustomerRecommendationsInput do
|
|
5
|
+
let(:input_data) do
|
|
6
|
+
{
|
|
7
|
+
merchant_account_id: "merchant-account-id",
|
|
8
|
+
session_id: "session-id",
|
|
9
|
+
recommendations: ["PAYMENT_RECOMMENDATIONS"],
|
|
10
|
+
customer: {email: "test@example.com"}
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
describe "#initialize" do
|
|
14
|
+
it "initializes with attributes" do
|
|
15
|
+
input = Braintree::CustomerRecommendationsInput.new(input_data)
|
|
16
|
+
|
|
17
|
+
expect(input.attrs).to eq(input_data.keys)
|
|
18
|
+
expect(input.merchant_account_id).to eq("merchant-account-id")
|
|
19
|
+
expect(input.session_id).to eq("session-id")
|
|
20
|
+
expect(input.customer).to be_a(Braintree::CustomerSessionInput)
|
|
21
|
+
expect(input.recommendations[0]).to eq("PAYMENT_RECOMMENDATIONS")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "disallows nil session id" do
|
|
25
|
+
attributes = {
|
|
26
|
+
merchant_account_id: "merchant-account-id",
|
|
27
|
+
recommendations: ["PAYMENT_RECOMMENDATIONS"],
|
|
28
|
+
}
|
|
29
|
+
expect do
|
|
30
|
+
Braintree::CustomerRecommendationsInput.new(attributes)
|
|
31
|
+
end.to raise_error(ArgumentError, "Expected hash to contain a :session_id")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "disallows nil recommendations" do
|
|
35
|
+
attributes = {
|
|
36
|
+
merchant_account_id: "merchant-account-id",
|
|
37
|
+
session_id: "session-id",
|
|
38
|
+
}
|
|
39
|
+
expect do
|
|
40
|
+
Braintree::CustomerRecommendationsInput.new(attributes)
|
|
41
|
+
end.to raise_error(ArgumentError, "Expected hash to contain a :recommendations")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "handles nil customer" do
|
|
45
|
+
attributes = {
|
|
46
|
+
merchant_account_id: "merchant-account-id",
|
|
47
|
+
session_id: "session-id",
|
|
48
|
+
recommendations: ["PAYMENT_RECOMMENDATIONS"],
|
|
49
|
+
}
|
|
50
|
+
input = Braintree::CustomerRecommendationsInput.new(attributes)
|
|
51
|
+
|
|
52
|
+
expect(input.customer).to be_nil
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
describe "#inspect" do
|
|
58
|
+
it "returns a string representation of the object" do
|
|
59
|
+
input = Braintree::CustomerRecommendationsInput.new(input_data)
|
|
60
|
+
expected_string = "#<Braintree::CustomerRecommendationsInput merchant_account_id:\"merchant-account-id\" session_id:\"session-id\" recommendations:[\"PAYMENT_RECOMMENDATIONS\"] customer:#<Braintree::CustomerSessionInput email:\"test@example.com\">>"
|
|
61
|
+
expect(input.inspect).to eq(expected_string)
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "handles nil values" do
|
|
66
|
+
attributes = {
|
|
67
|
+
merchant_account_id: "merchant-account-id",
|
|
68
|
+
session_id: "session-id",
|
|
69
|
+
recommendations: ["PAYMENT_RECOMMENDATIONS"],
|
|
70
|
+
}
|
|
71
|
+
input = Braintree::CustomerRecommendationsInput.new(attributes)
|
|
72
|
+
expected_string = "#<Braintree::CustomerRecommendationsInput merchant_account_id:\"merchant-account-id\" session_id:\"session-id\" recommendations:[\"PAYMENT_RECOMMENDATIONS\"]>"
|
|
73
|
+
|
|
74
|
+
expect(input.inspect).to eq(expected_string)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe "#to_graphql_variables" do
|
|
80
|
+
it "converts the input to graphql variables" do
|
|
81
|
+
input = Braintree::CustomerRecommendationsInput.new(input_data)
|
|
82
|
+
expected_variables = {
|
|
83
|
+
"merchantAccountId" => "merchant-account-id",
|
|
84
|
+
"sessionId" => "session-id",
|
|
85
|
+
"customer" => {"email" => "test@example.com"},
|
|
86
|
+
"recommendations" => ["PAYMENT_RECOMMENDATIONS"],
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
expect(input.to_graphql_variables).to eq(expected_variables)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "handles nil values" do
|
|
93
|
+
attributes = {
|
|
94
|
+
merchant_account_id: "merchant-account-id",
|
|
95
|
+
session_id: "session-id",
|
|
96
|
+
recommendations: ["PAYMENT_RECOMMENDATIONS"],
|
|
97
|
+
}
|
|
98
|
+
input = Braintree::CustomerRecommendationsInput.new(attributes)
|
|
99
|
+
|
|
100
|
+
expected_variables = {
|
|
101
|
+
"merchantAccountId" => "merchant-account-id",
|
|
102
|
+
"sessionId" => "session-id",
|
|
103
|
+
"recommendations" => ["PAYMENT_RECOMMENDATIONS"],
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
expect(input.to_graphql_variables).to eq(expected_variables)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
describe Braintree::CustomerSessionInput do
|
|
5
|
+
let(:input_data) do
|
|
6
|
+
{
|
|
7
|
+
email: "test@example.com" ,
|
|
8
|
+
phone: {
|
|
9
|
+
country_phone_code: "1",
|
|
10
|
+
phone_number: "555-123-4567",
|
|
11
|
+
extension_number: "123",
|
|
12
|
+
},
|
|
13
|
+
user_agent: "Mozilla"
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "#initialize" do
|
|
18
|
+
it "initializes with attributes" do
|
|
19
|
+
input = Braintree::CustomerSessionInput.new(input_data)
|
|
20
|
+
|
|
21
|
+
expect(input.attrs).to eq(input_data.keys)
|
|
22
|
+
expect(input.email).to eq("test@example.com")
|
|
23
|
+
expect(input.phone.country_phone_code).to eq("1")
|
|
24
|
+
expect(input.phone.phone_number).to eq("555-123-4567")
|
|
25
|
+
expect(input.phone.extension_number).to eq("123")
|
|
26
|
+
expect(input.user_agent).to eq("Mozilla")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "handles nil email" do
|
|
30
|
+
attributes = {}
|
|
31
|
+
input = Braintree::CustomerSessionInput.new(attributes)
|
|
32
|
+
expect(input.email).to be_nil
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
describe "#inspect" do
|
|
38
|
+
it "returns a string representation of the object" do
|
|
39
|
+
input = Braintree::CustomerSessionInput.new(input_data)
|
|
40
|
+
expected_string = "#<Braintree::CustomerSessionInput email:\"test@example.com\" phone:#<Braintree::PhoneInput country_phone_code:\"1\" phone_number:\"555-123-4567\" extension_number:\"123\"> user_agent:\"Mozilla\">"
|
|
41
|
+
expect(input.inspect).to eq(expected_string)
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "handles nil values" do
|
|
46
|
+
attributes = {}
|
|
47
|
+
input = Braintree::CustomerSessionInput.new(attributes)
|
|
48
|
+
expected_string = "#<Braintree::CustomerSessionInput >"
|
|
49
|
+
|
|
50
|
+
expect(input.inspect).to eq(expected_string)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "#to_graphql_variables" do
|
|
56
|
+
it "converts the input to graphql variables" do
|
|
57
|
+
input = Braintree::CustomerSessionInput.new(input_data)
|
|
58
|
+
expected_variables = {
|
|
59
|
+
"email" => "test@example.com",
|
|
60
|
+
"phone" => {
|
|
61
|
+
"countryPhoneCode" => "1",
|
|
62
|
+
"phoneNumber" => "555-123-4567",
|
|
63
|
+
"extensionNumber" => "123"
|
|
64
|
+
},
|
|
65
|
+
"userAgent" => "Mozilla"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
expect(input.to_graphql_variables).to eq(expected_variables)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "handles nil values" do
|
|
74
|
+
attributes = {}
|
|
75
|
+
input = Braintree::CustomerSessionInput.new(attributes)
|
|
76
|
+
expected_variables = {}
|
|
77
|
+
|
|
78
|
+
expect(input.to_graphql_variables).to eq(expected_variables)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
describe Braintree::PhoneInput do
|
|
5
|
+
let(:phone_input_data) do
|
|
6
|
+
{
|
|
7
|
+
country_phone_code: "1",
|
|
8
|
+
phone_number: "555-123-4567",
|
|
9
|
+
extension_number: "123"
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
let(:partial_phone_input_data) do
|
|
14
|
+
{
|
|
15
|
+
country_phone_code: "1",
|
|
16
|
+
phone_number: "555-123-4567"
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
describe "#initialize" do
|
|
22
|
+
it "initialize and sets the input keys to attrs variable" do
|
|
23
|
+
phone_input = described_class.new(phone_input_data)
|
|
24
|
+
|
|
25
|
+
expect(phone_input.attrs).to include(:country_phone_code)
|
|
26
|
+
expect(phone_input.attrs).to include(:phone_number)
|
|
27
|
+
expect(phone_input.attrs).to include(:extension_number)
|
|
28
|
+
expect(phone_input.attrs.length).to eq(3)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "inspect" do
|
|
33
|
+
it "includes all phone input attributes" do
|
|
34
|
+
phone_input = described_class.new(phone_input_data)
|
|
35
|
+
output = phone_input.inspect
|
|
36
|
+
|
|
37
|
+
expect(output).to include("country_phone_code:\"1\"")
|
|
38
|
+
expect(output).to include("phone_number:\"555-123-4567\"")
|
|
39
|
+
expect(output).to include("extension_number:\"123\"")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "includes only specified phone input attributes" do
|
|
43
|
+
phone_input = described_class.new(partial_phone_input_data)
|
|
44
|
+
output = phone_input.inspect
|
|
45
|
+
|
|
46
|
+
expect(output).to include("country_phone_code:\"1\"")
|
|
47
|
+
expect(output).to include("phone_number:\"555-123-4567\"")
|
|
48
|
+
expect(output).not_to include("extension_number")
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|