geoloqi 0.9.26 → 0.9.27

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.
data/.travis.yml CHANGED
@@ -1,5 +1,3 @@
1
1
  rvm:
2
2
  - 1.9.2
3
- - rbx
4
- - rbx-2.0
5
3
  - jruby
data/lib/geoloqi.rb CHANGED
@@ -32,16 +32,16 @@ module Geoloqi
32
32
  @@config = Config.new opts
33
33
  end
34
34
 
35
- def get(access_token, path, args={})
36
- run :get, access_token, path, args
35
+ def get(access_token, path, args={}, headers={})
36
+ run :get, access_token, path, args, headers
37
37
  end
38
38
 
39
- def post(access_token, path, args={})
40
- run :post, access_token, path, args
39
+ def post(access_token, path, args={}, headers={})
40
+ run :post, access_token, path, args, headers
41
41
  end
42
42
 
43
- def run(meth, access_token, path, args={})
44
- Session.new(:access_token => access_token).run meth, path, args
43
+ def run(meth, access_token, path, args={}, headers={})
44
+ Session.new(:access_token => access_token).run meth, path, args, headers
45
45
  end
46
46
 
47
47
  def authorize_url(client_id=nil, redirect_uri=@@config.redirect_uri, opts={})
@@ -30,20 +30,20 @@ module Geoloqi
30
30
  Geoloqi.authorize_url @config.client_id, redirect_uri, opts
31
31
  end
32
32
 
33
- def get(path, query=nil)
34
- run :get, path, query
33
+ def get(path, query=nil, headers={})
34
+ run :get, path, query, headers
35
35
  end
36
36
 
37
- def post(path, query=nil)
38
- run :post, path, query
37
+ def post(path, query=nil, headers={})
38
+ run :post, path, query, headers
39
39
  end
40
40
 
41
- def run(meth, path, query=nil)
41
+ def run(meth, path, query=nil, headers={})
42
42
  renew_access_token! if auth[:expires_at] && Time.rfc2822(auth[:expires_at]) <= Time.now && !(path =~ /^\/?oauth\/token$/)
43
43
  retry_attempt = 0
44
44
 
45
45
  begin
46
- response = execute meth, path, query
46
+ response = execute meth, path, query, headers
47
47
  hash = JSON.parse response.body
48
48
  raise ApiError.new(response.status, hash['error'], hash['error_description']) if hash.is_a?(Hash) && hash['error'] && @config.throw_exceptions
49
49
  rescue Geoloqi::ApiError
@@ -61,11 +61,11 @@ module Geoloqi
61
61
  @config.use_hashie_mash ? Hashie::Mash.new(hash) : hash
62
62
  end
63
63
 
64
- def execute(meth, path, query=nil)
64
+ def execute(meth, path, query=nil, headers={})
65
65
  query = Rack::Utils.parse_query query if query.is_a?(String)
66
66
  raw = @connection.send(meth) do |req|
67
67
  req.url "/#{Geoloqi.api_version.to_s}/#{path.gsub(/^\//, '')}"
68
- req.headers = headers
68
+ req.headers = headers.merge! default_headers
69
69
 
70
70
  if query
71
71
  meth == :get ? req.params = query : req.body = query.to_json
@@ -74,8 +74,8 @@ module Geoloqi
74
74
 
75
75
  if @config.logger
76
76
  @config.logger.print "### Geoloqi::Session - #{meth.to_s.upcase} #{path}"
77
- @config.logger.print Rack::Utils.build_query(query) unless query.nil?
78
- @config.logger.puts "\nStatus: #{raw.status}\nHeaders: #{raw.headers.inspect}\nBody: #{raw.body}"
77
+ @config.logger.print "?#{Rack::Utils.build_query query}" unless query.nil?
78
+ @config.logger.puts "\n### Status: #{raw.status}\n### Headers: #{raw.headers.inspect}\n### Body: #{raw.body}"
79
79
  end
80
80
 
81
81
  Response.new raw.status, raw.headers, raw.body
@@ -109,7 +109,7 @@ module Geoloqi
109
109
  expires_in.to_i.zero? ? nil : ((Time.now + expires_in.to_i)-5).rfc2822
110
110
  end
111
111
 
112
- def headers
112
+ def default_headers
113
113
  headers = {'Content-Type' => 'application/json', 'User-Agent' => "geoloqi-ruby #{Geoloqi.version}", 'Accept' => 'application/json'}
114
114
  headers['Authorization'] = "OAuth #{access_token}" if access_token
115
115
  headers
@@ -1,5 +1,5 @@
1
1
  module Geoloqi
2
2
  def self.version
3
- '0.9.26'
3
+ '0.9.27'
4
4
  end
5
5
  end
data/spec/env.rb ADDED
@@ -0,0 +1,23 @@
1
+ # Bundler.setup
2
+ require 'rubygems'
3
+ require './lib/geoloqi.rb'
4
+ require 'minitest/autorun'
5
+ require 'wrong'
6
+ require 'wrong/adapters/minitest'
7
+ require 'webmock'
8
+
9
+ CLIENT_ID = 'client_id1234'
10
+ CLIENT_SECRET = 'client_secret1234'
11
+ ACCESS_TOKEN = 'access_token1234'
12
+
13
+ def auth_headers(access_token='access_token1234')
14
+ {'Content-Type' => 'application/json',
15
+ 'User-Agent' => "geoloqi-ruby #{Geoloqi.version}",
16
+ 'Accept' => 'application/json',
17
+ 'Authorization' => "OAuth #{access_token}"}
18
+ end
19
+
20
+ def api_url(path); "#{Geoloqi.api_url}/#{Geoloqi.api_version}/#{path}" end
21
+
22
+ Wrong.config.alias_assert :expect
23
+ include WebMock::API
@@ -0,0 +1,11 @@
1
+ require File.join File.dirname(__FILE__), 'env.rb'
2
+
3
+ describe Geoloqi::ApiError do
4
+ it 'throws exception properly and allows drill-down of message' do
5
+ error = Geoloqi::ApiError.new 405, 'not_enough_cats', 'not enough cats to complete this request'
6
+ expect { error.status == 405 }
7
+ expect { error.type == 'not_enough_cats' }
8
+ expect { error.reason == 'not enough cats to complete this request' }
9
+ expect { error.message == "#{error.type} - #{error.reason} (405)" }
10
+ end
11
+ end
@@ -0,0 +1,46 @@
1
+ require File.join File.dirname(__FILE__), 'env.rb'
2
+
3
+ describe Geoloqi::Config do
4
+ describe 'with redirect_uri' do
5
+ it 'returns authorize url' do
6
+ Geoloqi.config :client_id => CLIENT_ID, :client_secret => CLIENT_SECRET, :redirect_uri => 'http://blah.blah/test'
7
+ authorize_url = Geoloqi.authorize_url 'test'
8
+ expect { authorize_url == "#{Geoloqi.oauth_url}?"+
9
+ 'response_type=code&'+
10
+ "client_id=#{Rack::Utils.escape 'test'}&"+
11
+ "redirect_uri=#{Rack::Utils.escape 'http://blah.blah/test'}" }
12
+ end
13
+ end
14
+
15
+ it 'displays log information if logger is provided' do
16
+ stub_request(:get, api_url('account/username?cats=lol')).
17
+ with(:headers => {'Authorization'=>'OAuth access_token1234'}).
18
+ to_return(:body => {'username' => 'bulbasaurrulzok'}.to_json)
19
+
20
+ io = StringIO.new
21
+ Geoloqi.config :client_id => CLIENT_ID, :client_secret => CLIENT_SECRET, :logger => io
22
+
23
+ Geoloqi.get ACCESS_TOKEN, 'account/username', :cats => 'lol'
24
+ expect { io.string =~ /Geoloqi::Session/ }
25
+ end
26
+
27
+ it 'displays log information if logger is provided and query is nil' do
28
+ stub_request(:get, api_url('account/username')).
29
+ with(:headers => {'Authorization'=>'OAuth access_token1234'}).
30
+ to_return(:body => {'username' => 'bulbasaurrulzok'}.to_json)
31
+
32
+ io = StringIO.new
33
+ Geoloqi.config :client_id => CLIENT_ID, :client_secret => CLIENT_SECRET, :logger => io
34
+
35
+ Geoloqi.get ACCESS_TOKEN, 'account/username'
36
+ expect { io.string =~ /Geoloqi::Session/ }
37
+ end
38
+
39
+ it 'correctly checks booleans for client_id and client_secret' do
40
+ [:client_id, :client_secret].each do |k|
41
+ expect { Geoloqi.config(k => '').send("#{k}?") == false }
42
+ expect { Geoloqi.config(k => nil).send("#{k}?") == false }
43
+ expect { Geoloqi.config(k => 'lol').send("#{k}?") == true }
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,279 @@
1
+ require File.join File.dirname(__FILE__), 'env.rb'
2
+
3
+ describe Geoloqi::Session do
4
+ describe 'with nothing passed' do
5
+ before do
6
+ @session = Geoloqi::Session.new
7
+ end
8
+
9
+ it 'should not find access token' do
10
+ expect { !@session.access_token? }
11
+ end
12
+ end
13
+
14
+ describe 'with access token and throw exceptions not set' do
15
+ it 'should throw api error exception' do
16
+ stub_request(:get, api_url('badmethodcall')).
17
+ with(:headers => auth_headers).
18
+ to_return(:status => 404, :body => {'error' => 'not_found'}.to_json)
19
+
20
+ expect { rescuing {Geoloqi::Session.new(:access_token => 'access_token1234').get('badmethodcall')}.class == Geoloqi::ApiError }
21
+ end
22
+ end
23
+
24
+ describe 'with access token and throw exceptions false' do
25
+ before do
26
+ @session = Geoloqi::Session.new :access_token => 'access_token1234', :config => {:throw_exceptions => false}
27
+ end
28
+
29
+ it 'should not throw api error exception' do
30
+ stub_request(:get, api_url('badmethodcall')).
31
+ with(:headers => auth_headers).
32
+ to_return(:status => 404, :body => {'error' => 'not_found'}.to_json)
33
+
34
+ response = @session.get 'badmethodcall'
35
+ expect {response['error'] == 'not_found'}
36
+ end
37
+ end
38
+
39
+ describe 'with access token and hashie mash' do
40
+ before do
41
+ @session = Geoloqi::Session.new :access_token => 'access_token1234', :config => {:use_hashie_mash => true}
42
+ end
43
+
44
+ it 'should respond to method calls in addition to hash' do
45
+ stub_request(:get, api_url('account/username')).
46
+ with(:headers => {'Authorization'=>'OAuth access_token1234'}).
47
+ to_return(:body => {'username' => 'bulbasaurrulzok'}.to_json)
48
+
49
+ response = @session.get 'account/username'
50
+ expect { response['username'] == 'bulbasaurrulzok' }
51
+ expect { response.username == 'bulbasaurrulzok' }
52
+ expect { response[:username] == 'bulbasaurrulzok' }
53
+ end
54
+ end
55
+
56
+ describe 'with access token and no config' do
57
+ before do
58
+ @session = Geoloqi::Session.new :access_token => ACCESS_TOKEN
59
+ end
60
+
61
+ it 'throws an exception on a hard request error' do
62
+ stub_request(:get, api_url('crashing_method')).
63
+ with(:headers => auth_headers).
64
+ to_return(:status => 500, :body => 'Something broke hard!')
65
+
66
+ expect { rescuing {Geoloqi::Session.new(:access_token => 'access_token1234').get('crashing_method')}.class == Geoloqi::Error }
67
+ expect {
68
+ rescuing {Geoloqi::Session.new(:access_token => 'access_token1234').get('crashing_method')}.message ==
69
+ "API returned invalid JSON. Status: 500 Body: Something broke hard!"
70
+ }
71
+ end
72
+
73
+ it 'successfully makes call with array' do
74
+ stub_request(:post, api_url('play_record_at_geoloqi_hq')).
75
+ with(:headers => auth_headers, :body => [{:artist => 'Television'}].to_json).
76
+ to_return(:body => {'result' => 'ok'}.to_json)
77
+
78
+ expect { @session.post('play_record_at_geoloqi_hq', [{:artist => 'Television'}])['result'] == 'ok' }
79
+ end
80
+
81
+ it 'successfully makes call to api' do
82
+ stub_request(:get, api_url('layer/info/Gx')).
83
+ with(:headers => auth_headers).
84
+ to_return(:status => 200, :body => {'layer_id' => 'Gx'}.to_json)
85
+
86
+ %w{/layer/info/Gx layer/info/Gx}.each do |path|
87
+ expect { @session.get(path)['layer_id'] == 'Gx' }
88
+ end
89
+ end
90
+
91
+ describe 'location/history' do
92
+ before do
93
+ stub_request(:get, api_url('location/history?count=2')).
94
+ with(:headers => auth_headers).
95
+ to_return(:status => 200, :body => {:points => [1,2]}.to_json)
96
+ end
97
+
98
+ it 'makes a location/history call with get and hash params' do
99
+ expect { @session.get('location/history', :count => 2)['points'].count == 2 }
100
+ end
101
+
102
+ it 'makes a location/history call with get and query string directly in path' do
103
+ expect { @session.get('location/history?count=2')['points'].count == 2 }
104
+ end
105
+
106
+ it 'makes a location/history call with get and query string params' do
107
+ expect { @session.get('location/history', 'count=2')['points'].count == 2 }
108
+ end
109
+ end
110
+ end
111
+
112
+ describe 'with oauth id, secret, and access token via Geoloqi::Config' do
113
+ it 'should load config' do
114
+ @session = Geoloqi::Session.new :access_token => ACCESS_TOKEN,
115
+ :config => Geoloqi::Config.new(:client_id => CLIENT_ID,
116
+ :client_secret => CLIENT_SECRET)
117
+ expect { @session.config.client_id == CLIENT_ID }
118
+ expect { @session.config.client_secret == CLIENT_SECRET }
119
+ end
120
+ end
121
+
122
+ describe 'with- client id, client secret, and access token via direct hash' do
123
+ before do
124
+ @session = Geoloqi::Session.new :access_token => ACCESS_TOKEN,
125
+ :config => {:client_id => CLIENT_ID,
126
+ :client_secret => CLIENT_SECRET}
127
+ end
128
+
129
+ it 'should return access token' do
130
+ expect { @session.access_token == ACCESS_TOKEN }
131
+ end
132
+
133
+ it 'should recognize access token exists' do
134
+ expect { @session.access_token? }
135
+ end
136
+
137
+ it 'gets authorize url' do
138
+ authorize_url = @session.authorize_url 'http://blah.blah/test'
139
+ expect { authorize_url == "#{Geoloqi.oauth_url}?"+
140
+ "response_type=code&"+
141
+ "client_id=#{Rack::Utils.escape CLIENT_ID}&"+
142
+ "redirect_uri=#{Rack::Utils.escape 'http://blah.blah/test'}" }
143
+ end
144
+
145
+ it 'gets authorize url with scope' do
146
+ authorize_url = @session.authorize_url 'http://blah.blah/test', :scope => 'party_hard'
147
+ expect { authorize_url == "#{Geoloqi.oauth_url}?"+
148
+ "response_type=code&"+
149
+ "client_id=#{Rack::Utils.escape CLIENT_ID}&"+
150
+ "redirect_uri=#{Rack::Utils.escape 'http://blah.blah/test'}&"+
151
+ "scope=party_hard" }
152
+ end
153
+ end
154
+
155
+ describe 'with bunk access token' do
156
+ before do
157
+ @session = Geoloqi::Session.new :access_token => 'hey brah whats up let me in its cool 8)'
158
+ end
159
+
160
+ it 'fails with an exception' do
161
+ stub_request(:post, api_url('message/send')).
162
+ with(:headers => auth_headers('hey brah whats up let me in its cool 8)')).
163
+ to_return(:status => 401, :body => {'error' => 'invalid_token'}.to_json)
164
+
165
+ begin
166
+ @session.post 'message/send'
167
+ rescue Exception => e
168
+ expect { e.class == Geoloqi::ApiError }
169
+ expect { e.status == 401 }
170
+ expect { e.type == 'invalid_token' }
171
+ expect { e.message == 'invalid_token (401)' }
172
+ end
173
+ end
174
+ end
175
+
176
+ describe 'with config' do
177
+ before do
178
+ @session = Geoloqi::Session.new :config => {:client_id => CLIENT_ID, :client_secret => CLIENT_SECRET}
179
+ end
180
+
181
+ it 'retrieves auth with mock' do
182
+ stub_request(:post, api_url('oauth/token')).
183
+ with(:body => {:client_id => CLIENT_ID,
184
+ :client_secret => CLIENT_SECRET,
185
+ :grant_type => "authorization_code",
186
+ :code => "1234",
187
+ :redirect_uri => "http://example.com"}.to_json).
188
+ to_return(:body => {:access_token => 'access_token1234',
189
+ :scope => nil,
190
+ :expires_in => '86400',
191
+ :refresh_token => 'refresh_token1234'}.to_json)
192
+
193
+ response = @session.get_auth '1234', 'http://example.com'
194
+
195
+ {:access_token => 'access_token1234',
196
+ :scope => nil,
197
+ :expires_in => '86400',
198
+ :refresh_token => 'refresh_token1234'}.each do |k,v|
199
+ expect { response[k] == v }
200
+ end
201
+ end
202
+
203
+ it 'does not refresh when never expires' do
204
+ stub_request(:post, api_url('oauth/token')).
205
+ with(:body => {:client_id => CLIENT_ID,
206
+ :client_secret => CLIENT_SECRET,
207
+ :grant_type => "authorization_code",
208
+ :code => "1234",
209
+ :redirect_uri => "http://neverexpires.example.com/"}.to_json).
210
+ to_return(:body => {:access_token => 'access_token1234',
211
+ :scope => nil,
212
+ :expires_in => '0',
213
+ :refresh_token => 'never_expires'}.to_json)
214
+
215
+ stub_request(:get, api_url('account/username')).
216
+ with(:headers => {'Authorization'=>'OAuth access_token1234'}).
217
+ to_return(:body => {:username => 'bulbasaurrulzok'}.to_json)
218
+
219
+ response = @session.get_auth '1234', 'http://neverexpires.example.com/'
220
+
221
+ expect { @session.auth[:expires_in] == '0' }
222
+ expect { @session.auth[:expires_at].nil? }
223
+
224
+ response = @session.get 'account/username'
225
+
226
+ expect { @session.auth[:access_token] == 'access_token1234' }
227
+ expect { response['username'] == 'bulbasaurrulzok' }
228
+ end
229
+
230
+ it 'does not attempt to refresh for auth code expire' do
231
+ stub_request(:post, api_url('oauth/token')).
232
+ with(:body => {:client_id => CLIENT_ID,
233
+ :client_secret => CLIENT_SECRET,
234
+ :grant_type => "authorization_code",
235
+ :code => "1234",
236
+ :redirect_uri => "http://expired_code.example.com/"}.to_json).
237
+ to_return(:body => {:access_token => 'access_token1234',
238
+ :scope => nil,
239
+ :expires_in => '0',
240
+ :refresh_token => 'never_expires'}.to_json)
241
+
242
+ stub_request(:get, api_url('account/username?code=1234')).
243
+ with(:headers => auth_headers).
244
+ to_return(:status => 200, :body => {:points => [1,2]}.to_json)
245
+
246
+ # FINISH IMPLEMENTING
247
+ end
248
+ end
249
+
250
+ describe 'with config and expired auth' do
251
+ before do
252
+ @session = Geoloqi::Session.new :config => {:client_id => CLIENT_ID, :client_secret => CLIENT_SECRET},
253
+ :auth => { :access_token => 'access_token1234',
254
+ :scope => nil,
255
+ :expires_in => '86400',
256
+ :expires_at => Time.at(0).rfc2822,
257
+ :refresh_token => 'refresh_token1234' }
258
+ end
259
+
260
+ it 'retrieves new access token and retries query if expired' do
261
+ stub_request(:post, api_url('oauth/token')).
262
+ with(:body => {:client_id => CLIENT_ID,
263
+ :client_secret => CLIENT_SECRET,
264
+ :grant_type => "refresh_token",
265
+ :refresh_token => "refresh_token1234"}.to_json).
266
+ to_return(:body => {:access_token => 'access_token4567',
267
+ :scope => nil,
268
+ :expires_in => '5000',
269
+ :refresh_token => 'refresh_token4567'}.to_json)
270
+
271
+ stub_request(:get, api_url('account/username')).
272
+ with(:headers => {'Authorization'=>'OAuth access_token4567'}).
273
+ to_return(:body => {'username' => 'pikachu4lyfe'}.to_json)
274
+
275
+ @session.get 'account/username'
276
+ expect { @session.auth[:access_token] == 'access_token4567' }
277
+ end
278
+ end
279
+ end
data/spec/geoloqi_spec.rb CHANGED
@@ -1,26 +1,4 @@
1
- # Bundler.setup
2
- require 'rubygems'
3
- require './lib/geoloqi.rb'
4
- require 'minitest/autorun'
5
- require 'wrong'
6
- require 'wrong/adapters/minitest'
7
- require 'webmock'
8
-
9
- CLIENT_ID = 'client_id1234'
10
- CLIENT_SECRET = 'client_secret1234'
11
- ACCESS_TOKEN = 'access_token1234'
12
-
13
- def auth_headers(access_token='access_token1234')
14
- {'Content-Type' => 'application/json',
15
- 'User-Agent' => "geoloqi-ruby #{Geoloqi.version}",
16
- 'Accept' => 'application/json',
17
- 'Authorization' => "OAuth #{access_token}"}
18
- end
19
-
20
- def api_url(path); "#{Geoloqi.api_url}/#{Geoloqi.api_version}/#{path}" end
21
-
22
- Wrong.config.alias_assert :expect
23
- include WebMock::API
1
+ require File.join File.dirname(__FILE__), 'env.rb'
24
2
 
25
3
  describe Geoloqi do
26
4
  it 'reads geoloqi config' do
@@ -51,383 +29,20 @@ describe Geoloqi do
51
29
 
52
30
  it 'makes get request' do
53
31
  stub_request(:get, "https://api.geoloqi.com/1/quick_get?lol=cats").
54
- with(:headers => {'Authorization'=>'OAuth access_token1234'}).
32
+ with(:headers => {'Authorization'=>'OAuth access_token1234', 'Special' => 'header'}).
55
33
  to_return(:body => {:result => 'ok'}.to_json)
56
-
57
- response = Geoloqi.get ACCESS_TOKEN, '/quick_get', :lol => 'cats'
34
+
35
+ response = Geoloqi.get ACCESS_TOKEN, '/quick_get', {:lol => 'cats'}, 'Special' => 'header'
58
36
  expect { response['result'] == 'ok' }
59
37
  end
60
-
38
+
61
39
  it 'makes post request' do
62
40
  stub_request(:post, "https://api.geoloqi.com/1/quick_post").
63
- with(:headers => {'Authorization'=>'OAuth access_token1234'},
41
+ with(:headers => {'Authorization'=>'OAuth access_token1234', 'Special' => 'header'},
64
42
  :body => {:lol => 'dogs'}.to_json).
65
43
  to_return(:body => {:result => 'ok'}.to_json)
66
-
67
- response = Geoloqi.post ACCESS_TOKEN, '/quick_post', :lol => 'dogs'
68
- expect { response['result'] == 'ok' }
69
- end
70
- end
71
-
72
- describe Geoloqi::ApiError do
73
- it 'throws exception properly and allows drill-down of message' do
74
- error = Geoloqi::ApiError.new 405, 'not_enough_cats', 'not enough cats to complete this request'
75
- expect { error.status == 405 }
76
- expect { error.type == 'not_enough_cats' }
77
- expect { error.reason == 'not enough cats to complete this request' }
78
- expect { error.message == "#{error.type} - #{error.reason} (405)" }
79
- end
80
- end
81
-
82
- describe Geoloqi::Config do
83
- describe 'with redirect_uri' do
84
- it 'returns authorize url' do
85
- Geoloqi.config :client_id => CLIENT_ID, :client_secret => CLIENT_SECRET, :redirect_uri => 'http://blah.blah/test'
86
- authorize_url = Geoloqi.authorize_url 'test'
87
- expect { authorize_url == "#{Geoloqi.oauth_url}?"+
88
- 'response_type=code&'+
89
- "client_id=#{Rack::Utils.escape 'test'}&"+
90
- "redirect_uri=#{Rack::Utils.escape 'http://blah.blah/test'}" }
91
- end
92
- end
93
-
94
- it 'displays log information if logger is provided' do
95
- stub_request(:get, api_url('account/username?cats=lol')).
96
- with(:headers => {'Authorization'=>'OAuth access_token1234'}).
97
- to_return(:body => {'username' => 'bulbasaurrulzok'}.to_json)
98
-
99
- io = StringIO.new
100
- Geoloqi.config :client_id => CLIENT_ID, :client_secret => CLIENT_SECRET, :logger => io
101
-
102
- Geoloqi.get ACCESS_TOKEN, 'account/username', :cats => 'lol'
103
- expect { io.string =~ /Geoloqi::Session/ }
104
- end
105
-
106
- it 'displays log information if logger is provided and query is nil' do
107
- stub_request(:get, api_url('account/username')).
108
- with(:headers => {'Authorization'=>'OAuth access_token1234'}).
109
- to_return(:body => {'username' => 'bulbasaurrulzok'}.to_json)
110
-
111
- io = StringIO.new
112
- Geoloqi.config :client_id => CLIENT_ID, :client_secret => CLIENT_SECRET, :logger => io
113
-
114
- Geoloqi.get ACCESS_TOKEN, 'account/username'
115
- expect { io.string =~ /Geoloqi::Session/ }
116
- end
117
-
118
-
119
- it 'correctly checks booleans for client_id and client_secret' do
120
- [:client_id, :client_secret].each do |k|
121
- expect { Geoloqi.config(k => '').send("#{k}?") == false }
122
- expect { Geoloqi.config(k => nil).send("#{k}?") == false }
123
- expect { Geoloqi.config(k => 'lol').send("#{k}?") == true }
124
- end
125
- end
126
- end
127
-
128
- describe Geoloqi::Session do
129
- describe 'with nothing passed' do
130
- before do
131
- @session = Geoloqi::Session.new
132
- end
133
-
134
- it 'should not find access token' do
135
- expect { !@session.access_token? }
136
- end
137
- end
138
-
139
- describe 'with access token and throw exceptions not set' do
140
- it 'should throw api error exception' do
141
- stub_request(:get, api_url('badmethodcall')).
142
- with(:headers => auth_headers).
143
- to_return(:status => 404, :body => {'error' => 'not_found'}.to_json)
144
-
145
- expect { rescuing {Geoloqi::Session.new(:access_token => 'access_token1234').get('badmethodcall')}.class == Geoloqi::ApiError }
146
- end
147
- end
148
-
149
- describe 'with access token and throw exceptions false' do
150
- before do
151
- @session = Geoloqi::Session.new :access_token => 'access_token1234', :config => {:throw_exceptions => false}
152
- end
153
-
154
- it 'should not throw api error exception' do
155
- stub_request(:get, api_url('badmethodcall')).
156
- with(:headers => auth_headers).
157
- to_return(:status => 404, :body => {'error' => 'not_found'}.to_json)
158
-
159
- response = @session.get 'badmethodcall'
160
- expect {response['error'] == 'not_found'}
161
- end
162
- end
163
-
164
- describe 'with access token and hashie mash' do
165
- before do
166
- @session = Geoloqi::Session.new :access_token => 'access_token1234', :config => {:use_hashie_mash => true}
167
- end
168
-
169
- it 'should respond to method calls in addition to hash' do
170
- stub_request(:get, api_url('account/username')).
171
- with(:headers => {'Authorization'=>'OAuth access_token1234'}).
172
- to_return(:body => {'username' => 'bulbasaurrulzok'}.to_json)
173
-
174
- response = @session.get 'account/username'
175
- expect { response['username'] == 'bulbasaurrulzok' }
176
- expect { response.username == 'bulbasaurrulzok' }
177
- expect { response[:username] == 'bulbasaurrulzok' }
178
- end
179
- end
180
-
181
- describe 'with access token and no config' do
182
- before do
183
- @session = Geoloqi::Session.new :access_token => ACCESS_TOKEN
184
- end
185
-
186
- it 'throws an exception on a hard request error' do
187
- stub_request(:get, api_url('crashing_method')).
188
- with(:headers => auth_headers).
189
- to_return(:status => 500, :body => 'Something broke hard!')
190
-
191
- expect { rescuing {Geoloqi::Session.new(:access_token => 'access_token1234').get('crashing_method')}.class == Geoloqi::Error }
192
- expect {
193
- rescuing {Geoloqi::Session.new(:access_token => 'access_token1234').get('crashing_method')}.message ==
194
- "API returned invalid JSON. Status: 500 Body: Something broke hard!"
195
- }
196
- end
197
-
198
- it 'successfully makes mock call with array' do
199
- stub_request(:post, api_url('play_record_at_geoloqi_hq')).
200
- with(:headers => auth_headers, :body => [{:artist => 'Television'}].to_json).
201
- to_return(:body => {'result' => 'ok'}.to_json)
202
-
203
- expect { @session.post('play_record_at_geoloqi_hq', [{:artist => 'Television'}])['result'] == 'ok' }
204
- end
205
-
206
- it 'successfully makes call to api with forward slash' do
207
- stub_request(:get, api_url('layer/info/Gx')).
208
- with(:headers => auth_headers).
209
- to_return(:status => 200, :body => {'layer_id' => 'Gx'}.to_json)
210
-
211
- expect { @session.get('/layer/info/Gx')['layer_id'] == 'Gx' }
212
- end
213
-
214
- it 'successfully makes call to api without forward slash' do
215
- stub_request(:get, api_url('layer/info/Gx')).
216
- with(:headers => auth_headers).
217
- to_return(:status => 200, :body => {'layer_id' => 'Gx'}.to_json)
218
-
219
- expect { @session.get('layer/info/Gx')['layer_id'] == 'Gx' }
220
- end
221
44
 
222
- it 'creates a layer, reads its info, and then deletes the layer' do
223
- stub_request(:post, api_url('layer/create')).
224
- with(:headers => auth_headers, :body => {:name => 'Test Layer'}.to_json).
225
- to_return(:status => 200, :body => {:layer_id => 'layer_id1234'}.to_json)
226
-
227
- stub_request(:get, api_url('layer/info/layer_id1234')).
228
- with(:headers => auth_headers).
229
- to_return(:status => 200, :body => {:name => 'Test Layer'}.to_json)
230
-
231
- stub_request(:post, api_url('layer/delete/layer_id1234')).
232
- with(:headers => auth_headers).
233
- to_return(:status => 200, :body => {'result' => 'ok'}.to_json)
234
-
235
- layer_id = @session.post('/layer/create', :name => 'Test Layer')['layer_id']
236
- layer_info = @session.get "/layer/info/#{layer_id}"
237
- layer_delete = @session.post "/layer/delete/#{layer_id}"
238
-
239
- expect { layer_id.is_a?(String) }
240
- expect { !layer_id.empty? }
241
- expect { layer_info['name'] == 'Test Layer' }
242
- expect { layer_delete['result'] == 'ok' }
243
- end
244
-
245
- describe 'location/history' do
246
- before do
247
- stub_request(:get, api_url('location/history?count=2')).
248
- with(:headers => auth_headers).
249
- to_return(:status => 200, :body => {:points => [1,2]}.to_json)
250
- end
251
-
252
- it 'makes a location/history call with get and hash params' do
253
- expect { @session.get('location/history', :count => 2)['points'].count == 2 }
254
- end
255
-
256
- it 'makes a location/history call with get and query string directly in path' do
257
- expect { @session.get('location/history?count=2')['points'].count == 2 }
258
- end
259
-
260
- it 'makes a location/history call with get and query string params' do
261
- expect { @session.get('location/history', 'count=2')['points'].count == 2 }
262
- end
263
- end
264
- end
265
-
266
- describe 'with oauth id, secret, and access token via Geoloqi::Config' do
267
- it 'should load config' do
268
- @session = Geoloqi::Session.new :access_token => ACCESS_TOKEN,
269
- :config => Geoloqi::Config.new(:client_id => CLIENT_ID,
270
- :client_secret => CLIENT_SECRET)
271
- expect { @session.config.client_id == CLIENT_ID }
272
- expect { @session.config.client_secret == CLIENT_SECRET }
273
- end
274
- end
275
-
276
- describe 'with client id, client secret, and access token via direct hash' do
277
- before do
278
- @session = Geoloqi::Session.new :access_token => ACCESS_TOKEN,
279
- :config => {:client_id => CLIENT_ID,
280
- :client_secret => CLIENT_SECRET}
281
- end
282
-
283
- it 'should return access token' do
284
- expect { @session.access_token == ACCESS_TOKEN }
285
- end
286
-
287
- it 'should recognize access token exists' do
288
- expect { @session.access_token? }
289
- end
290
-
291
- it 'gets authorize url' do
292
- authorize_url = @session.authorize_url 'http://blah.blah/test'
293
- expect { authorize_url == "#{Geoloqi.oauth_url}?"+
294
- "response_type=code&"+
295
- "client_id=#{Rack::Utils.escape CLIENT_ID}&"+
296
- "redirect_uri=#{Rack::Utils.escape 'http://blah.blah/test'}" }
297
- end
298
-
299
- it 'gets authorize url with scope' do
300
- authorize_url = @session.authorize_url 'http://blah.blah/test', :scope => 'party_hard'
301
- expect { authorize_url == "#{Geoloqi.oauth_url}?"+
302
- "response_type=code&"+
303
- "client_id=#{Rack::Utils.escape CLIENT_ID}&"+
304
- "redirect_uri=#{Rack::Utils.escape 'http://blah.blah/test'}&"+
305
- "scope=party_hard" }
306
- end
307
- end
308
-
309
- describe 'with bunk access token' do
310
- before do
311
- @session = Geoloqi::Session.new :access_token => 'hey brah whats up let me in its cool 8)'
312
- end
313
-
314
- it 'fails with an exception' do
315
- stub_request(:post, api_url('message/send')).
316
- with(:headers => auth_headers('hey brah whats up let me in its cool 8)')).
317
- to_return(:status => 401, :body => {'error' => 'invalid_token'}.to_json)
318
-
319
- begin
320
- @session.post 'message/send'
321
- rescue Exception => e
322
- expect { e.class == Geoloqi::ApiError }
323
- expect { e.status == 401 }
324
- expect { e.type == 'invalid_token' }
325
- expect { e.message == 'invalid_token (401)' }
326
- end
327
- end
328
- end
329
-
330
- describe 'with config' do
331
- before do
332
- @session = Geoloqi::Session.new :config => {:client_id => CLIENT_ID, :client_secret => CLIENT_SECRET}
333
- end
334
-
335
- it 'retrieves auth with mock' do
336
- stub_request(:post, api_url('oauth/token')).
337
- with(:body => {:client_id => CLIENT_ID,
338
- :client_secret => CLIENT_SECRET,
339
- :grant_type => "authorization_code",
340
- :code => "1234",
341
- :redirect_uri => "http://example.com"}.to_json).
342
- to_return(:body => {:access_token => 'access_token1234',
343
- :scope => nil,
344
- :expires_in => '86400',
345
- :refresh_token => 'refresh_token1234'}.to_json)
346
-
347
- response = @session.get_auth '1234', 'http://example.com'
348
-
349
- {:access_token => 'access_token1234',
350
- :scope => nil,
351
- :expires_in => '86400',
352
- :refresh_token => 'refresh_token1234'}.each do |k,v|
353
- expect { response[k] == v }
354
- end
355
- end
356
-
357
- it 'does not refresh when never expires' do
358
- stub_request(:post, api_url('oauth/token')).
359
- with(:body => {:client_id => CLIENT_ID,
360
- :client_secret => CLIENT_SECRET,
361
- :grant_type => "authorization_code",
362
- :code => "1234",
363
- :redirect_uri => "http://neverexpires.example.com/"}.to_json).
364
- to_return(:body => {:access_token => 'access_token1234',
365
- :scope => nil,
366
- :expires_in => '0',
367
- :refresh_token => 'never_expires'}.to_json)
368
-
369
- stub_request(:get, api_url('account/username')).
370
- with(:headers => {'Authorization'=>'OAuth access_token1234'}).
371
- to_return(:body => {:username => 'bulbasaurrulzok'}.to_json)
372
-
373
- response = @session.get_auth '1234', 'http://neverexpires.example.com/'
374
-
375
- expect { @session.auth[:expires_in] == '0' }
376
- expect { @session.auth[:expires_at].nil? }
377
-
378
- response = @session.get 'account/username'
379
-
380
- expect { @session.auth[:access_token] == 'access_token1234' }
381
- expect { response['username'] == 'bulbasaurrulzok' }
382
- end
383
-
384
- it 'does not attempt to refresh for auth code expire' do
385
- stub_request(:post, api_url('oauth/token')).
386
- with(:body => {:client_id => CLIENT_ID,
387
- :client_secret => CLIENT_SECRET,
388
- :grant_type => "authorization_code",
389
- :code => "1234",
390
- :redirect_uri => "http://expired_code.example.com/"}.to_json).
391
- to_return(:body => {:access_token => 'access_token1234',
392
- :scope => nil,
393
- :expires_in => '0',
394
- :refresh_token => 'never_expires'}.to_json)
395
-
396
- stub_request(:get, api_url('account/username?code=1234')).
397
- with(:headers => auth_headers).
398
- to_return(:status => 200, :body => {:points => [1,2]}.to_json)
399
-
400
- # FINISH IMPLEMENTING
401
- end
402
- end
403
-
404
- describe 'with config and expired auth' do
405
- before do
406
- @session = Geoloqi::Session.new :config => {:client_id => CLIENT_ID, :client_secret => CLIENT_SECRET},
407
- :auth => { :access_token => 'access_token1234',
408
- :scope => nil,
409
- :expires_in => '86400',
410
- :expires_at => Time.at(0).rfc2822,
411
- :refresh_token => 'refresh_token1234' }
412
- end
413
-
414
- it 'retrieves new access token and retries query if expired' do
415
- stub_request(:post, api_url('oauth/token')).
416
- with(:body => {:client_id => CLIENT_ID,
417
- :client_secret => CLIENT_SECRET,
418
- :grant_type => "refresh_token",
419
- :refresh_token => "refresh_token1234"}.to_json).
420
- to_return(:body => {:access_token => 'access_token4567',
421
- :scope => nil,
422
- :expires_in => '5000',
423
- :refresh_token => 'refresh_token4567'}.to_json)
424
-
425
- stub_request(:get, api_url('account/username')).
426
- with(:headers => {'Authorization'=>'OAuth access_token4567'}).
427
- to_return(:body => {'username' => 'pikachu4lyfe'}.to_json)
428
-
429
- @session.get 'account/username'
430
- expect { @session.auth[:access_token] == 'access_token4567' }
431
- end
45
+ response = Geoloqi.post ACCESS_TOKEN, '/quick_post', {:lol => 'dogs'}, 'Special' => 'header'
46
+ expect { response['result'] == 'ok' }
432
47
  end
433
- end
48
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: geoloqi
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.9.26
5
+ version: 0.9.27
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kyle Drake
@@ -118,6 +118,10 @@ files:
118
118
  - lib/geoloqi/session.rb
119
119
  - lib/geoloqi/version.rb
120
120
  - license.txt
121
+ - spec/env.rb
122
+ - spec/geoloqi_api_error_spec.rb
123
+ - spec/geoloqi_config.rb
124
+ - spec/geoloqi_session_spec.rb
121
125
  - spec/geoloqi_spec.rb
122
126
  has_rdoc: true
123
127
  homepage: http://github.com/geoloqi/geoloqi-ruby