paypal-sdk-rest 0.10.0 → 1.0.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/Gemfile +1 -1
- data/README.md +44 -0
- data/lib/generators/paypal/sdk/USAGE +3 -0
- data/lib/generators/paypal/sdk/install_generator.rb +17 -0
- data/lib/generators/paypal/sdk/templates/paypal.rb +2 -0
- data/lib/generators/paypal/sdk/templates/paypal.yml +31 -0
- data/lib/paypal-sdk-core.rb +38 -0
- data/lib/paypal-sdk/core/api.rb +20 -0
- data/lib/paypal-sdk/core/api/base.rb +162 -0
- data/lib/paypal-sdk/core/api/data_types/array_with_block.rb +44 -0
- data/lib/paypal-sdk/core/api/data_types/base.rb +224 -0
- data/lib/paypal-sdk/core/api/data_types/enum.rb +26 -0
- data/lib/paypal-sdk/core/api/data_types/simple_types.rb +52 -0
- data/lib/paypal-sdk/core/api/ipn.rb +66 -0
- data/lib/paypal-sdk/core/api/rest.rb +163 -0
- data/lib/paypal-sdk/core/authentication.rb +66 -0
- data/lib/paypal-sdk/core/config.rb +249 -0
- data/lib/paypal-sdk/core/credential.rb +16 -0
- data/lib/paypal-sdk/core/credential/base.rb +27 -0
- data/lib/paypal-sdk/core/credential/certificate.rb +32 -0
- data/lib/paypal-sdk/core/credential/signature.rb +22 -0
- data/lib/paypal-sdk/core/credential/third_party/subject.rb +25 -0
- data/lib/paypal-sdk/core/credential/third_party/token.rb +39 -0
- data/lib/paypal-sdk/core/exceptions.rb +96 -0
- data/lib/paypal-sdk/core/logging.rb +45 -0
- data/lib/paypal-sdk/core/openid_connect.rb +122 -0
- data/lib/paypal-sdk/core/openid_connect/api.rb +49 -0
- data/lib/paypal-sdk/core/openid_connect/data_types.rb +73 -0
- data/lib/paypal-sdk/core/openid_connect/get_api.rb +28 -0
- data/lib/paypal-sdk/core/openid_connect/request_data_type.rb +52 -0
- data/lib/paypal-sdk/core/openid_connect/set_api.rb +36 -0
- data/lib/paypal-sdk/core/util.rb +11 -0
- data/lib/paypal-sdk/core/util/http_helper.rb +159 -0
- data/lib/paypal-sdk/core/util/oauth_signature.rb +64 -0
- data/lib/paypal-sdk/core/util/ordered_hash.rb +165 -0
- data/lib/paypal-sdk/rest/data_types.rb +1 -0
- data/lib/paypal-sdk/rest/version.rb +1 -1
- data/spec/config/paypal.yml +27 -0
- data/spec/config/sample_data.yml +3 -0
- data/spec/core/api/data_type_spec.rb +189 -0
- data/spec/core/api/rest_spec.rb +147 -0
- data/spec/core/config_spec.rb +192 -0
- data/spec/core/logging_spec.rb +28 -0
- data/spec/core/openid_connect_spec.rb +144 -0
- data/spec/log/http.log +71 -32
- data/spec/log/rest_http.log +133 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/sample_data.rb +5 -0
- metadata +82 -5
data/spec/config/paypal.yml
CHANGED
@@ -1,8 +1,35 @@
|
|
1
1
|
test: &default
|
2
2
|
client_id: EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM
|
3
3
|
client_secret: EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM
|
4
|
+
username: jb-us-seller_api1.paypal.com
|
5
|
+
password: WX4WTU3S8MY44S7F
|
6
|
+
signature: AFcWxV21C7fd0v3bYYYRCpSSRl31A7yDhhsPUU2XhtMoZXsWHFxu-RWy
|
7
|
+
app_id: APP-80W284485P519543T
|
8
|
+
http_timeout: 30
|
4
9
|
mode: sandbox
|
10
|
+
sandbox_email_address: Platform.sdk.seller@gmail.com
|
5
11
|
|
6
12
|
development:
|
7
13
|
<<: *default
|
8
14
|
|
15
|
+
with_authentication:
|
16
|
+
<<: *default
|
17
|
+
client_id: EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM
|
18
|
+
client_secret: EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM
|
19
|
+
|
20
|
+
with_certificate:
|
21
|
+
<<: *default
|
22
|
+
username: platfo_1255170694_biz_api1.gmail.com
|
23
|
+
password: 2DPPKUPKB7DQLXNR
|
24
|
+
signature:
|
25
|
+
cert_path: <%= File.expand_path("../cert_key.pem", __FILE__) %>
|
26
|
+
app_id: APP-80W284485P519543T
|
27
|
+
|
28
|
+
with_oauth_token:
|
29
|
+
<<: *default
|
30
|
+
token: 3rMSi3kCmK1Q3.BKxkH29I53R0TRLrSuCO..l8AMOAFM6cQhPTTrfQ
|
31
|
+
token_secret: RuE1j8RNRlSuL5T-PSSpVWLvOlI
|
32
|
+
|
33
|
+
with_proxy:
|
34
|
+
<<: *default
|
35
|
+
http_proxy: <%= ENV['http_proxy'] %>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
ipn:
|
2
|
+
valid_message: item_number=&residence_country=US&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AXi5tzp0u2U-8QDyy.oC2A1Dhx04&address_country=United+States&address_city=San+Jose&address_status=unconfirmed&business=platfo_1255077030_biz%40gmail.com&payment_status=Pending&transaction_subject=&protection_eligibility=Ineligible&shipping=0.00&payer_id=934EKX9W68RRU&first_name=John&mc_fee=0.38&txn_id=5AL16697HX185734U&quantity=1&receiver_email=platfo_1255077030_biz%40gmail.com¬ify_version=3.7&txn_type=web_accept&mc_gross=1.00&payer_status=unverified&mc_currency=USD&test_ipn=1&custom=&payment_date=01%3A48%3A31+Dec+04%2C+2012+PST&payment_fee=0.38&charset=windows-1252&address_country_code=US&payment_gross=1.00&address_zip=95131&ipn_track_id=af0f53159f21e&address_state=CA&receipt_id=4050-1771-4106-3070&pending_reason=paymentreview&tax=0.00&handling_amount=0.00&item_name=&address_name=John+Doe&last_name=Doe&payment_type=instant&receiver_id=HZH2W8NPXUE5W&address_street=1+Main+St
|
3
|
+
invalid_message: invalid=invalid
|
@@ -0,0 +1,189 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PayPal::SDK::Core::API::DataTypes::Base do
|
4
|
+
|
5
|
+
DataType = PayPal::SDK::Core::API::DataTypes::Base
|
6
|
+
|
7
|
+
class TestCurrency < DataType
|
8
|
+
|
9
|
+
# Members
|
10
|
+
object_of :amount, String
|
11
|
+
object_of :desciption, String, :namespace => "ns"
|
12
|
+
# Attributes
|
13
|
+
add_attribute :currencyID, :namespace => "cc"
|
14
|
+
end
|
15
|
+
|
16
|
+
class TestType < DataType
|
17
|
+
object_of :fromCurrency, TestCurrency
|
18
|
+
array_of :toCurrency, TestCurrency
|
19
|
+
object_of :firstname, String, :name => "first-name"
|
20
|
+
end
|
21
|
+
|
22
|
+
class TestSimpleType < DataType
|
23
|
+
include PayPal::SDK::Core::API::DataTypes::SimpleTypes
|
24
|
+
object_of :created_on, Date
|
25
|
+
object_of :created_at, DateTime
|
26
|
+
end
|
27
|
+
|
28
|
+
class Message < DataType
|
29
|
+
object_of :value, String
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should allow content key" do
|
33
|
+
message = Message.new("Testing message")
|
34
|
+
message.value.should eql "Testing message"
|
35
|
+
|
36
|
+
message = Message.new(:value => "Testing message")
|
37
|
+
message.value.should eql "Testing message"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should create member object automatically" do
|
41
|
+
test_type = TestType.new
|
42
|
+
test_type.fromCurrency.should be_a TestCurrency
|
43
|
+
test_type.toCurrency.should be_a Array
|
44
|
+
test_type.toCurrency[0].should be_a TestCurrency
|
45
|
+
test_type.toCurrency[1].should be_a TestCurrency
|
46
|
+
test_type.toCurrency[0].amount.should eql nil
|
47
|
+
test_type.fromCurrency.amount.should eql nil
|
48
|
+
test_type.fromCurrency.desciption.should eql nil
|
49
|
+
test_type.fromCurrency.currencyID.should eql nil
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should convert the given data to configured type" do
|
53
|
+
test_type = TestType.new( :fromCurrency => { :currencyID => "USD", :amount => "50.0"})
|
54
|
+
test_type.fromCurrency.should be_a TestCurrency
|
55
|
+
test_type.fromCurrency.currencyID.should eql "USD"
|
56
|
+
test_type.fromCurrency.amount.should eql "50.0"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should allow block with initializer" do
|
60
|
+
test_type = TestType.new do
|
61
|
+
fromCurrency do
|
62
|
+
self.currencyID = "USD"
|
63
|
+
self.amount = "50.0"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
test_type.fromCurrency.currencyID.should eql "USD"
|
67
|
+
test_type.fromCurrency.amount.should eql "50.0"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should allow block with member" do
|
71
|
+
test_type = TestType.new
|
72
|
+
test_type.fromCurrency do
|
73
|
+
self.currencyID = "USD"
|
74
|
+
self.amount = "50.0"
|
75
|
+
end
|
76
|
+
test_type.fromCurrency.currencyID.should eql "USD"
|
77
|
+
test_type.fromCurrency.amount.should eql "50.0"
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should assign value to attribute" do
|
81
|
+
test_currency = TestCurrency.new( :@currencyID => "USD", :amount => "50" )
|
82
|
+
test_currency.currencyID.should eql "USD"
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should allow configured Class object" do
|
86
|
+
test_currency = TestCurrency.new( :currencyID => "USD", :amount => "50" )
|
87
|
+
test_type = TestType.new( :fromCurrency => test_currency )
|
88
|
+
test_type.fromCurrency.should eql test_currency
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should allow snakecase" do
|
92
|
+
test_type = TestType.new( :from_currency => {} )
|
93
|
+
test_type.from_currency.should be_a TestCurrency
|
94
|
+
test_type.from_currency.should eql test_type.fromCurrency
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should allow array" do
|
98
|
+
test_type = TestType.new( :toCurrency => [{ :currencyID => "USD", :amount => "50.0" }] )
|
99
|
+
test_type.toCurrency.should be_a Array
|
100
|
+
test_type.toCurrency.first.should be_a TestCurrency
|
101
|
+
test_type.toCurrency.first.currencyID.should eql "USD"
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should skip undefind members on initializer" do
|
105
|
+
test_type = TestType.new( :notExist => "testing")
|
106
|
+
lambda do
|
107
|
+
test_type.notExist
|
108
|
+
end.should raise_error NoMethodError
|
109
|
+
lambda do
|
110
|
+
test_type.notExist = "Value"
|
111
|
+
end.should raise_error NoMethodError
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should not convert empty hash" do
|
115
|
+
test_type = TestType.new( :fromCurrency => {} )
|
116
|
+
test_type.to_hash.should eql({})
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should not convert empty array" do
|
120
|
+
test_type = TestType.new( :toCurrency => [] )
|
121
|
+
test_type.to_hash.should eql({})
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should not convert array of empty hash" do
|
125
|
+
test_type = TestType.new( :toCurrency => [ {} ] )
|
126
|
+
test_type.to_hash.should eql({})
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should return empty hash" do
|
130
|
+
test_type = TestType.new
|
131
|
+
test_type.to_hash.should eql({})
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should convert to hash" do
|
135
|
+
test_currency = TestCurrency.new(:amount => "500")
|
136
|
+
test_currency.to_hash.should eql("amount" => "500")
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should convert to hash with key as symbol" do
|
140
|
+
test_currency = TestCurrency.new(:amount => "500")
|
141
|
+
test_currency.to_hash(:symbol => true).should eql(:amount => "500")
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should convert attribute key with @" do
|
145
|
+
test_currency = TestCurrency.new( :currencyID => "USD", :amount => "50" )
|
146
|
+
test_currency.to_hash["@currencyID"].should eql "USD"
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should convert attribute key without @" do
|
150
|
+
test_currency = TestCurrency.new( :currencyID => "USD", :amount => "50" )
|
151
|
+
test_currency.to_hash(:attribute => false)["currencyID"].should eql "USD"
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should convert to hash with namespace" do
|
155
|
+
test_currency = TestCurrency.new(:currencyID => "USD", :amount => "500", :desciption => "Testing" )
|
156
|
+
hash = test_currency.to_hash
|
157
|
+
hash["amount"].should eql "500"
|
158
|
+
hash["ns:desciption"].should eql "Testing"
|
159
|
+
hash["@currencyID"].should eql "USD"
|
160
|
+
hash = test_currency.to_hash(:namespace => false)
|
161
|
+
hash["amount"].should eql "500"
|
162
|
+
hash["desciption"].should eql "Testing"
|
163
|
+
hash["@currencyID"].should eql "USD"
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should allow namespace" do
|
167
|
+
test_currency = TestCurrency.new(:amount => "500", :"ns:desciption" => "Testing" )
|
168
|
+
test_currency.desciption.should eql "Testing"
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should use name option in members" do
|
172
|
+
test_type = TestType.new( :firstname => "FirstName")
|
173
|
+
test_type.to_hash.should eql({"first-name" => "FirstName" })
|
174
|
+
end
|
175
|
+
|
176
|
+
it "should allow date" do
|
177
|
+
date_time = "2010-10-10T10:10:10"
|
178
|
+
test_simple_type = TestSimpleType.new( :created_on => date_time, :created_at => date_time )
|
179
|
+
test_simple_type.created_on.should be_a Date
|
180
|
+
test_simple_type.created_at.should be_a DateTime
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should allow date with value 0" do
|
184
|
+
test_simple_type = TestSimpleType.new( :created_at => "0" )
|
185
|
+
test_simple_type.created_at.should be_a DateTime
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PayPal::SDK::Core::API::REST do
|
4
|
+
|
5
|
+
module PayPalRest
|
6
|
+
class API < PayPal::SDK::Core::API::REST
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_api(*args)
|
11
|
+
api = PayPalRest::API.new(*args)
|
12
|
+
@log_file ||= File.open("spec/log/rest_http.log", "w")
|
13
|
+
api.http.set_debug_output(@log_file)
|
14
|
+
api
|
15
|
+
end
|
16
|
+
|
17
|
+
before :all do
|
18
|
+
@api = create_api("v1/payments/", :with_authentication)
|
19
|
+
@vault_api = create_api("v1/vault/", :with_authentication)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "Configuration" do
|
23
|
+
it "create api with prefix" do
|
24
|
+
api = create_api("v1/payments")
|
25
|
+
api.uri.path.should eql "/v1/payments"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "service endpoint for sandbox" do
|
29
|
+
api = create_api
|
30
|
+
api.service_endpoint.should eql "https://api.sandbox.paypal.com"
|
31
|
+
api.token_endpoint.should eql "https://api.sandbox.paypal.com"
|
32
|
+
api = create_api( :mode => "sandbox" )
|
33
|
+
api.service_endpoint.should eql "https://api.sandbox.paypal.com"
|
34
|
+
api.token_endpoint.should eql "https://api.sandbox.paypal.com"
|
35
|
+
api = create_api( :mode => :sandbox )
|
36
|
+
api.service_endpoint.should eql "https://api.sandbox.paypal.com"
|
37
|
+
api.token_endpoint.should eql "https://api.sandbox.paypal.com"
|
38
|
+
api = create_api( :mode => "invalid" )
|
39
|
+
api.service_endpoint.should eql "https://api.sandbox.paypal.com"
|
40
|
+
api.token_endpoint.should eql "https://api.sandbox.paypal.com"
|
41
|
+
api = create_api( :mode => nil )
|
42
|
+
api.service_endpoint.should eql "https://api.sandbox.paypal.com"
|
43
|
+
api.token_endpoint.should eql "https://api.sandbox.paypal.com"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "service endpoint for live" do
|
47
|
+
api = create_api( :mode => "live" )
|
48
|
+
api.service_endpoint.should eql "https://api.paypal.com"
|
49
|
+
api.token_endpoint.should eql "https://api.paypal.com"
|
50
|
+
api = create_api( :mode => :live )
|
51
|
+
api.service_endpoint.should eql "https://api.paypal.com"
|
52
|
+
api.token_endpoint.should eql "https://api.paypal.com"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "override service endpoint" do
|
56
|
+
api = create_api( :rest_endpoint => "https://testing.api.paypal.com" )
|
57
|
+
api.service_endpoint.should eql "https://testing.api.paypal.com"
|
58
|
+
api.token_endpoint.should eql "https://testing.api.paypal.com"
|
59
|
+
api = create_api( :endpoint => "https://testing.api.paypal.com" )
|
60
|
+
api.service_endpoint.should eql "https://testing.api.paypal.com"
|
61
|
+
api.token_endpoint.should eql "https://testing.api.paypal.com"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "override token endpoint" do
|
65
|
+
api = create_api( :rest_token_endpoint => "https://testing.api.paypal.com" )
|
66
|
+
api.service_endpoint.should eql "https://api.sandbox.paypal.com"
|
67
|
+
api.token_endpoint.should eql "https://testing.api.paypal.com"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "Validation" do
|
72
|
+
it "Invalid client_id and client_secret" do
|
73
|
+
api = create_api(:with_authentication, :client_id => "XYZ", :client_secret => "ABC")
|
74
|
+
lambda {
|
75
|
+
api.token
|
76
|
+
}.should raise_error PayPal::SDK::Core::Exceptions::UnauthorizedAccess
|
77
|
+
end
|
78
|
+
|
79
|
+
it "Should handle expired token" do
|
80
|
+
old_token = @api.token
|
81
|
+
@api.token_hash[:expires_in] = 0
|
82
|
+
@api.token.should_not eql old_token
|
83
|
+
end
|
84
|
+
|
85
|
+
it "Get token" do
|
86
|
+
@api.token.should_not be_nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "Success request" do
|
91
|
+
|
92
|
+
it "Create Payment" do
|
93
|
+
response = @api.post("payment", {
|
94
|
+
"intent" => "sale",
|
95
|
+
"payer" => {
|
96
|
+
"payment_method" => "credit_card",
|
97
|
+
"funding_instruments" => [{
|
98
|
+
"credit_card" => {
|
99
|
+
"type" => "visa",
|
100
|
+
"number" => "4417119669820331",
|
101
|
+
"expire_month" => "11", "expire_year" => "2018",
|
102
|
+
"first_name" => "Joe", "last_name" => "Shopper" }}]},
|
103
|
+
"transactions" => [{
|
104
|
+
"amount" => {
|
105
|
+
"total" => "7.47",
|
106
|
+
"currency" => "USD" }}]})
|
107
|
+
response["error"].should be_nil
|
108
|
+
end
|
109
|
+
|
110
|
+
it "List Payments" do
|
111
|
+
response = @api.get("payment", { "count" => 10 })
|
112
|
+
response["error"].should be_nil
|
113
|
+
response["count"].should_not be_nil
|
114
|
+
end
|
115
|
+
|
116
|
+
it "Execute Payment"
|
117
|
+
|
118
|
+
it "Create FundingInstrument" do
|
119
|
+
new_funding_instrument = @vault_api.post("credit-card", {
|
120
|
+
"type" => "visa",
|
121
|
+
"number" => "4111111111111111",
|
122
|
+
"expire_month" => "11", "expire_year" => "2018",
|
123
|
+
"cvv2" => "874",
|
124
|
+
"first_name" => "Joe", "last_name" => "Shopper" })
|
125
|
+
new_funding_instrument["error"].should be_nil
|
126
|
+
new_funding_instrument["id"].should_not be_nil
|
127
|
+
|
128
|
+
funding_instrument = @vault_api.get("credit-card/#{new_funding_instrument["id"]}")
|
129
|
+
funding_instrument["error"].should be_nil
|
130
|
+
funding_instrument["id"].should eql new_funding_instrument["id"]
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "Failure request" do
|
136
|
+
it "Invalid Resource ID" do
|
137
|
+
lambda {
|
138
|
+
response = @api.get("payment/PAY-1234")
|
139
|
+
}.should raise_error PayPal::SDK::Core::Exceptions::ResourceNotFound
|
140
|
+
end
|
141
|
+
|
142
|
+
it "Invalid parameters" do
|
143
|
+
response = @api.post("payment")
|
144
|
+
response["error"]["name"].should eql "VALIDATION_ERROR"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PayPal::SDK::Core::Config do
|
4
|
+
|
5
|
+
Config = PayPal::SDK::Core::Config
|
6
|
+
|
7
|
+
it "load configuration file and default environment" do
|
8
|
+
lambda {
|
9
|
+
Config.load("spec/config/paypal.yml", "test")
|
10
|
+
Config.default_environment.should eql "test"
|
11
|
+
}.should_not raise_error
|
12
|
+
end
|
13
|
+
|
14
|
+
it "Set default environment" do
|
15
|
+
begin
|
16
|
+
backup_default_environment = Config.default_environment
|
17
|
+
Config.default_environment = "new_env"
|
18
|
+
Config.default_environment.should eql "new_env"
|
19
|
+
ensure
|
20
|
+
Config.default_environment = backup_default_environment
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it "Set configurations" do
|
25
|
+
begin
|
26
|
+
backup_configurations = Config.configurations
|
27
|
+
Config.configurations = { Config.default_environment => { :username => "direct", :password => "direct" } }
|
28
|
+
Config.config.username.should eql "direct"
|
29
|
+
Config.config.password.should eql "direct"
|
30
|
+
Config.config.signature.should be_nil
|
31
|
+
ensure
|
32
|
+
Config.configurations = backup_configurations
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Configure with parameters" do
|
37
|
+
begin
|
38
|
+
backup_configurations = Config.configurations
|
39
|
+
Config.configurations = nil
|
40
|
+
Config.configure( :username => "Testing" )
|
41
|
+
Config.config.username.should eql "Testing"
|
42
|
+
Config.config.app_id.should be_nil
|
43
|
+
ensure
|
44
|
+
Config.configurations = backup_configurations
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "Configure with block" do
|
49
|
+
begin
|
50
|
+
backup_configurations = Config.configurations
|
51
|
+
Config.configurations = nil
|
52
|
+
Config.configure do |config|
|
53
|
+
config.username = "Testing"
|
54
|
+
end
|
55
|
+
Config.config.username.should eql "Testing"
|
56
|
+
Config.config.app_id.should be_nil
|
57
|
+
ensure
|
58
|
+
Config.configurations = backup_configurations
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it "Configure with default values" do
|
63
|
+
begin
|
64
|
+
backup_configurations = Config.configurations
|
65
|
+
default_config = Config.config
|
66
|
+
Config.configure do |config|
|
67
|
+
config.username = "Testing"
|
68
|
+
end
|
69
|
+
Config.config.username.should eql "Testing"
|
70
|
+
Config.config.app_id.should_not be_nil
|
71
|
+
Config.config.app_id.should eql default_config.app_id
|
72
|
+
ensure
|
73
|
+
Config.configurations = backup_configurations
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it "validate configuration" do
|
78
|
+
config = Config.new( :username => "XYZ")
|
79
|
+
lambda {
|
80
|
+
config.required!(:username)
|
81
|
+
}.should_not raise_error
|
82
|
+
lambda {
|
83
|
+
config.required!(:password)
|
84
|
+
}.should raise_error "Required configuration(password)"
|
85
|
+
lambda {
|
86
|
+
config.required!(:username, :password)
|
87
|
+
}.should raise_error "Required configuration(password)"
|
88
|
+
lambda {
|
89
|
+
config.required!(:password, :signature)
|
90
|
+
}.should raise_error "Required configuration(password, signature)"
|
91
|
+
end
|
92
|
+
|
93
|
+
it "return default environment configuration" do
|
94
|
+
Config.config.should be_a Config
|
95
|
+
end
|
96
|
+
|
97
|
+
it "return configuration based on environment" do
|
98
|
+
Config.config(:development).should be_a Config
|
99
|
+
end
|
100
|
+
|
101
|
+
it "override default configuration" do
|
102
|
+
override_configuration = { :username => "test.example.com", :app_id => "test"}
|
103
|
+
config = Config.config(override_configuration)
|
104
|
+
|
105
|
+
config.username.should eql(override_configuration[:username])
|
106
|
+
config.app_id.should eql(override_configuration[:app_id])
|
107
|
+
end
|
108
|
+
|
109
|
+
it "get cached config" do
|
110
|
+
Config.config(:test).should eql Config.config(:test)
|
111
|
+
Config.config(:test).should_not eql Config.config(:development)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should raise error on invalid environment" do
|
115
|
+
lambda {
|
116
|
+
Config.config(:invalid_env)
|
117
|
+
}.should raise_error "Configuration[invalid_env] NotFound"
|
118
|
+
end
|
119
|
+
|
120
|
+
it "set logger" do
|
121
|
+
require 'logger'
|
122
|
+
my_logger = Logger.new(STDERR)
|
123
|
+
Config.logger = my_logger
|
124
|
+
Config.logger.should eql my_logger
|
125
|
+
end
|
126
|
+
|
127
|
+
it "Access PayPal::SDK methods" do
|
128
|
+
PayPal::SDK.configure.should eql PayPal::SDK::Core::Config.config
|
129
|
+
PayPal::SDK.logger.should eql PayPal::SDK::Core::Config.logger
|
130
|
+
PayPal::SDK.logger = PayPal::SDK.logger
|
131
|
+
PayPal::SDK.logger.should eql PayPal::SDK::Core::Config.logger
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "include Configuration" do
|
135
|
+
class TestConfig
|
136
|
+
include PayPal::SDK::Core::Configuration
|
137
|
+
end
|
138
|
+
|
139
|
+
it "Get default configuration" do
|
140
|
+
test_object = TestConfig.new
|
141
|
+
test_object.config.should be_a Config
|
142
|
+
end
|
143
|
+
|
144
|
+
it "Change environment" do
|
145
|
+
test_object = TestConfig.new
|
146
|
+
test_object.set_config("test")
|
147
|
+
test_object.config.should eql Config.config("test")
|
148
|
+
test_object.config.should_not eql Config.config("development")
|
149
|
+
end
|
150
|
+
|
151
|
+
it "Override environment configuration" do
|
152
|
+
test_object = TestConfig.new
|
153
|
+
test_object.set_config("test", :username => "test")
|
154
|
+
test_object.config.should_not eql Config.config("test")
|
155
|
+
end
|
156
|
+
|
157
|
+
it "Override default/current configuration" do
|
158
|
+
test_object = TestConfig.new
|
159
|
+
test_object.set_config( :username => "test")
|
160
|
+
test_object.config.username.should eql "test"
|
161
|
+
test_object.set_config( :password => "test")
|
162
|
+
test_object.config.password.should eql "test"
|
163
|
+
test_object.config.username.should eql "test"
|
164
|
+
end
|
165
|
+
|
166
|
+
it "Append ssl_options" do
|
167
|
+
test_object = TestConfig.new
|
168
|
+
test_object.set_config( :ssl_options => { :ca_file => "test_path" } )
|
169
|
+
test_object.config.ssl_options[:ca_file].should eql "test_path"
|
170
|
+
test_object.set_config( :ssl_options => { :verify_mode => 1 } )
|
171
|
+
test_object.config.ssl_options[:verify_mode].should eql 1
|
172
|
+
test_object.config.ssl_options[:ca_file].should eql "test_path"
|
173
|
+
end
|
174
|
+
|
175
|
+
it "Set configuration without loading configuration File" do
|
176
|
+
backup_configurations = Config.configurations
|
177
|
+
begin
|
178
|
+
Config.configurations = nil
|
179
|
+
test_object = TestConfig.new
|
180
|
+
lambda {
|
181
|
+
test_object.config
|
182
|
+
}.should raise_error
|
183
|
+
test_object.set_config( :username => "test" )
|
184
|
+
test_object.config.should be_a Config
|
185
|
+
ensure
|
186
|
+
Config.configurations = backup_configurations
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|