koala 1.2.1 → 1.3.0rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -90,7 +90,7 @@ describe "Koala::HTTPService" do
90
90
  end
91
91
  end
92
92
 
93
- describe "#encode_params" do
93
+ describe ".encode_params" do
94
94
  it "returns an empty string if param_hash evaluates to false" do
95
95
  Koala::HTTPService.encode_params(nil).should == ''
96
96
  end
@@ -135,7 +135,7 @@ describe "Koala::HTTPService" do
135
135
  end
136
136
  end
137
137
 
138
- describe "#make_request" do
138
+ describe ".make_request" do
139
139
  before :each do
140
140
  # Setup stubs for make_request to execute without exceptions
141
141
  @mock_body = stub('Typhoeus response body')
@@ -273,7 +273,7 @@ describe "Koala::HTTPService" do
273
273
  :always_use_ssl => :use_ssl,
274
274
  :proxy => :proxy
275
275
  }.each_pair do |deprecated_method, parameter|
276
- describe "##{deprecated_method}" do
276
+ describe ".#{deprecated_method}" do
277
277
  context "read" do
278
278
  it "reads http_options[:#{parameter}]" do
279
279
  value = "foo"
@@ -305,7 +305,7 @@ describe "Koala::HTTPService" do
305
305
 
306
306
  # ssl options
307
307
  [:ca_path, :ca_file, :verify_mode].each do |deprecated_method|
308
- describe "##{deprecated_method}" do
308
+ describe ".#{deprecated_method}" do
309
309
  context "read" do
310
310
  it "reads http_options[:ssl][:#{deprecated_method}] if http_options[:ssl]" do
311
311
  value = "foo"
@@ -1,15 +1,33 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Koala" do
4
- it "has a version" do
5
- Koala.const_defined?("VERSION").should be_true
6
- end
3
+ describe Koala do
4
+
7
5
 
8
6
  it "has an http_service accessor" do
9
7
  Koala.should respond_to(:http_service)
10
8
  Koala.should respond_to(:http_service=)
11
9
  end
12
10
 
11
+ describe "constants" do
12
+ it "has a version" do
13
+ Koala.const_defined?("VERSION").should be_true
14
+ end
15
+
16
+ describe Koala::Facebook do
17
+ it "defines GRAPH_SERVER" do
18
+ Koala::Facebook::GRAPH_SERVER.should == "graph.facebook.com"
19
+ end
20
+
21
+ it "defines REST_SERVER" do
22
+ Koala::Facebook::REST_SERVER.should == "api.facebook.com"
23
+ end
24
+
25
+ it "defines DIALOG_HOST" do
26
+ Koala::Facebook::DIALOG_HOST.should == "www.facebook.com"
27
+ end
28
+ end
29
+ end
30
+
13
31
  context "for deprecated services" do
14
32
  before :each do
15
33
  @service = Koala.http_service
@@ -9,7 +9,7 @@ describe Koala::MultipartRequest do
9
9
  Koala::MultipartRequest.mime_type.should == 'multipart/form-data'
10
10
  end
11
11
 
12
- describe ".process_request?" do
12
+ describe "#process_request?" do
13
13
  before :each do
14
14
  @env = {}
15
15
  @multipart = Koala::MultipartRequest.new
@@ -43,7 +43,7 @@ describe Koala::MultipartRequest do
43
43
  end
44
44
  end
45
45
 
46
- describe ".process_params" do
46
+ describe "#process_params" do
47
47
  before :each do
48
48
  @parent = Faraday::Request::Multipart.new
49
49
  @multipart = Koala::MultipartRequest.new
@@ -29,26 +29,27 @@ describe "Koala::Facebook::OAuth" do
29
29
  @time.stub!(:to_i).and_return(1273363199)
30
30
  end
31
31
 
32
- # initialization
33
- it "properly initializes" do
34
- @oauth.should
35
- end
32
+ describe ".new" do
33
+ it "properly initializes" do
34
+ @oauth.should
35
+ end
36
36
 
37
- it "properly sets attributes" do
38
- (@oauth.app_id == @app_id &&
39
- @oauth.app_secret == @secret &&
40
- @oauth.oauth_callback_url == @callback_url).should be_true
41
- end
37
+ it "properly sets attributes" do
38
+ (@oauth.app_id == @app_id &&
39
+ @oauth.app_secret == @secret &&
40
+ @oauth.oauth_callback_url == @callback_url).should be_true
41
+ end
42
42
 
43
- it "properly initializes without a callback_url" do
44
- @oauth = Koala::Facebook::OAuth.new(@app_id, @secret)
45
- end
43
+ it "properly initializes without a callback_url" do
44
+ @oauth = Koala::Facebook::OAuth.new(@app_id, @secret)
45
+ end
46
46
 
47
- it "properly sets attributes without a callback URL" do
48
- @oauth = Koala::Facebook::OAuth.new(@app_id, @secret)
49
- (@oauth.app_id == @app_id &&
50
- @oauth.app_secret == @secret &&
51
- @oauth.oauth_callback_url == nil).should be_true
47
+ it "properly sets attributes without a callback URL" do
48
+ @oauth = Koala::Facebook::OAuth.new(@app_id, @secret)
49
+ (@oauth.app_id == @app_id &&
50
+ @oauth.app_secret == @secret &&
51
+ @oauth.oauth_callback_url == nil).should be_true
52
+ end
52
53
  end
53
54
 
54
55
  describe "for cookie parsing" do
@@ -209,75 +210,144 @@ describe "Koala::Facebook::OAuth" do
209
210
  end
210
211
  end
211
212
 
212
- # OAuth URLs
213
-
214
213
  describe "for URL generation" do
215
-
216
- describe "for OAuth codes" do
217
- # url_for_oauth_code
214
+ describe "#url_for_oauth_code" do
218
215
  it "generates a properly formatted OAuth code URL with the default values" do
219
216
  url = @oauth.url_for_oauth_code
220
- url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&redirect_uri=#{@callback_url}"
217
+ url.should match_url("https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&redirect_uri=#{CGI.escape @callback_url}")
221
218
  end
222
219
 
223
220
  it "generates a properly formatted OAuth code URL when a callback is given" do
224
221
  callback = "foo.com"
225
222
  url = @oauth.url_for_oauth_code(:callback => callback)
226
- url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&redirect_uri=#{callback}"
223
+ url.should match_url("https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&redirect_uri=#{callback}")
227
224
  end
228
225
 
229
226
  it "generates a properly formatted OAuth code URL when permissions are requested as a string" do
230
227
  permissions = "publish_stream,read_stream"
231
228
  url = @oauth.url_for_oauth_code(:permissions => permissions)
232
- url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&redirect_uri=#{@callback_url}&scope=#{permissions}"
229
+ url.should match_url("https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&scope=#{CGI.escape permissions}&redirect_uri=#{CGI.escape @callback_url}")
233
230
  end
234
231
 
235
232
  it "generates a properly formatted OAuth code URL when permissions are requested as a string" do
236
233
  permissions = ["publish_stream", "read_stream"]
237
234
  url = @oauth.url_for_oauth_code(:permissions => permissions)
238
- url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&redirect_uri=#{@callback_url}&scope=#{permissions.join(",")}"
235
+ url.should match_url("https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&scope=#{CGI.escape permissions.join(",")}&redirect_uri=#{CGI.escape @callback_url}")
239
236
  end
240
237
 
241
238
  it "generates a properly formatted OAuth code URL when both permissions and callback are provided" do
242
239
  permissions = "publish_stream,read_stream"
243
240
  callback = "foo.com"
244
241
  url = @oauth.url_for_oauth_code(:callback => callback, :permissions => permissions)
245
- url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&redirect_uri=#{callback}&scope=#{permissions}"
242
+ url.should match_url("https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&scope=#{CGI.escape permissions}&redirect_uri=#{CGI.escape callback}")
246
243
  end
247
244
 
248
245
  it "generates a properly formatted OAuth code URL when a display is given as a string" do
249
246
  url = @oauth.url_for_oauth_code(:display => "page")
250
- url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&redirect_uri=#{@callback_url}&display=page"
247
+ url.should match_url("https://#{Koala::Facebook::GRAPH_SERVER}/oauth/authorize?client_id=#{@app_id}&display=page&redirect_uri=#{CGI.escape @callback_url}")
251
248
  end
252
249
 
253
250
  it "raises an exception if no callback is given in initialization or the call" do
254
251
  oauth2 = Koala::Facebook::OAuth.new(@app_id, @secret)
255
252
  lambda { oauth2.url_for_oauth_code }.should raise_error(ArgumentError)
256
253
  end
254
+
255
+ it "includes any additional options as URL parameters, appropriately escaped" do
256
+ params = {
257
+ :url => "http://foo.bar?c=2",
258
+ :email => "cdc@b.com"
259
+ }
260
+ url = @oauth.url_for_oauth_code(params)
261
+ params.each_pair do |key, value|
262
+ url.should =~ /[\&\?]#{key}=#{CGI.escape value}/
263
+ end
264
+ end
257
265
  end
258
266
 
259
- describe "for access token URLs" do
267
+ describe "#url_for_access_token" do
260
268
  before :each do
261
269
  # since we're just composing a URL here, we don't need to have a real code
262
270
  @code ||= "test_code"
263
271
  end
264
-
265
- # url_for_access_token
272
+
266
273
  it "generates a properly formatted OAuth token URL when provided a code" do
267
274
  url = @oauth.url_for_access_token(@code)
268
- url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/access_token?client_id=#{@app_id}&redirect_uri=#{@callback_url}&client_secret=#{@secret}&code=#{@code}"
275
+ url.should match_url("https://#{Koala::Facebook::GRAPH_SERVER}/oauth/access_token?client_id=#{@app_id}&code=#{@code}&client_secret=#{@secret}&redirect_uri=#{CGI.escape @callback_url}").should be_true
269
276
  end
270
277
 
271
278
  it "generates a properly formatted OAuth token URL when provided a callback" do
272
279
  callback = "foo.com"
273
280
  url = @oauth.url_for_access_token(@code, :callback => callback)
274
- url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/access_token?client_id=#{@app_id}&redirect_uri=#{callback}&client_secret=#{@secret}&code=#{@code}"
281
+ url.should match_url("https://#{Koala::Facebook::GRAPH_SERVER}/oauth/access_token?client_id=#{@app_id}&code=#{@code}&client_secret=#{@secret}&redirect_uri=#{CGI.escape callback}").should be_true
282
+ end
283
+
284
+ it "includes any additional options as URL parameters, appropriately escaped" do
285
+ params = {
286
+ :url => "http://foo.bar?c=2",
287
+ :email => "cdc@b.com"
288
+ }
289
+ url = @oauth.url_for_access_token(@code, params)
290
+ params.each_pair do |key, value|
291
+ url.should =~ /[\&\?]#{key}=#{CGI.escape value}/
292
+ end
293
+ end
294
+ end
295
+
296
+ describe "#url_for_dialog" do
297
+ it "builds the base properly" do
298
+ dialog_type = "my_dialog_type"
299
+ @oauth.url_for_dialog(dialog_type).should =~ /^http:\/\/#{Koala::Facebook::DIALOG_HOST}\/dialog\/#{dialog_type}/
300
+ end
301
+
302
+ it "adds the app_id/client_id to the url" do
303
+ automatic_params = {:app_id => @app_id, :client_id => @client_id}
304
+ url = @oauth.url_for_dialog("foo", automatic_params)
305
+ automatic_params.each_pair do |key, value|
306
+ # we're slightly simplifying how encode_params works, but for strings/ints, it's okay
307
+ url.should =~ /[\&\?]#{key}=#{CGI.escape value.to_s}/
308
+ end
309
+ end
310
+
311
+ it "includes any additional options as URL parameters, appropriately escaped" do
312
+ params = {
313
+ :url => "http://foo.bar?c=2",
314
+ :email => "cdc@b.com"
315
+ }
316
+ url = @oauth.url_for_dialog("friends", params)
317
+ params.each_pair do |key, value|
318
+ # we're slightly simplifying how encode_params works, but strings/ints, it's okay
319
+ url.should =~ /[\&\?]#{key}=#{CGI.escape value.to_s}/
320
+ end
321
+ end
322
+
323
+ describe "real examples from FB documentation" do
324
+ # see http://developers.facebook.com/docs/reference/dialogs/
325
+ # slightly brittle (e.g. if parameter order changes), but still useful
326
+ it "can generate a send dialog" do
327
+ url = @oauth.url_for_dialog("send", :name => "People Argue Just to Win", :link => "http://www.nytimes.com/2011/06/15/arts/people-argue-just-to-win-scholars-assert.html")
328
+ url.should match_url("http://www.facebook.com/dialog/send?app_id=#{@app_id}&client_id=#{@app_id}&link=http%3A%2F%2Fwww.nytimes.com%2F2011%2F06%2F15%2Farts%2Fpeople-argue-just-to-win-scholars-assert.html&name=People+Argue+Just+to+Win&redirect_uri=#{CGI.escape @callback_url}")
329
+ end
330
+
331
+ it "can generate a feed dialog" do
332
+ url = @oauth.url_for_dialog("feed", :name => "People Argue Just to Win", :link => "http://www.nytimes.com/2011/06/15/arts/people-argue-just-to-win-scholars-assert.html")
333
+ url.should match_url("http://www.facebook.com/dialog/feed?app_id=#{@app_id}&client_id=#{@app_id}&link=http%3A%2F%2Fwww.nytimes.com%2F2011%2F06%2F15%2Farts%2Fpeople-argue-just-to-win-scholars-assert.html&name=People+Argue+Just+to+Win&redirect_uri=#{CGI.escape @callback_url}")
334
+ end
335
+
336
+ it "can generate a oauth dialog" do
337
+ url = @oauth.url_for_dialog("oauth", :scope => "email", :response_type => "token")
338
+ url.should match_url("http://www.facebook.com/dialog/oauth?app_id=#{@app_id}&client_id=#{@app_id}&redirect_uri=#{CGI.escape @callback_url}&response_type=token&scope=email")
339
+ end
340
+
341
+ it "can generate a pay dialog" do
342
+ url = @oauth.url_for_dialog("pay", :order_id => "foo", :credits_purchase => false)
343
+ url.should match_url("http://www.facebook.com/dialog/pay?app_id=#{@app_id}&client_id=#{@app_id}&order_id=foo&credits_purchase=false&redirect_uri=#{CGI.escape @callback_url}")
344
+ end
275
345
  end
276
346
  end
277
347
  end
278
348
 
279
349
  describe "for fetching access tokens" do
280
- describe ".get_access_token_info" do
350
+ describe "#get_access_token_info" do
281
351
  it "uses options[:redirect_uri] if provided" do
282
352
  uri = "foo"
283
353
  Koala.should_receive(:make_request).with(anything, hash_including(:redirect_uri => uri), anything, anything).and_return(Koala::Response.new(200, "", {}))
@@ -311,7 +381,7 @@ describe "Koala::Facebook::OAuth" do
311
381
  end
312
382
  end
313
383
 
314
- describe ".get_access_token" do
384
+ describe "#get_access_token" do
315
385
  # TODO refactor these to be proper tests with stubs and tests against real data
316
386
  it "passes on any options provided to make_request" do
317
387
  options = {:a => 2}
@@ -87,7 +87,7 @@ describe "Koala::Facebook::TestUsers" do
87
87
 
88
88
  # TEST USER MANAGEMENT
89
89
 
90
- describe ".create" do
90
+ describe "#create" do
91
91
  it "should create a test user when not given installed" do
92
92
  result = @test_users.create(false)
93
93
  @user1 = result["id"]
@@ -132,7 +132,7 @@ describe "Koala::Facebook::TestUsers" do
132
132
  end
133
133
  end
134
134
 
135
- describe ".delete" do
135
+ describe "#delete" do
136
136
  before :each do
137
137
  @user1 = @test_users.create(true, "read_stream")
138
138
  @user2 = @test_users.create(true, "read_stream,user_interests")
@@ -153,7 +153,7 @@ describe "Koala::Facebook::TestUsers" do
153
153
  end
154
154
  end
155
155
 
156
- describe ".delete_all" do
156
+ describe "#delete_all" do
157
157
  it "should delete all users found by the list commnand" do
158
158
  array = [1, 2, 3]
159
159
  @test_users.should_receive(:list).and_return(array)
@@ -162,7 +162,7 @@ describe "Koala::Facebook::TestUsers" do
162
162
  end
163
163
  end
164
164
 
165
- describe ".update" do
165
+ describe "#update" do
166
166
  before :each do
167
167
  @updates = {:name => "Foo Baz"}
168
168
  # we stub out :graph_call, but still need to be able to delete the users
@@ -212,7 +212,7 @@ describe "Koala::UploadableIO" do
212
212
  end
213
213
  end
214
214
 
215
- describe "#binary_content?" do
215
+ describe ".binary_content?" do
216
216
  it "returns true for Rails 3 file uploads" do
217
217
  Koala::UploadableIO.binary_content?(rails_3_mocks.last).should be_true
218
218
  end
@@ -1,10 +1,34 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Koala::Utils do
4
- it "has a deprecate method" do
5
- Koala::Utils.should respond_to(:deprecate)
6
- end
4
+ describe ".deprecate" do
5
+ before :each do
6
+ # unstub deprecate so we can test it
7
+ Koala::Utils.unstub(:deprecate)
8
+ end
9
+
10
+ it "has a deprecation prefix that includes the words Koala and deprecation" do
11
+ Koala::Utils::DEPRECATION_PREFIX.should =~ /koala/i
12
+ Koala::Utils::DEPRECATION_PREFIX.should =~ /deprecation/i
13
+ end
14
+
15
+ it "prints a warning with Kernel.warn" do
16
+ message = Time.now.to_s + rand.to_s
17
+ Kernel.should_receive(:warn)
18
+ Koala::Utils.deprecate(message)
19
+ end
7
20
 
8
- # AFAIK there's no way to test that (Kernel.)warn receives the text
9
- # Kernel.should_receive(:warn) doesn't seem to work, even though the text gets printed
21
+ it "prints the deprecation prefix and the warning" do
22
+ message = Time.now.to_s + rand.to_s
23
+ Kernel.should_receive(:warn).with(Koala::Utils::DEPRECATION_PREFIX + message)
24
+ Koala::Utils.deprecate(message)
25
+ end
26
+
27
+ it "only prints each unique message once" do
28
+ message = Time.now.to_s + rand.to_s
29
+ Kernel.should_receive(:warn).once
30
+ Koala::Utils.deprecate(message)
31
+ Koala::Utils.deprecate(message)
32
+ end
33
+ end
10
34
  end
@@ -14,30 +14,15 @@
14
14
  rest_api:
15
15
 
16
16
  # -- Stubbed Responses --
17
- /method/fql.query:
18
- query=select first_name from user where uid = 2901279:
19
- get:
20
- no_token: '[{"first_name":"Luke"}]'
21
- with_token: '[{"first_name":"Luke"}]'
22
- query=select read_stream from permissions where uid = 2901279:
23
- get:
24
- with_token: '[{"read_stream":1}]'
25
- no_token: '{"error_code":104,"error_msg":"Requires valid signature","request_args":[{"key":"method","value":"fql.query"},{"key":"format","value":"json"},{"key":"query","value":"select read_stream from permissions where uid = 2901279"}]}'
26
-
27
- /method/fql.multiquery:
28
- 'queries=<%= MultiJson.encode({"query1" => "select post_id from stream where source_id = me()", "query2" => "select fromid from comment where post_id in (select post_id from #query1)", "query3" => "select uid, name from user where uid in (select fromid from #query2)"}) %>':
29
- get:
30
- with_token: '[{"name":"query1", "fql_result_set":[]},{"name":"query2", "fql_result_set":[]},{"name":"query3", "fql_result_set":[]}]'
31
- no_token: '{"error_code":104,"error_msg":"Requires valid signature","request_args":[{"key":"method","value":"fql.query"},{"key":"format","value":"json"},{"key":"query","value":"select read_stream from permissions where uid = 2901279"}]}'
32
- 'queries=<%= MultiJson.encode({"query1" => "select first_name from user where uid = 2901279", "query2" => "select first_name from user where uid = 2905623"}) %>':
33
- get:
34
- with_token: '[{"name":"query1", "fql_result_set":[{"first_name":"Luke"}]},{"name":"query2", "fql_result_set":[{"first_name":"Alex"}]}]'
35
- no_token: '[{"name":"query1", "fql_result_set":[{"first_name":"Luke"}]},{"name":"query2", "fql_result_set":[{"first_name":"Alex"}]}]'
36
17
  /method/admin.setAppProperties:
37
18
  'properties={"desktop":0}':
38
19
  post:
39
20
  with_token: 'true'
40
-
21
+ /method/fql.query: # for testing the beta tier
22
+ query=select first_name from user where uid = 2901279:
23
+ get:
24
+ no_token: '[{"first_name":"Luke"}]'
25
+ with_token: '[{"first_name":"Luke"}]'
41
26
 
42
27
 
43
28
 
@@ -227,29 +212,26 @@ graph_api:
227
212
  with_token: '{"data": [{}], "paging": {}}'
228
213
 
229
214
  /lukeshepard/picture:
230
- type=large:
215
+ no_args:
231
216
  get:
232
217
  no_token:
233
218
  code: 302
234
219
  headers:
235
- Location: https://facebook.com/large
220
+ Location: http://facebook.com/
236
221
  with_token:
237
222
  code: 302
238
223
  headers:
239
- Location: https://facebook.com/large
240
-
241
-
242
- /chris.baclig/picture:
243
- no_args:
224
+ Location: http://facebook.com/
225
+ type=large:
244
226
  get:
245
227
  no_token:
246
228
  code: 302
247
229
  headers:
248
- Location: http://facebook.com/
230
+ Location: https://facebook.com/large
249
231
  with_token:
250
232
  code: 302
251
233
  headers:
252
- Location: http://facebook.com/
234
+ Location: https://facebook.com/large
253
235
 
254
236
  /comments:
255
237
  ids=http://developers.facebook.com/blog/post/472:
@@ -279,6 +261,25 @@ graph_api:
279
261
  with_token: '{"data": [{"id": "507731521_100412693339488"}], "paging": {"previous": "https:\/\/graph.facebook.com\/7204941866\/photos?limit=25&until=2008-09-15T18%3A30%3A25%2B0000", "next": "https:\/\/graph.facebook.com\/7204941866\/photos?limit=25&until=2008-09-15T18%3A30%3A25%2B0000"}}'
280
262
  no_token: '{"data": [{"id": "507731521_100412693339488"}], "paging": {"previous": "https:\/\/graph.facebook.com\/7204941866\/photos?limit=25&until=2008-09-15T18%3A30%3A25%2B0000", "next": "https:\/\/graph.facebook.com\/7204941866\/photos?limit=25&until=2008-09-15T18%3A30%3A25%2B0000"}}'
281
263
 
264
+ /fql:
265
+ q=select first_name from user where uid = 2901279:
266
+ get:
267
+ no_token: '[{"first_name":"Luke"}]'
268
+ with_token: '[{"first_name":"Luke"}]'
269
+ q=select read_stream from permissions where uid = 2901279:
270
+ get:
271
+ <<: *token_required
272
+ with_token: '[{"read_stream":1}]'
273
+ 'q=<%= MultiJson.encode({"query1" => "select post_id from stream where source_id = me()", "query2" => "select fromid from comment where post_id in (select post_id from #query1)", "query3" => "select uid, name from user where uid in (select fromid from #query2)"}) %>':
274
+ get:
275
+ <<: *token_required
276
+ with_token: '[{"name":"query1", "fql_result_set":[]},{"name":"query2", "fql_result_set":[]},{"name":"query3", "fql_result_set":[]}]'
277
+ 'q=<%= MultiJson.encode({"query1" => "select first_name from user where uid = 2901279", "query2" => "select first_name from user where uid = 2905623"}) %>':
278
+ get:
279
+ with_token: '[{"name":"query1", "fql_result_set":[{"first_name":"Luke"}]},{"name":"query2", "fql_result_set":[{"first_name":"Alex"}]}]'
280
+ no_token: '[{"name":"query1", "fql_result_set":[{"first_name":"Luke"}]},{"name":"query2", "fql_result_set":[{"first_name":"Alex"}]}]'
281
+
282
+
282
283
  '/115349521819193_113815981982767':
283
284
  no_args:
284
285
  delete:
@@ -290,6 +291,12 @@ graph_api:
290
291
  <<: *token_required
291
292
  with_token: '{"access_token": "<%= APP_ACCESS_TOKEN %>"}'
292
293
 
294
+
295
+ '/<%= APP_ID %>':
296
+ restrictions=<%= MultiJson.encode({"age_distr" => "13+"}) %>:
297
+ post:
298
+ with_token: "true"
299
+
293
300
  # -- OAuth responses --
294
301
  /oauth/access_token:
295
302
  client_id=<%= APP_ID %>&client_secret=<%= SECRET %>&code=<%= OAUTH_CODE %>&redirect_uri=<%= OAUTH_DATA["callback_url"] %>: