maestrano 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +17 -8
- data/LICENSE +1 -1
- data/README.md +91 -14
- data/lib/maestrano/account/bill.rb +1 -1
- data/lib/maestrano/account/recurring_bill.rb +1 -1
- data/lib/maestrano/api/object.rb +1 -0
- data/lib/maestrano/api/operation/base.rb +13 -15
- data/lib/maestrano/api/operation/create.rb +1 -1
- data/lib/maestrano/api/operation/delete.rb +1 -1
- data/lib/maestrano/api/operation/list.rb +1 -1
- data/lib/maestrano/api/operation/update.rb +1 -1
- data/lib/maestrano/connec/client.rb +6 -5
- data/lib/maestrano/preset.rb +23 -0
- data/lib/maestrano/saml/request.rb +4 -3
- data/lib/maestrano/saml/response.rb +3 -2
- data/lib/maestrano/sso/base_user.rb +3 -2
- data/lib/maestrano/sso/session.rb +3 -2
- data/lib/maestrano/sso.rb +18 -17
- data/lib/maestrano/version.rb +1 -1
- data/lib/maestrano.rb +59 -8
- data/test/maestrano/account/bill_test.rb +54 -13
- data/test/maestrano/account/user_test.rb +20 -0
- data/test/maestrano/connec/client_test.rb +210 -66
- data/test/maestrano/maestrano_test.rb +141 -4
- data/test/maestrano/saml/response_test.rb +83 -0
- data/test/maestrano/sso/session_test.rb +61 -0
- data/test/maestrano/sso_test.rb +246 -85
- metadata +4 -3
data/lib/maestrano.rb
CHANGED
@@ -9,6 +9,9 @@ require 'maestrano/open_struct'
|
|
9
9
|
# Version
|
10
10
|
require 'maestrano/version'
|
11
11
|
|
12
|
+
# Multiple providers support
|
13
|
+
require 'maestrano/preset'
|
14
|
+
|
12
15
|
# XMLSecurity
|
13
16
|
require 'maestrano/xml_security/signed_document'
|
14
17
|
|
@@ -58,16 +61,18 @@ require 'maestrano/account/recurring_bill'
|
|
58
61
|
require 'maestrano/connec/client'
|
59
62
|
|
60
63
|
module Maestrano
|
64
|
+
include Preset
|
61
65
|
|
62
66
|
class << self
|
63
|
-
attr_accessor :
|
67
|
+
attr_accessor :configs
|
64
68
|
end
|
65
69
|
|
66
70
|
# Maestrano Configuration block
|
67
71
|
def self.configure
|
68
|
-
self.
|
69
|
-
|
70
|
-
|
72
|
+
self.configs ||= {}
|
73
|
+
self.configs[preset] ||= Configuration.new
|
74
|
+
yield(configs[preset])
|
75
|
+
self.configs[preset].post_initialize
|
71
76
|
return self
|
72
77
|
end
|
73
78
|
|
@@ -85,7 +90,7 @@ module Maestrano
|
|
85
90
|
# 'virtual': then the virtual user uid is returned (usr-4d5sfd.cld-g4f5d)
|
86
91
|
def self.mask_user(user_uid,group_uid)
|
87
92
|
sanitized_user_uid = self.unmask_user(user_uid)
|
88
|
-
if
|
93
|
+
if self.param('sso.creation_mode') == 'virtual'
|
89
94
|
return "#{sanitized_user_uid}.#{group_uid}"
|
90
95
|
else
|
91
96
|
return sanitized_user_uid
|
@@ -102,8 +107,9 @@ module Maestrano
|
|
102
107
|
# E.g:
|
103
108
|
# Maestrano.param('api.key')
|
104
109
|
# Maestrano.param(:api_key)
|
110
|
+
# Maestrano['preset'].param('api.key')
|
105
111
|
def self.param(parameter)
|
106
|
-
self.
|
112
|
+
(self.configs[preset] || Configuration.new).param(parameter)
|
107
113
|
end
|
108
114
|
|
109
115
|
# Return a hash describing the current
|
@@ -118,7 +124,7 @@ module Maestrano
|
|
118
124
|
blacklist = ['api.key','api.token']
|
119
125
|
|
120
126
|
config_groups.each do |cgroup_name|
|
121
|
-
cgroup = self.
|
127
|
+
cgroup = self.configs[preset].send(cgroup_name)
|
122
128
|
|
123
129
|
attr_list = cgroup.attributes.map(&:to_s)
|
124
130
|
attr_list += Configuration::EVT_CONFIG[hash['environment']].keys.select { |k| k =~ Regexp.new("^#{cgroup_name}\.") }.map { |k| k.gsub(Regexp.new("^#{cgroup_name}\."),'') }
|
@@ -149,7 +155,7 @@ module Maestrano
|
|
149
155
|
end
|
150
156
|
|
151
157
|
class Configuration
|
152
|
-
attr_accessor :environment, :app, :sso, :api, :webhook
|
158
|
+
attr_accessor :environment, :app, :sso, :api, :webhook, :connec
|
153
159
|
|
154
160
|
def initialize
|
155
161
|
@environment = 'test'
|
@@ -191,6 +197,11 @@ module Maestrano
|
|
191
197
|
subscriptions: {}
|
192
198
|
})
|
193
199
|
})
|
200
|
+
|
201
|
+
# Connec! Config
|
202
|
+
@connec = OpenStruct.new({
|
203
|
+
enabled: true
|
204
|
+
})
|
194
205
|
end
|
195
206
|
|
196
207
|
# Force or default certain parameters
|
@@ -259,9 +270,29 @@ module Maestrano
|
|
259
270
|
end
|
260
271
|
|
261
272
|
EVT_CONFIG = {
|
273
|
+
'local' => {
|
274
|
+
'api.host' => 'http://application.maestrano.io',
|
275
|
+
'api.base' => '/api/v1/',
|
276
|
+
'connec.enabled' => true,
|
277
|
+
'connec.host' => 'http://connec.maestrano.io',
|
278
|
+
'connec.base_path' => '/api',
|
279
|
+
'connec.v2_path' => '/v2',
|
280
|
+
'connec.reports_path' => '/reports',
|
281
|
+
'connec.timeout' => 60,
|
282
|
+
'sso.idp' => 'http://application.maestrano.io',
|
283
|
+
'sso.name_id_format' => Maestrano::Saml::Settings::NAMEID_PERSISTENT,
|
284
|
+
'sso.x509_fingerprint' => '01:06:15:89:25:7d:78:12:28:a6:69:c7:de:63:ed:74:21:f9:f5:36',
|
285
|
+
'sso.x509_certificate' => "-----BEGIN CERTIFICATE-----\nMIIDezCCAuSgAwIBAgIJAOehBr+YIrhjMA0GCSqGSIb3DQEBBQUAMIGGMQswCQYD\nVQQGEwJBVTEMMAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxGjAYBgNVBAoT\nEU1hZXN0cmFubyBQdHkgTHRkMRYwFAYDVQQDEw1tYWVzdHJhbm8uY29tMSQwIgYJ\nKoZIhvcNAQkBFhVzdXBwb3J0QG1hZXN0cmFuby5jb20wHhcNMTQwMTA0MDUyMjM5\nWhcNMzMxMjMwMDUyMjM5WjCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEP\nMA0GA1UEBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQG\nA1UEAxMNbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVz\ndHJhbm8uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVkIqo5t5Paflu\nP2zbSbzxn29n6HxKnTcsubycLBEs0jkTkdG7seF1LPqnXl8jFM9NGPiBFkiaR15I\n5w482IW6mC7s8T2CbZEL3qqQEAzztEPnxQg0twswyIZWNyuHYzf9fw0AnohBhGu2\n28EZWaezzT2F333FOVGSsTn1+u6tFwIDAQABo4HuMIHrMB0GA1UdDgQWBBSvrNxo\neHDm9nhKnkdpe0lZjYD1GzCBuwYDVR0jBIGzMIGwgBSvrNxoeHDm9nhKnkdpe0lZ\njYD1G6GBjKSBiTCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UE\nBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQGA1UEAxMN\nbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVzdHJhbm8u\nY29tggkA56EGv5giuGMwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCc\nMPgV0CpumKRMulOeZwdpnyLQI/NTr3VVHhDDxxCzcB0zlZ2xyDACGnIG2cQJJxfc\n2GcsFnb0BMw48K6TEhAaV92Q7bt1/TYRvprvhxUNMX2N8PHaYELFG2nWfQ4vqxES\nRkjkjqy+H7vir/MOF3rlFjiv5twAbDKYHXDT7v1YCg==\n-----END CERTIFICATE-----"
|
286
|
+
},
|
262
287
|
'test' => {
|
263
288
|
'api.host' => 'http://api-sandbox.maestrano.io',
|
264
289
|
'api.base' => '/api/v1/',
|
290
|
+
'connec.enabled' => true,
|
291
|
+
'connec.host' => 'http://api-sandbox.maestrano.io',
|
292
|
+
'connec.base_path' => '/connec/api',
|
293
|
+
'connec.v2_path' => '/v2',
|
294
|
+
'connec.reports_path' => '/reports',
|
295
|
+
'connec.timeout' => 60,
|
265
296
|
'sso.idp' => 'https://maestrano.com',
|
266
297
|
'sso.name_id_format' => Maestrano::Saml::Settings::NAMEID_PERSISTENT,
|
267
298
|
'sso.x509_fingerprint' => '01:06:15:89:25:7d:78:12:28:a6:69:c7:de:63:ed:74:21:f9:f5:36',
|
@@ -269,9 +300,29 @@ module Maestrano
|
|
269
300
|
'connec.host' => 'http://api-sandbox.maestrano.io',
|
270
301
|
'connec.base_path' => '/connec/api/v2'
|
271
302
|
},
|
303
|
+
'uat' => {
|
304
|
+
'api.host' => 'https://uat.maestrano.io',
|
305
|
+
'api.base' => '/api/v1/',
|
306
|
+
'connec.enabled' => true,
|
307
|
+
'connec.host' => 'https://api-connec-uat.maestrano.io',
|
308
|
+
'connec.base_path' => '/api',
|
309
|
+
'connec.v2_path' => '/v2',
|
310
|
+
'connec.reports_path' => '/reports',
|
311
|
+
'connec.timeout' => 180,
|
312
|
+
'sso.idp' => 'https://uat.maestrano.io',
|
313
|
+
'sso.name_id_format' => Maestrano::Saml::Settings::NAMEID_PERSISTENT,
|
314
|
+
'sso.x509_fingerprint' => '8a:1e:2e:76:c4:67:80:68:6c:81:18:f7:d3:29:5d:77:f8:79:54:2f',
|
315
|
+
'sso.x509_certificate' => "-----BEGIN CERTIFICATE-----\nMIIDezCCAuSgAwIBAgIJAMzy+weDPp7qMA0GCSqGSIb3DQEBBQUAMIGGMQswCQYD\nVQQGEwJBVTEMMAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxGjAYBgNVBAoT\nEU1hZXN0cmFubyBQdHkgTHRkMRYwFAYDVQQDEw1tYWVzdHJhbm8uY29tMSQwIgYJ\nKoZIhvcNAQkBFhVzdXBwb3J0QG1hZXN0cmFuby5jb20wHhcNMTQwMTA0MDUyMzE0\nWhcNMzMxMjMwMDUyMzE0WjCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEP\nMA0GA1UEBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQG\nA1UEAxMNbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVz\ndHJhbm8uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+2uyQeAOc/iro\nhCyT33RkkWfTGeJ8E/mu9F5ORWoCZ/h2J+QDuzuc69Rf1LoO4wZVQ8LBeWOqMBYz\notYFUIPlPfIBXDNL/stHkpg28WLDpoJM+46WpTAgp89YKgwdAoYODHiUOcO/uXOO\n2i9Ekoa+kxbvBzDJf7uuR/io6GERXwIDAQABo4HuMIHrMB0GA1UdDgQWBBTGRDBT\nie5+fHkB0+SZ5g3WY/D2RTCBuwYDVR0jBIGzMIGwgBTGRDBTie5+fHkB0+SZ5g3W\nY/D2RaGBjKSBiTCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UE\nBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQGA1UEAxMN\nbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVzdHJhbm8u\nY29tggkAzPL7B4M+nuowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAw\nRxg3rZrML//xbsS3FFXguzXiiNQAvA4KrMWhGh3jVrtzAlN1/okFNy6zuN8gzdKD\nYw2n0c/u3cSpUutIVZOkwQuPCMC1hoP7Ilat6icVewNcHayLBxKgRxpBhr5Sc4av\n3HOW5Bi/eyC7IjeBTbTnpziApEC7uUsBou2rlKmTGw==\n-----END CERTIFICATE-----"
|
316
|
+
},
|
272
317
|
'production' => {
|
273
318
|
'api.host' => 'https://maestrano.com',
|
274
319
|
'api.base' => '/api/v1/',
|
320
|
+
'connec.enabled' => true,
|
321
|
+
'connec.host' => 'https://api-connec.maestrano.io',
|
322
|
+
'connec.base_path' => '/api',
|
323
|
+
'connec.v2_path' => '/v2',
|
324
|
+
'connec.reports_path' => '/reports',
|
325
|
+
'connec.timeout' => 180,
|
275
326
|
'sso.idp' => 'https://maestrano.com',
|
276
327
|
'sso.name_id_format' => Maestrano::Saml::Settings::NAMEID_PERSISTENT,
|
277
328
|
'sso.x509_fingerprint' => '2f:57:71:e4:40:19:57:37:a6:2c:f0:c5:82:52:2f:2e:41:b7:9d:7e',
|
@@ -28,20 +28,61 @@ module Maestrano
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
context 'without presets' do
|
32
|
+
should "should successfully create a remote bill when passed correct parameters" do
|
33
|
+
@api_mock.expects(:post).with do |url, api_token, params|
|
34
|
+
url == "#{Maestrano.param('api.host')}#{Maestrano.param('api.base')}account/bills" && api_token.nil? &&
|
35
|
+
CGI.parse(params) == {"group_id"=>["cld-1"], "price_cents"=>["23000"], "currency"=>["AUD"], "description"=>["Some bill"]}
|
36
|
+
end.once.returns(test_response(test_account_bill))
|
31
37
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
38
|
+
bill = Maestrano::Account::Bill.create({
|
39
|
+
group_id: 'cld-1',
|
40
|
+
price_cents: 23000,
|
41
|
+
currency: 'AUD',
|
42
|
+
description: 'Some bill'
|
43
|
+
})
|
44
|
+
assert bill.id
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'with presets' do
|
49
|
+
setup do
|
50
|
+
@preset = 'mypreset'
|
51
|
+
Maestrano.configure do |config|
|
52
|
+
config.environment = 'production'
|
53
|
+
config.api.host = 'https://maestrano.com'
|
54
|
+
config.api.base = '/api'
|
55
|
+
end
|
56
|
+
Maestrano[@preset].configure do |config|
|
57
|
+
config.environment = 'production'
|
58
|
+
config.api.host = 'https://myprovider.com'
|
59
|
+
config.api.base = '/myapi'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
should "should successfully create a remote bill when passed correct parameters" do
|
64
|
+
@api_mock.expects(:post).with do |url, api_token, params|
|
65
|
+
url == "#{Maestrano[@preset].param('api.host')}#{Maestrano[@preset].param('api.base')}account/bills" && api_token.nil? &&
|
66
|
+
CGI.parse(params) == {"group_id"=>["cld-1"], "price_cents"=>["23000"], "currency"=>["AUD"], "description"=>["Some bill"]}
|
67
|
+
end.once.returns(test_response(test_account_bill))
|
68
|
+
|
69
|
+
bill = Maestrano::Account::Bill[@preset].create({
|
70
|
+
group_id: 'cld-1',
|
71
|
+
price_cents: 23000,
|
72
|
+
currency: 'AUD',
|
73
|
+
description: 'Some bill'
|
74
|
+
})
|
75
|
+
assert bill.id
|
76
|
+
end
|
77
|
+
|
78
|
+
should "should successfully list remote bills" do
|
79
|
+
@api_mock.expects(:get).with do |url, api_token|
|
80
|
+
url == "#{Maestrano[@preset].param('api.host')}#{Maestrano[@preset].param('api.base')}account/bills" && api_token.nil?
|
81
|
+
end.once.returns(test_response(test_account_bill_array))
|
82
|
+
|
83
|
+
bills = Maestrano::Account::Bill[@preset].all
|
84
|
+
assert bills
|
85
|
+
end
|
45
86
|
end
|
46
87
|
end
|
47
88
|
end
|
@@ -28,6 +28,26 @@ module Maestrano
|
|
28
28
|
c = Maestrano::Account::User.create({name: "Bla"})
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
context 'with presets' do
|
33
|
+
setup do
|
34
|
+
@preset = 'mypreset'
|
35
|
+
Maestrano[@preset].configure do |config|
|
36
|
+
config.environment = 'production'
|
37
|
+
config.api.host = 'https://myprovider.com'
|
38
|
+
config.api.base = '/myapi'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
should "should successfully list remote users" do
|
43
|
+
@api_mock.expects(:get).with do |url, api_token|
|
44
|
+
url == "#{Maestrano[@preset].param('api.host')}#{Maestrano[@preset].param('api.base')}account/users" && api_token.nil?
|
45
|
+
end.once.returns(test_response(test_account_user_array))
|
46
|
+
|
47
|
+
bills = Maestrano::Account::User[@preset].all
|
48
|
+
assert bills
|
49
|
+
end
|
50
|
+
end
|
31
51
|
end
|
32
52
|
end
|
33
53
|
end
|
@@ -4,89 +4,233 @@ module Maestrano
|
|
4
4
|
module Connec
|
5
5
|
class ClientTest < Test::Unit::TestCase
|
6
6
|
|
7
|
-
context '
|
8
|
-
context '
|
9
|
-
context '
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
context 'without preset' do
|
8
|
+
context 'initializer' do
|
9
|
+
context '.base_uri' do
|
10
|
+
context 'in test' do
|
11
|
+
setup { Maestrano.configs = {}; Maestrano.configure { |config| config.environment = 'test' } }
|
12
|
+
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
13
|
+
|
14
|
+
should "return the right uri" do
|
15
|
+
assert_equal "http://api-sandbox.maestrano.io/connec/api/v2", Maestrano::Connec::Client.base_uri
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'in production' do
|
20
|
+
setup { Maestrano.configs = {}; Maestrano.configure { |config| config.environment = 'production' } }
|
21
|
+
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
22
|
+
|
23
|
+
should "return the right uri" do
|
24
|
+
assert_equal "https://api-connec.maestrano.com/api/v2", Maestrano::Connec::Client.base_uri
|
25
|
+
end
|
15
26
|
end
|
16
27
|
end
|
28
|
+
end
|
17
29
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
30
|
+
context 'scoped_path' do
|
31
|
+
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
32
|
+
|
33
|
+
should "return the right scoped path" do
|
34
|
+
assert_equal "/cld-123/people", @client.scoped_path('/people')
|
35
|
+
end
|
36
|
+
|
37
|
+
should "remove any leading or trailing slash" do
|
38
|
+
assert_equal "/cld-123/people", @client.scoped_path('/people/')
|
25
39
|
end
|
26
40
|
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'scoped_path' do
|
30
|
-
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
31
41
|
|
32
|
-
|
33
|
-
|
42
|
+
context 'default_options' do
|
43
|
+
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
44
|
+
|
45
|
+
should "return the right authentication options" do
|
46
|
+
expected_opts = {
|
47
|
+
basic_auth: {
|
48
|
+
username: Maestrano.param('api.id'),
|
49
|
+
password: Maestrano.param('api.key')
|
50
|
+
},
|
51
|
+
timeout: Maestrano.param('connec.timeout')
|
52
|
+
}
|
53
|
+
assert_equal expected_opts, @client.default_options
|
54
|
+
end
|
34
55
|
end
|
35
56
|
|
36
|
-
|
37
|
-
|
57
|
+
context 'get' do
|
58
|
+
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
59
|
+
|
60
|
+
should "perform the right query" do
|
61
|
+
path = '/people'
|
62
|
+
opts = { foo: 'bar' }
|
63
|
+
resp = mock('resp')
|
64
|
+
Maestrano::Connec::Client.expects(:get).with(@client.scoped_path(path),@client.default_options.merge(opts)).returns(resp)
|
65
|
+
assert_equal resp, @client.get(path,opts)
|
66
|
+
end
|
38
67
|
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'default_options' do
|
42
|
-
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
43
68
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
}
|
50
|
-
|
51
|
-
|
69
|
+
context 'post' do
|
70
|
+
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
71
|
+
|
72
|
+
should "perform the right query" do
|
73
|
+
path = '/people'
|
74
|
+
body = { some: 'data'}
|
75
|
+
opts = { foo: 'bar' }
|
76
|
+
resp = mock('resp')
|
77
|
+
Maestrano::Connec::Client.expects(:post).with(@client.scoped_path(path),@client.default_options.merge(body: body.to_json).merge(opts)).returns(resp)
|
78
|
+
assert_equal resp, @client.post(path,body,opts)
|
79
|
+
end
|
52
80
|
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context 'get' do
|
56
|
-
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
57
81
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
82
|
+
context 'put' do
|
83
|
+
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
84
|
+
|
85
|
+
should "perform the right query" do
|
86
|
+
path = '/people/123'
|
87
|
+
body = { some: 'data'}
|
88
|
+
opts = { foo: 'bar' }
|
89
|
+
resp = mock('resp')
|
90
|
+
Maestrano::Connec::Client.expects(:put).with(@client.scoped_path(path),@client.default_options.merge(body: body.to_json).merge(opts)).returns(resp)
|
91
|
+
assert_equal resp, @client.put(path,body,opts)
|
92
|
+
end
|
64
93
|
end
|
65
94
|
end
|
66
|
-
|
67
|
-
context '
|
68
|
-
setup
|
95
|
+
|
96
|
+
context 'with preset' do
|
97
|
+
setup do
|
98
|
+
@preset = 'mypreset'
|
99
|
+
|
100
|
+
@config = {
|
101
|
+
'environment' => 'production',
|
102
|
+
'app.host' => 'http://mysuperapp.com',
|
103
|
+
|
104
|
+
'api.id' => 'app-f54ds4f8',
|
105
|
+
'api.key' => 'someapikey',
|
106
|
+
|
107
|
+
'connec.enabled' => true,
|
108
|
+
'connec.host' => 'https://connec-api.com',
|
109
|
+
'connec.base_path' => '/api'
|
110
|
+
}
|
111
|
+
|
112
|
+
@preset_config = {
|
113
|
+
'environment' => 'production',
|
114
|
+
'app.host' => 'http://myotherapp.com',
|
115
|
+
|
116
|
+
'api.id' => 'app-553941',
|
117
|
+
'api.key' => 'otherapikey',
|
118
|
+
|
119
|
+
'connec.enabled' => true,
|
120
|
+
'connec.host' => 'https://other-provider.com',
|
121
|
+
'connec.base_path' => '/data'
|
122
|
+
}
|
123
|
+
|
124
|
+
Maestrano.configure do |config|
|
125
|
+
config.environment = @config['environment']
|
126
|
+
config.app.host = @config['app.host']
|
127
|
+
|
128
|
+
config.api.id = @config['api.id']
|
129
|
+
config.api.key = @config['api.key']
|
130
|
+
|
131
|
+
config.connec.enabled = @config['connec.enabled']
|
132
|
+
config.connec.host = @config['connec.host']
|
133
|
+
config.connec.base_path = @config['connec.base_path']
|
134
|
+
end
|
69
135
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
136
|
+
Maestrano[@preset].configure do |config|
|
137
|
+
config.environment = @preset_config['environment']
|
138
|
+
config.app.host = @preset_config['app.host']
|
139
|
+
|
140
|
+
config.api.id = @preset_config['api.id']
|
141
|
+
config.api.key = @preset_config['api.key']
|
142
|
+
|
143
|
+
config.connec.enabled = @preset_config['connec.enabled']
|
144
|
+
config.connec.host = @preset_config['connec.host']
|
145
|
+
config.connec.base_path = @preset_config['connec.base_path']
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'initializer' do
|
150
|
+
context '.base_uri' do
|
151
|
+
context 'in test' do
|
152
|
+
setup { Maestrano[@preset].configure { |config| config.environment = 'test' } }
|
153
|
+
setup { @client = Maestrano::Connec::Client[@preset].new("cld-123") }
|
154
|
+
|
155
|
+
should "return the right uri" do
|
156
|
+
assert_equal "https://other-provider.com/data", Maestrano::Connec::Client[@preset].base_uri
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context 'in production' do
|
161
|
+
setup { Maestrano[@preset].configure { |config| config.environment = 'production' } }
|
162
|
+
setup { @client = Maestrano::Connec::Client[@preset].new("cld-123") }
|
163
|
+
|
164
|
+
should "return the right uri" do
|
165
|
+
assert_equal "https://other-provider.com/data", Maestrano::Connec::Client[@preset].base_uri
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
77
169
|
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'put' do
|
81
|
-
setup { @client = Maestrano::Connec::Client.new("cld-123") }
|
82
170
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
171
|
+
context 'scoped_path' do
|
172
|
+
setup { @client = Maestrano::Connec::Client[@preset].new("cld-123") }
|
173
|
+
|
174
|
+
should "return the right scoped path" do
|
175
|
+
assert_equal "/cld-123/people", @client.scoped_path('/people')
|
176
|
+
end
|
177
|
+
|
178
|
+
should "remove any leading or trailing slash" do
|
179
|
+
assert_equal "/cld-123/people", @client.scoped_path('/people/')
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
context 'default_options' do
|
184
|
+
setup { @client = Maestrano::Connec::Client[@preset].new("cld-123") }
|
185
|
+
|
186
|
+
should "return the right authentication options" do
|
187
|
+
expected_opts = {
|
188
|
+
basic_auth: {
|
189
|
+
username: Maestrano[@preset].param('api.id'),
|
190
|
+
password: Maestrano[@preset].param('api.key')
|
191
|
+
},
|
192
|
+
timeout: Maestrano[@preset].param('connec.timeout')
|
193
|
+
}
|
194
|
+
assert_equal expected_opts, @client.default_options
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
context 'get' do
|
199
|
+
setup { @client = Maestrano::Connec::Client[@preset].new("cld-123") }
|
200
|
+
|
201
|
+
should "perform the right query" do
|
202
|
+
path = '/people'
|
203
|
+
opts = { foo: 'bar' }
|
204
|
+
resp = mock('resp')
|
205
|
+
Maestrano::Connec::Client[@preset].expects(:get).with(@client.scoped_path(path),@client.default_options.merge(opts)).returns(resp)
|
206
|
+
assert_equal resp, @client.get(path,opts)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
context 'post' do
|
211
|
+
setup { @client = Maestrano::Connec::Client[@preset].new("cld-123") }
|
212
|
+
|
213
|
+
should "perform the right query" do
|
214
|
+
path = '/people'
|
215
|
+
body = { some: 'data'}
|
216
|
+
opts = { foo: 'bar' }
|
217
|
+
resp = mock('resp')
|
218
|
+
Maestrano::Connec::Client[@preset].expects(:post).with(@client.scoped_path(path),@client.default_options.merge(body: body.to_json).merge(opts)).returns(resp)
|
219
|
+
assert_equal resp, @client.post(path,body,opts)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'put' do
|
224
|
+
setup { @client = Maestrano::Connec::Client[@preset].new("cld-123") }
|
225
|
+
|
226
|
+
should "perform the right query" do
|
227
|
+
path = '/people/123'
|
228
|
+
body = { some: 'data'}
|
229
|
+
opts = { foo: 'bar' }
|
230
|
+
resp = mock('resp')
|
231
|
+
Maestrano::Connec::Client[@preset].expects(:put).with(@client.scoped_path(path),@client.default_options.merge(body: body.to_json).merge(opts)).returns(resp)
|
232
|
+
assert_equal resp, @client.put(path,body,opts)
|
233
|
+
end
|
90
234
|
end
|
91
235
|
end
|
92
236
|
end
|