plangrade-ruby 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,79 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../../spec_helper', __FILE__)
21
+ require 'ostruct'
22
+
23
+ describe Plangrade::Api::Participant do
24
+
25
+ before :all do
26
+ @client = Plangrade::Client.new(
27
+ :site_url => 'https://plangrade.com',
28
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
29
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
30
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
31
+ )
32
+ end
33
+
34
+ subject { @client }
35
+
36
+ describe 'create_participant' do
37
+ it 'makes an http request' do
38
+ params = {:company_id => 1, :employee_id => 0, :ssn => '1234', :first_name => 'Joe', :last_name => 'Compliance', :street1 => '1234 Fake St.', :city => 'Fake', :state => 'UT', :zip => '84606', :dob => '1983-12-31', :email => 'compliance@plangrade.com', :phone => 1234567890}
39
+ @client.should_receive(:post).with('/api/v1/participants', params)
40
+ @client.create_participant(params)
41
+ end
42
+ end
43
+
44
+ describe 'update_participant' do
45
+ it 'makes an http request' do
46
+ params = {:employee_id => 0, :first_name => 'John'}
47
+ @client.should_receive(:put).with('/api/v1/participants/1', params)
48
+ @client.update_participant(1, params)
49
+ end
50
+ end
51
+
52
+ describe 'archive_participant' do
53
+ it 'makes an http request' do
54
+ @client.should_receive(:get).with('/api/v1/participants/archive?participant_id=1')
55
+ @client.archive_participant(1)
56
+ end
57
+ end
58
+
59
+ describe 'delete_participant' do
60
+ it 'makes an http request' do
61
+ @client.should_receive(:delete).with('/api/v1/participants/1')
62
+ @client.delete_participant(1)
63
+ end
64
+ end
65
+
66
+ describe 'get_participant' do
67
+ it 'makes an http request' do
68
+ @client.should_receive(:get).with('/api/v1/participants/1')
69
+ @client.get_participant(1)
70
+ end
71
+ end
72
+
73
+ describe 'all_participants' do
74
+ it 'makes an http request' do
75
+ @client.should_receive(:get).with('/api/v1/participants?company_id=1')
76
+ @client.all_participants(:company_id => 1)
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,65 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../../spec_helper', __FILE__)
21
+ require 'ostruct'
22
+
23
+ describe Plangrade::Api::User do
24
+
25
+ before :all do
26
+ @client = Plangrade::Client.new(
27
+ :site_url => 'https://plangrade.com',
28
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
29
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
30
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
31
+ )
32
+ end
33
+
34
+ subject { @client }
35
+
36
+ describe 'create_user' do
37
+ it 'makes an http request' do
38
+ params = {:name => 'topher', :email => 'compliance@plangrade.com'}
39
+ @client.should_receive(:post).with('/api/v1/users', params)
40
+ @client.create_user(params)
41
+ end
42
+ end
43
+
44
+ describe 'update_user' do
45
+ it 'makes an http request' do
46
+ params = {:name => 'christopher'}
47
+ @client.should_receive(:put).with('/api/v1/users/1', params)
48
+ @client.update_user(1, params)
49
+ end
50
+ end
51
+
52
+ describe 'delete_user' do
53
+ it 'makes an http request' do
54
+ @client.should_receive(:delete).with('/api/v1/users/1')
55
+ @client.delete_user(1)
56
+ end
57
+ end
58
+
59
+ describe 'current_user' do
60
+ it 'makes an http request' do
61
+ @client.should_receive(:get).with('/api/v1/me')
62
+ @client.current_user
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,332 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../spec_helper', __FILE__)
21
+
22
+ describe Plangrade::Client do
23
+
24
+ before :each do
25
+ @configuration = {
26
+ :site_url => 'https://plangrade.com',
27
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
28
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
29
+ :access_token => 'TolNOFka9Uls2DxahNi78A',
30
+ :connection_options => { :max_redirects => 5, :use_ssl => true },
31
+ :default_headers => {"Accept"=>"application/json", "User-Agent"=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"}
32
+ }
33
+
34
+ Plangrade.configure do |config|
35
+ @configuration.each do |key, val|
36
+ config.send("#{key}=", val)
37
+ end
38
+ end
39
+ end
40
+
41
+ after :each do
42
+ Plangrade.reset!
43
+ end
44
+
45
+ subject { Plangrade::Client.new(@configuration) }
46
+
47
+ context "with module configuration" do
48
+
49
+ before :each do
50
+ @default_conf = {
51
+ :site_url => nil,
52
+ :client_id => nil,
53
+ :client_secret => nil,
54
+ :access_token => nil,
55
+ :default_headers => {"Accept"=>"application/json", "User-Agent"=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"},
56
+ :connection_options => {}
57
+ }
58
+ Plangrade.configure do |config|
59
+ Plangrade::Configurable.keys.each do |key|
60
+ config.send("#{key}=", @default_conf[key])
61
+ end
62
+ end
63
+ end
64
+
65
+ after do
66
+ Plangrade.reset!
67
+ end
68
+
69
+ it "inherits the module configuration" do
70
+ client = Plangrade::Client.new
71
+ @default_conf.each do |key, value|
72
+ expect(client.instance_variable_get(:"@#{key}")).to eq value
73
+ end
74
+ end
75
+
76
+ context "with initialization options" do
77
+ before(:all) do
78
+ @conf = {
79
+ :site_url => 'https://plangrade.com',
80
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
81
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
82
+ :access_token => 'TolNOFka9Uls2DxahNi78A',
83
+ :default_headers => {"Accept"=>"application/json", "User-Agent"=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"},
84
+ :connection_options => { :max_redirects => 5, :use_ssl => true }
85
+ }
86
+ end
87
+
88
+ context "during initialization" do
89
+ it "overrides the module configuration" do
90
+ client = Plangrade::Client.new(@conf)
91
+ Plangrade::Configurable.keys.each do |key|
92
+ expect(client.instance_variable_get(:"@#{key}")).to eq @conf[key]
93
+ end
94
+ end
95
+ end
96
+
97
+ context "after initialization" do
98
+ it "overrides the module configuration" do
99
+ Plangrade.configure {|c| c.connection_options = {}}
100
+ client = Plangrade::Client.new
101
+ client.configure do |config|
102
+ @conf.each do |key, value|
103
+ config.send("#{key}=", value)
104
+ end
105
+ end
106
+ Plangrade::Configurable.keys.each do |key|
107
+ expect(client.instance_variable_get(:"@#{key}")).to eq @conf[key]
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+
115
+
116
+ describe "#connection_options" do
117
+ context "with default connection options" do
118
+ it "returns empty hash" do
119
+ expect(subject.connection_options).to eq({ :max_redirects => 5, :use_ssl => true })
120
+ end
121
+ end
122
+
123
+ context "with custom connection options" do
124
+ it "returns default options" do
125
+ subject.connection_options = { :max_redirects => 5, :use_ssl => true }
126
+ expect(subject.connection_options).to eq({:max_redirects => 5, :use_ssl => true})
127
+ end
128
+ end
129
+ end
130
+
131
+ describe "#request" do
132
+ context "when method is not supported" do
133
+ it "raises an error" do
134
+ expect {subject.send(:request, :patch, '/')}.to raise_error
135
+ end
136
+ end
137
+
138
+ context "when method is get" do
139
+ it "returns an http response" do
140
+ path = '/oauth/authorize'
141
+ params = {:client_id => '001337', :client_secret => 'abcxyz'}
142
+ method = :get
143
+
144
+ normalized_path = '/oauth/authorize?client_id=001337&client_secret=abcxyz'
145
+
146
+ stub_request(:get, "https://plangrade.com/oauth/authorize?client_id=001337&client_secret=abcxyz").with(
147
+ :headers => {
148
+ 'Accept'=>'application/json',
149
+ 'User-Agent'=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
150
+ })
151
+ response = subject.send(:request, method, path, params)
152
+
153
+ expect(response.code).to eq 200
154
+ end
155
+ end
156
+
157
+ context "when method is delete" do
158
+ it "returns an http response" do
159
+ path = '/users/1'
160
+
161
+ stub_request(:delete, "https://plangrade.com/users/1").with(
162
+ :headers => {
163
+ 'Accept'=>'application/json',
164
+ 'User-Agent'=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
165
+ }).to_return(:status => 200, :body => "", :headers => {})
166
+
167
+ response = subject.send(:request, :delete, path)
168
+ expect(response.code).to eq 200
169
+ end
170
+ end
171
+
172
+ context "when method is post" do
173
+ it "returns an http response" do
174
+ path = '/participants'
175
+ params = {:company_id =>1, :first_name => 'Christopher'}
176
+ query = Addressable::URI.form_encode(params)
177
+ headers = {'Content-Type' => 'application/x-www-form-urlencoded' }.merge(subject.default_headers)
178
+
179
+ stub_request(:post, "https://plangrade.com/participants").with(
180
+ :body => {
181
+ "company_id"=>"1",
182
+ "first_name"=>"Christopher"
183
+ },
184
+ :headers => {
185
+ 'Accept'=>'application/json',
186
+ 'Content-Type'=>'application/x-www-form-urlencoded',
187
+ 'User-Agent'=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
188
+ }).to_return(:status => 200, :body => "", :headers => {})
189
+
190
+ response =subject.send(:request, :post, path, params)
191
+ expect(response.code).to eq 200
192
+ end
193
+ end
194
+
195
+ context "when method is put" do
196
+ it "returns an http response" do
197
+ path = '/users/1'
198
+ params = {:name => 'christopher reynoso'}
199
+ query = Addressable::URI.form_encode(params)
200
+ headers = {'Content-Type' => 'application/x-www-form-urlencoded' }.merge(subject.default_headers)
201
+
202
+ stub_request(:put, "https://plangrade.com/users/1").with(
203
+ :body => {
204
+ "name" => "christopher reynoso"
205
+ },
206
+ :headers => {
207
+ 'Accept'=>'application/json',
208
+ 'Content-Type'=>'application/x-www-form-urlencoded',
209
+ 'Authorization'=>'Bearer TolNOFka9Uls2DxahNi78A',
210
+ 'User-Agent'=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
211
+ }).
212
+ to_return(:status => 200, :body => "", :headers => {})
213
+
214
+ response = subject.send(:request, :put, path, params)
215
+ expect(response.code).to eq 200
216
+ end
217
+ end
218
+
219
+ it "follows redirect" do
220
+ params = {:company_id => "1", :first_name => 'Christopher'}
221
+ stub_request(:post, "https://plangrade.com/participants").with(
222
+ :body => params,
223
+ :headers => {
224
+ 'Accept' =>'application/json',
225
+ 'Accept-Encoding' => 'gzip, deflate',
226
+ 'Content-Type' => 'application/x-www-form-urlencoded',
227
+ 'User-Agent' => "Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
228
+ }
229
+ ).to_return(:status => 303, :body => "", :headers => { 'Location' => 'https://plangrade.com/users'})
230
+
231
+ stub_request(:get, "https://plangrade.com/users").
232
+ with(:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'User-Agent'=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"}).
233
+ to_return(:status => 200, :body => "", :headers => {})
234
+ params = {:company_id => 1, :first_name => 'Christopher'}
235
+ response = subject.send(:request, :post, '/participants', params)
236
+
237
+ expect(response.code).to eq 200
238
+ end
239
+
240
+ it "respects the redirect limit " do
241
+ subject.connection_options = { :max_redirects => 1 }
242
+
243
+ stub_request(:get, "https://plangrade.com/participants").
244
+ with(
245
+ :headers => {
246
+ 'Accept' => 'application/json',
247
+ 'Accept-Encoding'=> 'gzip, deflate',
248
+ 'User-Agent' => "Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
249
+ }
250
+ ).to_return(:status => 301, :body => "", :headers => { 'Location' => 'https://plangrade.com/users'})
251
+
252
+ stub_request(:get, "https://plangrade.com/users").
253
+ with(
254
+ :headers => {
255
+ 'Accept' => 'application/json',
256
+ 'Accept-Encoding'=> 'gzip, deflate',
257
+ 'User-Agent' => "Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
258
+ }
259
+ ).to_return(:status => 301, :body => "", :headers => { 'Location' => 'https://plangrade.com/companies'})
260
+
261
+ expect { subject.send(:request, :get, '/participants') }.to raise_error(RestClient::MaxRedirectsReached)
262
+ end
263
+ end
264
+
265
+ context 'http request' do
266
+ describe "#post" do
267
+ it "makes an http POST request" do
268
+ stub_post('/users').with(
269
+ :headers => {
270
+ 'Accept'=>'application/json',
271
+ 'Authorization'=>'Bearer TolNOFka9Uls2DxahNi78A',
272
+ 'Content-Type'=>'application/x-www-form-urlencoded',
273
+ 'User-Agent'=>"Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
274
+ },
275
+ :body => { :name => 'christopher reynoso' }).to_return({
276
+ :status => 200, :body => "", :headers => {}
277
+ })
278
+ subject.post('/users', { :name => 'christopher reynoso'})
279
+ end
280
+ end
281
+
282
+ describe "#put" do
283
+ it "makes an http PUT request" do
284
+ stub_put('/users/1').with(
285
+ :headers => {
286
+ 'Accept'=>'application/json',
287
+ 'Authorization'=>'Bearer TolNOFka9Uls2DxahNi78A',
288
+ 'Content-Type'=>'application/x-www-form-urlencoded',
289
+ 'User-Agent'=> "Plangrade Ruby Gem #{Plangrade::Ruby::VERSION}"
290
+ },
291
+ :body => { :name => 'topher reynoso' }).to_return(
292
+ :status => 200, :body => "", :headers => {})
293
+
294
+ subject.put('/users/1', { :name => 'topher reynoso'})
295
+ end
296
+ end
297
+
298
+ describe "#get" do
299
+ it "makes an http GET request" do
300
+ stub_get('/users/1').with(:headers => { 'Authorization' => 'Bearer TolNOFka9Uls2DxahNi78A' })
301
+ subject.get('/users/1')
302
+ end
303
+ end
304
+
305
+ describe "#delete" do
306
+ it "makes an http DELETE request" do
307
+ stub_delete('/users/1').with(:headers => { 'Authorization' => 'Bearer TolNOFka9Uls2DxahNi78A' })
308
+ subject.delete('/users/1')
309
+ end
310
+ end
311
+
312
+ describe 'with invalid token' do
313
+ it 'raises exception' do
314
+ stub_get('/users/1').with(:headers => { 'Authorization' => 'Bearer TolNOFka9Uls2DxahNi78A' }).to_return(
315
+ :body => '{ "response": { "message": "Token not found.", "code": 16, "stat": "fail" } }',
316
+ :status => 401)
317
+
318
+ expect(subject.get('/users/1')).to eq('{ "response": { "message": "Token not found.", "code": 16, "stat": "fail" } }')
319
+ end
320
+ end
321
+
322
+ describe 'with too many requests' do
323
+ it 'raises exception' do
324
+ stub_get('/users/1').with(:headers => { 'Authorization' => 'Bearer TolNOFka9Uls2DxahNi78A' }).to_return(
325
+ :body => '{ "response": { "message": "Rate limited due to excessive requests.", "code": 33, "stat": "fail" } }',
326
+ :status => 429
327
+ )
328
+ expect(subject.get('/users/1')).to eq('{ "response": { "message": "Rate limited due to excessive requests.", "code": 33, "stat": "fail" } }')
329
+ end
330
+ end
331
+ end
332
+ end
@@ -0,0 +1,88 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../spec_helper', __FILE__)
21
+
22
+ describe Plangrade::Error do
23
+
24
+ subject { Plangrade::Error }
25
+
26
+ describe 'from status' do
27
+
28
+ context 'status unknown' do
29
+ it 'returns ApiError' do
30
+ expect(subject.from_status).to eq Plangrade::Error::ApiError
31
+ end
32
+ end
33
+
34
+ context 'status 400' do
35
+ it 'returns BadRequest' do
36
+ expect(subject.from_status(400)).to eq Plangrade::Error::BadRequest
37
+ end
38
+ end
39
+
40
+ context 'status 401' do
41
+ it 'returns Unauthorized' do
42
+ expect(subject.from_status(401)).to eq Plangrade::Error::Unauthorized
43
+ end
44
+ end
45
+
46
+ context 'status 403' do
47
+ it 'returns Forbidden' do
48
+ expect(subject.from_status(403)).to eq Plangrade::Error::Forbidden
49
+ end
50
+ end
51
+
52
+ context 'status 404' do
53
+ it 'returns NotFound' do
54
+ expect(subject.from_status(404)).to eq Plangrade::Error::NotFound
55
+ end
56
+ end
57
+
58
+ context 'status 406' do
59
+ it 'returns NotAcceptable' do
60
+ expect(subject.from_status(406)).to eq Plangrade::Error::NotAcceptable
61
+ end
62
+ end
63
+
64
+ context 'status 429' do
65
+ it 'returns RateLimitExceeded' do
66
+ expect(subject.from_status(429)).to eq Plangrade::Error::RateLimitExceeded
67
+ end
68
+ end
69
+
70
+ context 'status 500' do
71
+ it 'returns InternalServerError' do
72
+ expect(subject.from_status(500)).to eq Plangrade::Error::InternalServerError
73
+ end
74
+ end
75
+
76
+ context 'status 502' do
77
+ it 'returns BadGateway' do
78
+ expect(subject.from_status(502)).to eq Plangrade::Error::BadGateway
79
+ end
80
+ end
81
+
82
+ context 'status 503' do
83
+ it 'returns ServiceUnavailable' do
84
+ expect(subject.from_status(503)).to eq Plangrade::Error::ServiceUnavailable
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1 @@
1
+ {"name":"plangrade, llc","id":4,"ein":"123456789"}
File without changes
@@ -0,0 +1 @@
1
+ {"first_name":"Johnny","last_name":"Compliance","id":3,"employee_id":0,"company_id":1,"email":"compliance@plangrade.com","phone":123456789,"street1":"1234 Fake St.","street2":"","city":"Fake","state":"UT","zip":"12345","dob":"1985-12-31","ssn":"1234"}
@@ -0,0 +1 @@
1
+ {"name":"Smith","id":2,"email":"compliance@plangrade.com"}
@@ -0,0 +1,109 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../spec_helper', __FILE__)
21
+ require 'plangrade/http_adapter'
22
+
23
+ describe Plangrade::HttpAdapter do
24
+
25
+ before :all do
26
+ Plangrade.configure do |conf|
27
+ conf.access_token = 'TolNOFka9Uls2DxahNi78A'
28
+ end
29
+ end
30
+
31
+ context "initialization" do
32
+ context "with user options" do
33
+
34
+ before do
35
+ @options = {
36
+ :verify_ssl => false,
37
+ :max_redirects => 2
38
+ }
39
+ end
40
+
41
+ subject { @conn = Plangrade::HttpAdapter.new('https://www.example.com', @options) }
42
+
43
+ it "overrides default options" do
44
+ expect(subject.instance_variable_get(:"@connection_options")).to eq @options
45
+ end
46
+ end
47
+
48
+ context "with invalid url" do
49
+ it "should raise argument error" do
50
+ expect { Plangrade::HttpAdapter.new('www.example.com') }.to raise_error(ArgumentError)
51
+ end
52
+ end
53
+ end
54
+
55
+ context "with no options" do
56
+
57
+ subject { @conn = Plangrade::HttpAdapter.new('https://plangrade.com') }
58
+
59
+ describe "#scheme" do
60
+ it "returns the http scheme" do
61
+ expect(subject.scheme).to eq 'https'
62
+ end
63
+ end
64
+
65
+ describe "#host" do
66
+ it "returns the host server" do
67
+ expect(subject.host).to eq 'plangrade.com'
68
+ end
69
+ end
70
+
71
+ describe "site_url" do
72
+ it "returns site_url" do
73
+ expect(subject.site_url).to eq 'https://plangrade.com'
74
+ end
75
+ end
76
+
77
+ describe "site_url=" do
78
+ it "sets new site_url on client" do
79
+ subject.site_url = 'https://github.com/topherreynoso'
80
+ expect(subject.site_url).to eq 'https://github.com/topherreynoso'
81
+ end
82
+ end
83
+
84
+ describe "connection_options=" do
85
+ it "sets new connection_options" do
86
+ subject.connection_options = { :max_redirects => 6 }
87
+ expect(subject.connection_options).to eq({ :max_redirects => 6 })
88
+ end
89
+
90
+ it "should raise error" do
91
+ expect { subject.connection_options = '' }.to raise_error(ArgumentError)
92
+ end
93
+ end
94
+
95
+ describe "#absolute_url" do
96
+ context "with no parameters" do
97
+ it "returns a uri without path" do
98
+ expect(subject.send(:absolute_url)).to eq "https://plangrade.com"
99
+ end
100
+ end
101
+
102
+ context "with parameters" do
103
+ it "returns a uri with path" do
104
+ expect(subject.send(:absolute_url, '/oauth/authorize')).to eq "https://plangrade.com/oauth/authorize"
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end