braintree 4.24.0 → 4.25.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/customer_session_gateway.rb +194 -0
- data/lib/braintree/error_result.rb +1 -1
- data/lib/braintree/errors.rb +2 -1
- data/lib/braintree/gateway.rb +4 -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/successful_result.rb +2 -0
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree.rb +11 -0
- data/spec/integration/braintree/customer_session_spec.rb +143 -0
- data/spec/unit/braintree/customer_session_gateway_spec.rb +120 -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
- metadata +21 -2
@@ -0,0 +1,143 @@
|
|
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::CustomerSessionGateway do
|
5
|
+
let(:gateway) do
|
6
|
+
Braintree::Gateway.new(
|
7
|
+
:environment => :development,
|
8
|
+
:merchant_id => "pwpp_multi_account_merchant",
|
9
|
+
:public_key => "pwpp_multi_account_merchant_public_key",
|
10
|
+
:private_key => "pwpp_multi_account_merchant_private_key",
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "create" do
|
15
|
+
it "can create customer session without email and phone" do
|
16
|
+
input = Braintree::CreateCustomerSessionInput.new(merchant_account_id: "usd_pwpp_multi_account_merchant_account")
|
17
|
+
result = gateway.customer_session.create_customer_session(input)
|
18
|
+
expect(result.success?).to eq(true)
|
19
|
+
expect(result.session_id).not_to be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can can create customer session with merchant provided session id" do
|
23
|
+
merchant_session_id = "11EF-A1E7-A5F5EE5C-A2E5-AFD2801469FC"
|
24
|
+
input = Braintree::CreateCustomerSessionInput.new(
|
25
|
+
session_id: merchant_session_id,
|
26
|
+
)
|
27
|
+
result = gateway.customer_session.create_customer_session(input)
|
28
|
+
expect(result.success?).to eq(true)
|
29
|
+
expect(result.session_id).to eq(merchant_session_id)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "can create customer session with API-derived session id" do
|
33
|
+
input = Braintree::CreateCustomerSessionInput.new({})
|
34
|
+
result = gateway.customer_session.create_customer_session(input)
|
35
|
+
expect(result.success?).to eq(true)
|
36
|
+
expect(result.session_id).not_to be_nil
|
37
|
+
end
|
38
|
+
|
39
|
+
it "cannot create duplicate customer session" do
|
40
|
+
existing_session_id = "11EF-34BC-2702904B-9026-C3ECF4BAC765"
|
41
|
+
input = Braintree::CreateCustomerSessionInput.new(
|
42
|
+
session_id: existing_session_id,
|
43
|
+
)
|
44
|
+
result = gateway.customer_session.create_customer_session(input)
|
45
|
+
expect(result.success?).to eq(false)
|
46
|
+
expect(result.errors.first.message).to include("Session IDs must be unique per merchant.")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "update" do
|
51
|
+
it "can update a customer session" do
|
52
|
+
session_id = "11EF-A1E7-A5F5EE5C-A2E5-AFD2801469FC"
|
53
|
+
create_input = Braintree::CreateCustomerSessionInput.new(
|
54
|
+
merchant_account_id: "usd_pwpp_multi_account_merchant_account",
|
55
|
+
session_id: session_id,
|
56
|
+
)
|
57
|
+
|
58
|
+
gateway.customer_session.create_customer_session(create_input)
|
59
|
+
|
60
|
+
customer = build_customer_session_input("PR5_test@example.com", "4085005005")
|
61
|
+
|
62
|
+
update_input = Braintree::UpdateCustomerSessionInput.new(
|
63
|
+
session_id: session_id,
|
64
|
+
customer: customer,
|
65
|
+
)
|
66
|
+
|
67
|
+
result = gateway.customer_session.update_customer_session(update_input)
|
68
|
+
|
69
|
+
expect(result.success?).to eq(true)
|
70
|
+
expect(result.session_id).to eq(session_id)
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
it "cannot update a non-existent customer session" do
|
75
|
+
session_id = "11EF-34BC-2702904B-9026-C3ECF4BAC765"
|
76
|
+
customer = build_customer_session_input("PR9_test@example.com", "4085005009")
|
77
|
+
update_input = Braintree::UpdateCustomerSessionInput.new(
|
78
|
+
session_id: session_id,
|
79
|
+
customer: customer,
|
80
|
+
)
|
81
|
+
|
82
|
+
result = gateway.customer_session.update_customer_session(update_input)
|
83
|
+
|
84
|
+
expect(result.success?).to eq(false)
|
85
|
+
expect(result.errors.first.message).to include("does not exist")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "customer recommendations" do
|
90
|
+
it "can get customer recommendations" do
|
91
|
+
customer = build_customer_session_input("PR5_test@example.com", "4085005005")
|
92
|
+
recommendations = [Braintree::Recommendations::PAYMENT_RECOMMENDATIONS]
|
93
|
+
customer_recommendations_input = Braintree::CustomerRecommendationsInput.new(
|
94
|
+
session_id: "11EF-A1E7-A5F5EE5C-A2E5-AFD2801469FC",
|
95
|
+
recommendations: recommendations,
|
96
|
+
customer: customer,
|
97
|
+
)
|
98
|
+
result = gateway.customer_session.get_customer_recommendations(customer_recommendations_input)
|
99
|
+
|
100
|
+
expect(result.success?).to eq(true)
|
101
|
+
payload = result.customer_recommendations
|
102
|
+
expect(payload.is_in_paypal_network).to eq(true)
|
103
|
+
payment_options = payload.recommendations.payment_options
|
104
|
+
expect(payment_options[0].payment_option).to eq(Braintree::RecommendedPaymentOption::PAYPAL)
|
105
|
+
expect(payment_options[0].recommended_priority).to equal(1)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "cannot get customer recommendations for non-existent session" do
|
109
|
+
customer = build_customer_session_input("PR9_test@example.com", "4085005009")
|
110
|
+
recommendations = [Braintree::Recommendations::PAYMENT_RECOMMENDATIONS]
|
111
|
+
customer_recommendations_input = Braintree::CustomerRecommendationsInput.new(
|
112
|
+
session_id: "11EF-34BC-2702904B-9026-C3ECF4BAC765",
|
113
|
+
recommendations: recommendations,
|
114
|
+
customer: customer,
|
115
|
+
)
|
116
|
+
result = gateway.customer_session.get_customer_recommendations(customer_recommendations_input)
|
117
|
+
|
118
|
+
expect(result.success?).to eq(false)
|
119
|
+
expect(result.errors.first.message).to include("does not exist")
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
def build_customer_session(session_id = nil)
|
126
|
+
customer = build_customer_session_input("PR1_test@example.com", "4085005002")
|
127
|
+
|
128
|
+
input = session_id ? CreateCustomerSessionInput.new(customer: customer, session_id: session_id) : CreateCustomerSessionInput.new(customer => customer)
|
129
|
+
@gateway.customer_session.create_customer_session(input)
|
130
|
+
end
|
131
|
+
|
132
|
+
def build_customer_session_input(email, phone_number)
|
133
|
+
{
|
134
|
+
email: email,
|
135
|
+
device_fingerprint_id: "test",
|
136
|
+
phone: {country_phone_code: "1", phone_number: phone_number},
|
137
|
+
paypal_app_installed: true,
|
138
|
+
venmo_app_installed: true,
|
139
|
+
user_agent: "Mozilla"
|
140
|
+
}
|
141
|
+
end
|
142
|
+
|
143
|
+
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,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
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
2
|
+
|
3
|
+
|
4
|
+
describe Braintree::UpdateCustomerSessionInput do
|
5
|
+
let(:input_data) do
|
6
|
+
{
|
7
|
+
merchant_account_id: "merchant-account-id",
|
8
|
+
session_id: "session-id",
|
9
|
+
customer: {email: "test@example.com"}
|
10
|
+
}
|
11
|
+
end
|
12
|
+
describe "#initialize" do
|
13
|
+
it "initializes with attributes" do
|
14
|
+
input = Braintree::UpdateCustomerSessionInput.new(input_data)
|
15
|
+
|
16
|
+
expect(input.attrs).to eq(input_data.keys)
|
17
|
+
expect(input.merchant_account_id).to eq("merchant-account-id")
|
18
|
+
expect(input.session_id).to eq("session-id")
|
19
|
+
expect(input.customer).to be_a(Braintree::CustomerSessionInput)
|
20
|
+
expect(input.customer.email).to eq("test@example.com")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "disallows nil session id" do
|
24
|
+
attributes = {
|
25
|
+
merchant_account_id: "merchant-account-id",
|
26
|
+
}
|
27
|
+
expect do
|
28
|
+
Braintree::UpdateCustomerSessionInput.new(attributes)
|
29
|
+
end.to raise_error(ArgumentError, "Expected hash to contain a :session_id")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "handles nil customer" do
|
33
|
+
attributes = {
|
34
|
+
merchant_account_id: "merchant-account-id",
|
35
|
+
session_id: "session-id",
|
36
|
+
}
|
37
|
+
input = Braintree::UpdateCustomerSessionInput.new(attributes)
|
38
|
+
|
39
|
+
expect(input.customer).to be_nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
describe "#inspect" do
|
45
|
+
it "returns a string representation of the object" do
|
46
|
+
input = Braintree::UpdateCustomerSessionInput.new(input_data)
|
47
|
+
expected_string = "#<Braintree::UpdateCustomerSessionInput merchant_account_id:\"merchant-account-id\" session_id:\"session-id\" customer:#<Braintree::CustomerSessionInput email:\"test@example.com\">>"
|
48
|
+
expect(input.inspect).to eq(expected_string)
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
it "handles nil values" do
|
53
|
+
attributes = {
|
54
|
+
merchant_account_id: "merchant-account-id",
|
55
|
+
session_id: "session-id",
|
56
|
+
}
|
57
|
+
input = Braintree::UpdateCustomerSessionInput.new(attributes)
|
58
|
+
expected_string = "#<Braintree::UpdateCustomerSessionInput merchant_account_id:\"merchant-account-id\" session_id:\"session-id\">"
|
59
|
+
|
60
|
+
expect(input.inspect).to eq(expected_string)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#to_graphql_variables" do
|
66
|
+
it "converts the input to graphql variables" do
|
67
|
+
input = Braintree::UpdateCustomerSessionInput.new(input_data)
|
68
|
+
expected_variables = {
|
69
|
+
"merchantAccountId" => "merchant-account-id",
|
70
|
+
"sessionId" => "session-id",
|
71
|
+
"customer" => {"email" => "test@example.com"},
|
72
|
+
}
|
73
|
+
|
74
|
+
expect(input.to_graphql_variables).to eq(expected_variables)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "handles nil values" do
|
78
|
+
attributes = {
|
79
|
+
merchant_account_id: "merchant-account-id",
|
80
|
+
session_id: "session-id",
|
81
|
+
}
|
82
|
+
input = Braintree::UpdateCustomerSessionInput.new(attributes)
|
83
|
+
|
84
|
+
expected_variables = {
|
85
|
+
"merchantAccountId" => "merchant-account-id",
|
86
|
+
"sessionId" => "session-id",
|
87
|
+
}
|
88
|
+
|
89
|
+
expect(input.to_graphql_variables).to eq(expected_variables)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|