koala 3.0.0.beta1 → 3.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+
3
+ module Koala::HTTPService
4
+ RSpec.describe Response do
5
+ describe "#data" do
6
+ it "returns nothing if the body is empty" do
7
+ expect(Response.new(200, "", {}).data).to be_nil
8
+ end
9
+
10
+ it "parses the JSON if there's a body" do
11
+ result = {"foo" => "bar"}
12
+ expect(Response.new(200, result.to_json, {}).data).to eq(result)
13
+ end
14
+
15
+ it "allows raw values" do
16
+ expect(Response.new(200, "true", {}).data).to be true
17
+ end
18
+
19
+ it "raises a ParserError if it's invalid JSON" do
20
+ expect { Response.new(200, "{", {}).data }.to raise_exception(JSON::ParserError)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -271,6 +271,17 @@ describe "Koala::Facebook::TestUsers" do
271
271
  end
272
272
  @test_users.befriend(@user1, @user2, options)
273
273
  end
274
+
275
+ it "includes the secret, generating the appsecret_proof in both calls if provided" do
276
+ # should come twice, once for each user
277
+ @stubbed = true
278
+ test_users = Koala::Facebook::TestUsers.new({:secret => @secret, :app_id => @app_id})
279
+ expect(Koala.http_service).to receive(:make_request).twice do |request|
280
+ expect(request.post_args).to include("appsecret_proof")
281
+ Koala::HTTPService::Response.new(200, "{}", {})
282
+ end
283
+ test_users.befriend(@user1, @user2)
284
+ end
274
285
  end
275
286
  end # when used without network
276
287
 
Binary file
@@ -54,7 +54,7 @@ oauth_test_data:
54
54
  issued_at: 1301917299
55
55
 
56
56
  subscription_test_data:
57
- subscription_path: http://oauth.twoalex.com/subscriptions
57
+ subscription_path: https://oauth.twoalex.com/subscriptions
58
58
  verify_token: "myverificationtoken|1f54545d5f722733e17faae15377928f"
59
59
  challenge_data:
60
60
  "hub.challenge": "1290024882"
@@ -24,7 +24,7 @@ graph_api:
24
24
  # Common mock item responses
25
25
  item_deleted: &item_deleted
26
26
  delete:
27
- with_token: 'true'
27
+ with_token: '{"success":true}'
28
28
 
29
29
  # OAuth error response
30
30
  oauth_error: &oauth_error
@@ -52,39 +52,39 @@ graph_api:
52
52
 
53
53
  # -- Stubbed Responses --
54
54
  root:
55
- ids=facebook,koppel:
55
+ ids=facebook,barackobama:
56
56
  get:
57
- with_token: '{"facebook":"{}","koppel":"{}"}'
58
- no_token: '{"facebook":"{}","koppel":"{}"}'
57
+ with_token: '{"facebook":"{}","barackobama":"{}"}'
58
+ no_token: '{"facebook":"{}","barackobama":"{}"}'
59
59
 
60
60
  # Ruby 1.8.7 and 1.9.2 generate JSON with different key ordering, hence we have to dynamically generate it here
61
- batch=<%= JSON.dump([{"method" => "get", "relative_url" => "me"},{"method" => "get", "relative_url" => "koppel"}]) %>:
61
+ batch=<%= JSON.dump([{"method" => "get", "relative_url" => "me"},{"method" => "get", "relative_url" => "barackobama"}]) %>:
62
62
  post:
63
63
  with_token: '[{"code": 200, "body":"{\"id\":\"123\"}"}, {"code": 200, "body":"{\"id\":\"456\"}"}]'
64
64
  batch=<%= JSON.dump([{"method" => "get", "relative_url" => "me/picture"}]) %>:
65
65
  post:
66
- with_token: '[{"code": 302, "headers":[{"name":"Location","value":"http://google.com"}]}]'
66
+ with_token: '[{"code": 302, "headers":[{"name":"Location","value":"https://google.com"}]}]'
67
67
  batch=<%= JSON.dump([{"method" => "get", "relative_url" => "me/picture?redirect=false"}]) %>:
68
68
  post:
69
- with_token: '[{"code": 200, "body":"{\"data\":{\"is_silhouette\":false,\"url\":\"http:\/\/google.com\"}}"}]'
69
+ with_token: '[{"code": 200, "body":"{\"data\":{\"is_silhouette\":false,\"url\":\"https:\/\/google.com\"}}"}]'
70
70
  batch=<%= JSON.dump([{"method" => "get", "relative_url" => "me"},{"method" => "get", "relative_url" => "me/friends"}]) %>:
71
71
  post:
72
- with_token: '[{"code": 200, "body":"{\"id\":\"koppel\"}"}, {"code": 200, "body":"{\"data\":[{\"id\":\"lukeshepard\"}],\"paging\":{}}"}]'
73
- batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"me"}, {"method"=>"get", "relative_url"=>"#{OAUTH_DATA["app_id"]}/insights?access_token=#{CGI.escape APP_ACCESS_TOKEN}"}]) %>:
72
+ with_token: '[{"code": 200, "body":"{\"id\":\"barackobama\"}"}, {"code": 200, "body":"{\"data\":[{\"id\":\"koppel\"}],\"paging\":{}}"}]'
73
+ batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"me"}, {"method"=>"get", "relative_url"=>"#{OAUTH_DATA["app_id"]}/app_event_types?access_token=#{CGI.escape APP_ACCESS_TOKEN}"}]) %>:
74
74
  post:
75
75
  with_token: '[{"code": 200, "body":"{\"id\":\"123\"}"}, {"code": 200, "body":"{\"data\":[],\"paging\":{}}"}]'
76
- batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"2/invalidconnection"}, {"method"=>"get", "relative_url"=>"koppel?access_token=#{CGI.escape APP_ACCESS_TOKEN}"}]) %>:
76
+ batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"2/invalidconnection"}, {"method"=>"get", "relative_url"=>"barackobama?access_token=#{CGI.escape APP_ACCESS_TOKEN}"}]) %>:
77
77
  post:
78
78
  with_token: '[{"code": 400, "body": "{\"error\":{\"type\":\"AnError\", \"message\":\"An error occurred!.\"}}"},{"code": 200, "body":"{\"id\":\"123\"}"}]'
79
79
  batch=<%= JSON.dump([{"method"=>"post", "relative_url"=>"FEED_ITEM_BATCH/likes"}, {"method"=>"delete", "relative_url"=> "FEED_ITEM_BATCH"}]) %>:
80
80
  post:
81
- with_token: '[{"code": 200, "body": "{\"id\": \"MOCK_LIKE\"}"},{"code": 200, "body":true}]'
81
+ with_token: '[{"code": 200, "body": "{\"id\": \"MOCK_LIKE\"}"},{"code": 200, "body":"{\"success\":true}"}]'
82
82
 
83
83
  # dependencies
84
- batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"me", "name" => "getme"}, {"method"=>"get", "relative_url"=>"koppel", "depends_on" => "getme"}]) %>:
84
+ batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"me", "name" => "getme"}, {"method"=>"get", "relative_url"=>"barackobama", "depends_on" => "getme"}]) %>:
85
85
  post:
86
86
  with_token: '[null,{"code": 200, "body":"{\"id\":\"123\"}"}]'
87
- batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"2/invalidconnection", "name" => "getdata"}, {"method"=>"get", "relative_url"=>"koppel", "depends_on" => "getdata"}]) %>:
87
+ batch=<%= JSON.dump([{"method"=>"get", "relative_url"=>"2/invalidconnection", "name" => "getdata"}, {"method"=>"get", "relative_url"=>"barackobama", "depends_on" => "getdata"}]) %>:
88
88
  post:
89
89
  with_token: '[{"code": 400, "body": "{\"error\":{\"type\":\"AnError\", \"message\":\"An error occurred!.\"}}"},null]'
90
90
  batch=<%= JSON.dump([{"method" => "get", "relative_url" => "me/friends?limit=5", "name" => "get-friends"}, {"method" => "get", "relative_url" => "?ids=#{CGI.escape "{result=get-friends:$.data.*.id}"}"}]) %>:
@@ -106,7 +106,7 @@ graph_api:
106
106
  batch=<%= JSON.dump([{"method"=>"post", "relative_url"=>"me/photos", "attached_files" => "op1_file0"}]) %>&op1_file0=[FILE]:
107
107
  post:
108
108
  with_token: '[{"code": 200, "body":"{\"id\": \"MOCK_PHOTO\"}"}]'
109
- batch=<%= JSON.dump([{"method"=>"post", "relative_url"=>"me/photos", "attached_files" => "op1_file0"}, {"method"=>"post", "relative_url"=>"koppel/photos", "attached_files" => "op2_file0"}]) %>&op1_file0=[FILE]&op2_file0=[FILE]:
109
+ batch=<%= JSON.dump([{"method"=>"post", "relative_url"=>"me/photos", "attached_files" => "op1_file0"}, {"method"=>"post", "relative_url"=>"barackobama/photos", "attached_files" => "op2_file0"}]) %>&op1_file0=[FILE]&op2_file0=[FILE]:
110
110
  post:
111
111
  with_token: '[{"code": 200, "body":"{\"id\": \"MOCK_PHOTO\"}"}, {"code": 200, "body":"{\"id\": \"MOCK_PHOTO\"}"}]'
112
112
 
@@ -192,14 +192,14 @@ graph_api:
192
192
  <<: *token_required
193
193
  with_token: '{"id": "MOCK_PHOTO_FROM_URL"}'
194
194
 
195
- /koppel:
195
+ /barackobama:
196
196
  no_args:
197
197
  get:
198
198
  with_token: '{"id": 1, "name": 1, "updated_time": 1}'
199
199
  no_token: '{"id": 1, "name": 1}'
200
200
  metadata=1:
201
201
  get:
202
- with_token: '{"name": "Alex Koppel","metadata": {"fields": [{"name": "id"}],"type": "user","connections": {}},"id": "2905623"}'
202
+ with_token: '{"name": "Barack Obama","metadata": {"fields": [{"name": "id"}],"type": "user","connections": {}},"id": "44"}'
203
203
 
204
204
  /facebook:
205
205
  no_args:
@@ -207,19 +207,19 @@ graph_api:
207
207
  with_token: '{"id": 1, "name": 1}'
208
208
  no_token: '{"id": 1, "name": 1}'
209
209
 
210
- /facebook/photos:
210
+ /facebook/events:
211
211
  no_args:
212
212
  get:
213
- with_token: '{"data": [{}], "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"}}'
214
- no_token: '{"data": [{}], "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"}}'
213
+ with_token: '{"data": [{}], "paging": {"previous": "https:\/\/graph.facebook.com\/7204941866\/events?limit=25&until=2008-09-15T18%3A30%3A25%2B0000", "next": "https:\/\/graph.facebook.com\/7204941866\/events?limit=25&until=2008-09-15T18%3A30%3A25%2B0000"}}'
214
+ no_token: '{"data": [{}], "paging": {"previous": "https:\/\/graph.facebook.com\/7204941866\/events?limit=25&until=2008-09-15T18%3A30%3A25%2B0000", "next": "https:\/\/graph.facebook.com\/7204941866\/events?limit=25&until=2008-09-15T18%3A30%3A25%2B0000"}}'
215
215
 
216
- /lukeshepard/friends:
216
+ /koppel/likes:
217
217
  no_args:
218
218
  get:
219
219
  <<: *token_required
220
220
  with_token: '{"data": [{}], "paging": {}}'
221
221
 
222
- /lukeshepard/picture:
222
+ /koppel/picture:
223
223
  no_args:
224
224
  get:
225
225
  no_token:
@@ -268,15 +268,12 @@ graph_api:
268
268
  body: '{"error": {"type": "Exception","message": "No node specified"}}'
269
269
 
270
270
  /search:
271
- q=facebook:
271
+ q=facebook&type=page:
272
272
  get:
273
273
  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"}}'
274
- 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"}}'
275
- "limit=25&q=facebook&until=<%= TEST_DATA['search_time'] %>":
274
+ "limit=25&q=facebook&type=page&until=<%= TEST_DATA['search_time'] %>":
276
275
  get:
277
276
  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"}}'
278
- 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"}}'
279
-
280
277
 
281
278
  '/115349521819193_113815981982767':
282
279
  no_args:
@@ -370,12 +367,12 @@ graph_api:
370
367
  with_token:
371
368
  code: 200
372
369
  get:
373
- with_token: '{"data":[{"callback_url":"http://oauth.twoalex.com/subscriptions", "fields":["name"], "object":"user", "active":true}]}'
370
+ with_token: '{"data":[{"callback_url":"https://oauth.twoalex.com/subscriptions", "fields":["name"], "object":"user", "active":true}]}'
374
371
 
375
372
 
376
373
  callback_url=<%= SUBSCRIPTION_DATA["subscription_path"] %>:
377
374
  get:
378
- with_token: '{"data":[{"callback_url":"http://oauth.twoalex.com/subscriptions", "fields":["name"], "object":"user", "active":true}]}'
375
+ with_token: '{"data":[{"callback_url":"https://oauth.twoalex.com/subscriptions", "fields":["name"], "object":"user", "active":true}]}'
379
376
 
380
377
  # -- Mock Item Responses --
381
378
 
@@ -0,0 +1,97 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://graph.facebook.com/v2.8/119908831367602/accounts?access_token=**
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.1
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: OK
16
+ headers:
17
+ Access-Control-Allow-Origin:
18
+ - "*"
19
+ Etag:
20
+ - '"eb18193fa5a61a0264d71c9e4f4168e943ca436a"'
21
+ Pragma:
22
+ - no-cache
23
+ Cache-Control:
24
+ - private, no-cache, no-store, must-revalidate
25
+ Facebook-Api-Version:
26
+ - v2.8
27
+ Expires:
28
+ - Sat, 01 Jan 2000 00:00:00 GMT
29
+ Content-Type:
30
+ - application/json; charset=UTF-8
31
+ X-Fb-Trace-Id:
32
+ - HtQflzsMQaU
33
+ X-Fb-Rev:
34
+ - '2842759'
35
+ Vary:
36
+ - Accept-Encoding
37
+ X-Fb-Debug:
38
+ - FY3EL2d5Fp6ASXztjr4tzWFb2SjyvwosNN7GwprLYy+aZhu/+7hkS/uUjBlKREJyNCHY8AwBghZs9bo5W41Svw==
39
+ Date:
40
+ - Sat, 18 Feb 2017 16:22:30 GMT
41
+ Transfer-Encoding:
42
+ - chunked
43
+ Connection:
44
+ - keep-alive
45
+ body:
46
+ encoding: UTF-8
47
+ string: '{"data":[{"id":"131686830683789","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/131686830683789\/","access_token":"EAABtDnNMkbIBAGjJ4s9beYAsY1Tzc2uMF0aUlZAi1s1O19ZCGh4mpvWQNTcfjA2OkjYoD7pjZCKZAxPGjg0isXqegKZBltzztwYOZAml4Y7J007ufSFjpTV0Eb6ZAziyD7LTK88FJZA2rGsnTe76pYJkkwg0w8VHZCDXSMpX12L6ZAWFYwYXi8zSVE73Nwh2AULZAgZD"},{"id":"114995779022706","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/114995779022706\/","access_token":"EAABtDnNMkbIBAHk5PgPdB63JMI0XvJDJJvRnLEmBXzFi4qMYyrcy9c20CoZBVwVMXhI3wSqqY2f3lA8rqvfZA3uF5jC2IgdiqzAhlksDScMJm2hKeD900815V4M2Bv581d6mrizfKySKKYXVO7OmQSOUMYjzCTcz0jIGY0QuvMdXZCCqsYlM8gQG8jrf8oZD"},{"id":"108214206368977","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/108214206368977\/","access_token":"EAABtDnNMkbIBACak3hxf98Nw657TlDW3gDbmb7bKYJnGMa1UUheSdadQKkHcNvSasObinxEd9g17wcMqmlJ62a4ssOCz0ZBqTTIvARnSZBAunZAa27r9ZBJFQeXtCV2e1G3qNr3c1BRP54XdRLsfj9G0dZAD4wcGMyk184uE5aUYxhweVZBTf1wYeZB8ZCTbAogZD"},{"id":"131778770674391","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/131778770674391\/","access_token":"EAABtDnNMkbIBAD9nLMYPqNidDiGwy1ngv388NkupZAnZAAgjHkgeNTTPNQt3MXd0w166r0WPFMSRNG7kNRf8gfsZCZCwUxGbSsrQsDeqInmfFWWGiEbIGPmWKIW9FWPToNSgIQdartLxnFEqZA4aAu21NGbvh9R9x6WmY8Fn4bDdlTKqlQQmkPVlREbRG0sYZD"},{"id":"133747960477364","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/133747960477364\/","access_token":"EAABtDnNMkbIBAIvwOmNyT1m9kWKS9UOQNo9LuYXPziW7vqFfZAqW8wrkPtpGZAQ35QHZBRDDbrsVQ7lZCFZAko13MaYgkGm9kVXhdDk1i64jUVC0dK3jajsa6AsRKvzXnr5i0I3f63o1hEEFltXvkIof9kc6ymZAxpBfvlPZBA4bOy9DX3Wy3jWEh6NkkZCtCRoZD"},{"id":"104151963442966","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/104151963442966\/","access_token":"EAABtDnNMkbIBADvEXZC93DlZBZBMA1L0NdZBV9DMtemD2GSL2MvZCO3dpLMwotOFC4YXhMIfdZAHSyIbYeyLWmpua2trkCkdqLxeipZBJ4eavsQZBrQXOzZAl1tSZBfm2mrUfZBZCVgO2ZBBSy9qB39hLronZCtEykPeSG2ILpxGMVSeXRIlfDyhPpvodbuqKCac9lLiYZD"},{"id":"100424303817312","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/100424303817312\/","access_token":"EAABtDnNMkbIBAEQx0BD5zATwZBoux1YZCSLWwL0Py40qCSsBA4ITD3cu3KzKsQZC3V7E6u0TZBxZBAZCnF3WpKt2CcLxYpYS29Eu2xlzKmPgHuxWmgxgtVtKfOfakEbitz6kZCIeg9zvMwU0zW4KZCejnOlBVRpP4pZCXg7s9mUO3roMDc0Qbg7NrUHyKYTUFRO8ZD"},{"id":"131906273995120","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/131906273995120\/","access_token":"EAABtDnNMkbIBADbZC2CLp54uRPO3ZC36txPEeFCa6cFdZBKpEnx8WHRAQa44PNgJGcsWgJtB8YBa2OqcjLqEvhPMZBuuwU4ltNvs5TEdmqhAZBxvA2wQUasq5n9tn8jvhUtyXSYCSg6GpBTEjitnsyCiKPUJTwdrf8yCtoAraPI67CGrHD1VkD0LGeGW2OmkZD"},{"id":"109566936233385","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/109566936233385\/","access_token":"EAABtDnNMkbIBAKVpbyZAYTrPoH2H4tzrn0y1RYNywzQRUZAz3sK76ZBEDzwOlbfj88ZA3WdCs2a4bbXb17TOdY5IYtJzSdevq24P6J1AIJTxdxEFgV71hIiOCVpPlnRDZCgHJgX690d81dzxIqqTXyNAFMa16cZCKIUgKuqsu8ZC6ZCArZC0ueZBFbyJ68EBbXoVQZD"},{"id":"122862174901367","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/122862174901367\/","access_token":"EAABtDnNMkbIBAAnZByPQnVgwRrDCNcbY3HX6nLyjkjZBuKgcZCbMt0vDvAdOL0JMeHYXD2ftlZCpO1pOg2mtCDRPv3OjUMCmv2TxTS3KwaLnDWMC2ud0FGkfh4ZCOjZCvHqwSlwsUWsUcRi3lleLBoyZBUXizVZCHCSdtEvfyEdh3bK3pHZBUzXZB08OfANP6q76cZD"},{"id":"127147561138873","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/127147561138873\/","access_token":"EAABtDnNMkbIBAJfcR5yPNgsTeiIXYtDYfYgZA6hayjp3mnxxQM0E8cZCn3Bjfq9Ywsozvo8dr0dFZCAzyOP4ZAi1jnUQbVnKQv4DaXLOaZAarAs1B2IxUztUV0QZCKuBOpz8PmHyc45AYoDvdQeWDz1xCbeEab3vXijDdZAhUM8OMi6IrGNYDUUoLEvuZBX17MIZD"},{"id":"126836924502797","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/126836924502797\/","access_token":"EAABtDnNMkbIBAMBMZAavwZBNW5kzkYZCzQEeIzW2udjQQvTqKmYYiFqoaOK8l6ckGx7l49ZArGI0YF31PQ1oCSh4oFxO3syL90ZCbhpgfjleYMYhIGxne3DhZCfkZCBaLiZB1lKVWZA1mam9MnTUewKOMItVJPCcUZA3sUGWnDZCaFvbwZBcHeoPvW9HmcZAXGAe3oZBsZD"},{"id":"112078279315072","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/112078279315072\/","access_token":"EAABtDnNMkbIBAKf9pfJ8ke5KV42kfCZCALLK7mPSOyvpJkCIiVyZA0at9xYus3CZBDKSw2NZBuOOiaf6cn1ipzzbPrI39LPKh9ZAOpC0Lj5PKXuYvl4OBR4GB6N32L0D4TMCZAEH2iYZBX14LpXs7ZCwsl2PWIMayOuYOff6YSu02Wt9PfZBB7JoXZAcN2SMsHnooZD"},{"id":"108723689651308","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/108723689651308\/","access_token":"EAABtDnNMkbIBADZBAeZBaOvlz64XN4WAF2m1g1g6ZCyqjdwbmIQrASEpNNqy7H0NOpUzDUquHNJi97mIjv6IdidZBUZAU2lWwSSAHmlLLB0q84QXZAZAz6xJp4xsUMMUvsNa3APcN7QhKPF4zhKmuzuu2SdYfVdVjA7I1nTQEb8CpIyP2Htu5VnZAOAdobmCTYMZD"},{"id":"114488749073472","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/114488749073472\/","access_token":"EAABtDnNMkbIBAFhIIDjbIiVuN4Q6sOHpy0fvBs0QCRykWL0gdj1OSidjvZBzMH25QUoU1HZBFXVRJZA4qTBdnjCond4ypEZAINd7jAVBt03G01tHKIhpcVSRXWk5wn3HOHpgA8GzpV8NvUZC2ymLoWrk5RZC2ZCC5UvITGP1T8EB6kFY1oLo7jVQL0criBhZClIZD"},{"id":"118718808649710","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/118718808649710\/","access_token":"EAABtDnNMkbIBAG3dfELECNObuOxFqtZAZCZCC577mkaOcpuNK6aEVpYtv9ati95qHFIECJTX9nvJ8hSSuqzB6ON7C3Yl1uMFAVdN6oiMHsUkp3zIvzIDVuAJIEoxjXIGnENURHNZBf8ZBQ4SEYIvZBXomrWlmXWUaDf1p3DvIINvEFvt8yIH4YbS7mgUynVCgZD"},{"id":"131954293990150","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/131954293990150\/","access_token":"EAABtDnNMkbIBAAavOhdJTonQYyunLEh9LmEwGOizNUlZClpz8v7evZBm7gLeEm8sWjhVRVUYhZCwbgNHGyfQg6jnn3flULM8udv9jKTxtMHyxJUBJ2ZCXuDQu3epd4IypF0TbZCYzszZCQfSZAlbfNUZC2DuBOfSIbbWhDJ06NwJxky0o68MmACma5fofKtm5yUZD"},{"id":"132106613975105","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/132106613975105\/","access_token":"EAABtDnNMkbIBADqUSUnefbp6rUmS8Ls5nQ7VAZA3VklBU2QqhDKDbtEDb4ce4GfBjPElFzeSxyq6HKxbvUmZCFvhs0ZAcKaWpWBZBNPIRa16j8A8RYZBtJ6pXTonZBo7hep7hd4oNLdhu5IX7AwR9znAbip3xirqxl3U4qQd6ZBbKk1FJkBputywWthI44ttQUZD"},{"id":"100827877110010","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/100827877110010\/","access_token":"EAABtDnNMkbIBADcgZBRa2KP7pkyvt0D29agCKSCxMQ4KUrQZBuD9QukLrpwR1Pt7G4eZCTwYQ7tq1qxoaKHTMrwIZB5tqcjbKpn9Ndee4QcYc5qG9SqYamtZBqbSW2jl3jpo4uhM6QxuTdsq0nx6IS3V3waTUbPiN4pcZC7A2zvdTrFfgX6zsMtScTSxDYJHAZD"},{"id":"127572984429742","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/127572984429742\/","access_token":"EAABtDnNMkbIBAFTOQgzYZCpHsApz6vYr7kl9ZBeWZBRrpETE7L5gcBnRTtogo85HkPgLoaDk0DGVzv1ZAQQzQLENb4wKQB5KEFfQ38Kx0SnSlKGul5oJ85EkJLvE5YZBdKZBcUsgqFjXWW0PQC3y5Xvd9WDwX3WZCa9pSNIbqVGyRutevSSN4QAhl9dXqAOzi4ZD"},{"id":"120845621770035","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/120845621770035\/","access_token":"EAABtDnNMkbIBAPcNANL59pvimIzoXtfUa4aFuZAVEyibc13VdP5NyQ6iyyRB7QUHa1ok0Yi0gVm9xMJRPbEJG00pqOgpERVx9tTStIFjCgijivQ0PeSZA4hC8PyUePwENlcpKQaPMhbgkUIiPrzGCoOMDmMUE7uqP3oEROS4QQYQaK7iZCxmUhFKZAvSaygZD"},{"id":"100373623822380","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/100373623822380\/","access_token":"EAABtDnNMkbIBAKWQD1ukUGVIcy415IrBhsIqLxVX71oVZCZCmS2ZBggu64wIb84QHkMbyS2zslfQoUxvPSFb0lWURp399szgjy91ZAD8UdUITUvzfV3i0tkMOTZByu3q5grzTs8mcL3F2b4g15kJvhZCQnIYhNHZANuZAeR2HM6oxdlZC4cyVTLVefa1hpppwHvoZD"},{"id":"132646663920907","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/132646663920907\/","access_token":"EAABtDnNMkbIBAJwiX5O3YmWu80ybTUHHJCnDymlWe4Ywzl6FkfOrhrF7xOxeOTDZCudBakoLapV3ZB5vMkBZCXhC5h2iBmlZA1n0GEHADI7BECnTvz6I33jg3z1plPvmUneFEzYIZBcJUUZASyMadwdD2ZBiJ5xNF9WRjZAKBFhbmxQGDRMZCEONtuD6OtIN0zlwZD"},{"id":"112299049292999","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/112299049292999\/","access_token":"EAABtDnNMkbIBADt7tfFmFnbhnAiSuZC69Mf1xNqsZBhClnghYrkCdR8DeF00qP2uXRTRHDV2xaNLGHMOWrkP9GmMAvF4ZBgdg0Bbug7WNMaQ4zboReTsPtgwF6noeahv5g7Urs4PfoQnHHLxJDxrffOwSpsyx4ZCUtXgBVMZArgrZBTgATLwRVZC67KfQbrzGoZD"},{"id":"111993045990341","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/111993045990341\/"}],"paging":{"cursors":{"before":"MTMxNjg2ODMwNjgzNzg5","after":"MTExOTkzMDQ1OTkwMzQx"},"next":"https:\/\/graph.facebook.com\/v2.8\/119908831367602\/accounts?access_token=119908831367602\u00257Co3wswWQ88LYjEC9-ukR_gjRIOMw&limit=25&after=MTExOTkzMDQ1OTkwMzQx"}}'
48
+ http_version:
49
+ recorded_at: Sat, 18 Feb 2017 16:22:30 GMT
50
+ - request:
51
+ method: get
52
+ uri: https://graph.facebook.com/v2.8/119908831367602/accounts?access_token=119908831367602%7Co3wswWQ88LYjEC9-ukR_gjRIOMw&after=MTExOTkzMDQ1OTkwMzQx&limit=25
53
+ body:
54
+ encoding: US-ASCII
55
+ string: ''
56
+ headers:
57
+ User-Agent:
58
+ - Faraday v0.9.1
59
+ response:
60
+ status:
61
+ code: 200
62
+ message: OK
63
+ headers:
64
+ Access-Control-Allow-Origin:
65
+ - "*"
66
+ Etag:
67
+ - '"7e9c736950aee7b006b66ad3a460119f6b8f2722"'
68
+ Pragma:
69
+ - no-cache
70
+ Cache-Control:
71
+ - private, no-cache, no-store, must-revalidate
72
+ Facebook-Api-Version:
73
+ - v2.8
74
+ Expires:
75
+ - Sat, 01 Jan 2000 00:00:00 GMT
76
+ Content-Type:
77
+ - application/json; charset=UTF-8
78
+ X-Fb-Trace-Id:
79
+ - CBypqZtNaNN
80
+ X-Fb-Rev:
81
+ - '2842759'
82
+ Vary:
83
+ - Accept-Encoding
84
+ X-Fb-Debug:
85
+ - 0LPGSvsIukRzUsa2w+m8GYTQlSxvCZsIoQSFWQgN8cu5EVjPZoEiU32DinTRbL1MW6HSAFSMIohJPMbRvnEZpQ==
86
+ Date:
87
+ - Sat, 18 Feb 2017 16:22:30 GMT
88
+ Transfer-Encoding:
89
+ - chunked
90
+ Connection:
91
+ - keep-alive
92
+ body:
93
+ encoding: UTF-8
94
+ string: '{"data":[{"id":"125798281273437","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/125798281273437\/","access_token":"EAABtDnNMkbIBAHOwQxS8RqCdzTljGrYpNTiL7gpeeZB4bS4nBZB9hSe6GGdnyj61ZAz00mhZAWJcM484SZCd8zBzxuMl7AeZBj6wLZAZBLU0r3x45VhvZBN59VNAWNbKUJdNnlm1yZCPKrWVQtrkwOZBFIaV34LJptBnpeZBhxN9FCFSZB28rtqJwVYS9iBXNnOaPCSQZD"},{"id":"114443985744460","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/114443985744460\/","access_token":"EAABtDnNMkbIBAGWSUp8zyVoOHIcVLa9WdgV50C0w5XSpadlyVbVZBj9GEvlTL0uChdJuuZBzmB7X4YL6nLzTKvqVMa8MsHzyyWuGpKsPuZCd4pRgl9hRIzmiIvCGZACvF36qWwLrrD1hWdzqtOm0OWyDv3EpZCynM2fIv1IVs8L0GYNgdWQ7hkXroozsFXN8ZD"},{"id":"100212287171639","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/100212287171639\/","access_token":"EAABtDnNMkbIBADJZC9YPfjXUw0NRJazZA92mFZCHiuuGvNJrWjbGlDYDMryYCCvFDpSa8HyqQcwqrbYkxjZB0WWs82A79gjTBxX7ZCbEjq7kWcW6UMKM4g7bHv0fow9wt1bsSWYcDKDLY3juPPbQDjqDAaTb58ZBPX0iUqq1EubyGWMwwqeCq62oZAZAtKF9XbUZD"},{"id":"117981365390106","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/117981365390106\/","access_token":"EAABtDnNMkbIBAFQHCDUjysIw0Atj8o2sx5ZAmCLjItgvp5Rd066DL6u4EISVCZAd3AQrHXLoj2cGPdsYyBwWZAGMJSvcrmDH77cOWYLtKuClnLL3cgNJSMmZAMfNXYhLldvp1MyZCF83088ifGJ8Y4jNYF2GB7MQGGma0eJ2aSrrViTPofoX7HrIbXXtmv3EZD"},{"id":"118562311998585","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/118562311998585\/","access_token":"EAABtDnNMkbIBALApADZCoqMoFzMQnMbhJq0JAjNyOqcNHPjQEXcq34ltvVVtK8vFeOOn6ZA4xU0DN0FgzTvzpVFX40IsRvRPQ2G9kUEEYQsTkJt7af2kwREGcg02MIfsxw7FOVOZAofo0dUM7OSHa11SVbUt0RlPIgeJPsU8AFVol268Ydh6tZBSAFSRbh8ZD"},{"id":"112915182564309","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/112915182564309\/","access_token":"EAABtDnNMkbIBADBs6QL7wCZBHCsKI7GwqpG8BDZCDSuip7hX3UYSwMR7XX2IwmGv5YcOAGagfMlseMYILVad5aZCD3gjE6dfJGvOjo601gMTR2UhT8ZApzIxhQdo8HqWToOxzFyjN4GzHqyOwEYX4UI56KYyfJXuPqZAL7SQIABFwoWR3IdhaP1DQAFZBODlQZD"},{"id":"121283758392614","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/121283758392614\/","access_token":"EAABtDnNMkbIBAOJa8QsC9c1aWU1D8r4z8Kp09dBqSH4gtRTzWd38UHYQnPNxelxgpHvdw6MSgRAapK7pHoiooAGZAd9fxJqd7ZAFHYjf3rvAontxIHgHNZA0UOt3bqC0DHBPCnQrR0jGJqsKOBmbMDh7n754cZBYXTaMHmimEFpFP6ET2qAr2n7TzIdptAoZD"},{"id":"109762849546914","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/109762849546914\/","access_token":"EAABtDnNMkbIBAAZAZAmjRM8OpZCroUsSGZAs0M7NgkFyHvbfzrtyj2wZCIsUCg4OnbcfjksVbZCsrPNTtSuyAVCt8ccVshwLD1Ff9lT6RHXm1Pr4pTbI6ov1CdUbQ4OZCJ9xInvZB2D1g8TjdbrgAeB2MCXQqAAa8hzATror0kidHi2T3g2wkNcPnnZClTvkKBn8ZD"},{"id":"117739112080670","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/117739112080670\/","access_token":"EAABtDnNMkbIBAG0YyZCZAz6QpRiXHTmwBDfqZAHk4jyIpbQJAeGswJZCLtY6xzjBrzewsDDZCkswuMnqMR5QvHbZCg26HdGFcneWMEQo2Uxb2VTYkuinHsyxVap3AfiVAjQBMTIxpPlERFZCnkNPUjW0Pn1rpjjbRe3ZA5Q5pvHbGUWCmCN2OfQm9FtJlagEQWwZD"},{"id":"128682634317437","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/128682634317437\/","access_token":"EAABtDnNMkbIBAFjZBZCtwoUzi5fJR73CtnXG0EQuIPOJlHEc59fTI8VibvfkpAse6KwkvzvvQZB4JGEuR0jDJ3oEFIrZA9VHm8P4UkOLab2LRK6ZAcSLI443GP3YgBZCTj8iUTL30OMyvUqLVtXFfLs7H4iVZCCosPWPP7ZBF0LuKQbszLIO1cn3IxPpbh1ZBC2MZD"},{"id":"110473496142007","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/110473496142007\/","access_token":"EAABtDnNMkbIBAMNIZAozYoZCYlzFAWNcgQcLvr8ZCdNzkydf1CIL11MZC4lgpsJsxco7omdOTujeZCTtDyKZCO2UJtedPIZAVni8ikw5fOG3yce6GsZABsvI43SVntsEbcXPtxKYwPwLaEcy8hz2rbeodnFBPM00PJcIUSslGjJKZAZA0zleVbrSA3lXLyrETTVUgZD"},{"id":"122991804887942","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/122991804887942\/","access_token":"EAABtDnNMkbIBALMHhJ8JAwwvnTh9nqrisdcHGZBMQiQvFa0qOKf0Ld7AVlZAKkI8kQz0WUBXAmZAp1nm4ft2ejZBkOYGwAuoNNdU1ruCZCBROTdZA7xzmAPD4k93yduyUjC9pkyRiTRyWAxfy3N87G5NaE8dgq9igkdEcn4A3tWncKGZAGOQZAZAflJPKYdUSA64ZD"},{"id":"134271380424517","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/134271380424517\/","access_token":"EAABtDnNMkbIBAA7Na9BLonHUubJFEFSSyEGgZBlhDaEeqdoY4g6GVfdgmZBshC20TuoBoZAw3mhVAjrsWitu9ZBbWVgxjjdo1MmLvZCrQN2oVzpDCZCGV3vAppM6ONZBEWCBkc0TvN7kkRJUKgWeGFBGiFJd7d7qH0ZAKr0N2pLM9kDfHT644S2YvIk5PBTN66sZD"},{"id":"101885090336486","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/101885090336486\/","access_token":"EAABtDnNMkbIBAM4yyUAGZAMcSg6wGn5SPRWz6CnTe789IaDo8nn7LMA2sThVJjk2nxiPoonKCKDbwx4QV9UaZCZA3snxtKHDZAkFOMsINW52n4Rh8cGAGHlTngZBMWZAO2oTEx5eIsqsr1oYZBQqhiwAdsEiGxDk3py4y3lIHUnZCjrnyX38m0ZAaZAI3h3TjMIEAZD"},{"id":"108363739686592","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/108363739686592\/","access_token":"EAABtDnNMkbIBAMh2hOT4gXx6BKZCZCZABsrRWI0kM7vZA3YSktHrMHwW2heljqZCvRo8w6SvOlfSZBcQOmOtQKM4GUkBpAzugwwtzKhEh0BpnLsHuIsT0U1ENAZBVIHjLHzK7e4poVr2mrthvTGOCe2u30S76HajsnX9uemd08AZCZBKvEqabyhVg1pVleJkYA24ZD"},{"id":"103009976890118","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/103009976890118\/","access_token":"EAABtDnNMkbIBALwG9w1699JAmpNauB1pH57taercbOF1v7OEtxk66CqSOaU9JiZBTpDRUqY5BjeLSjxsLrJRSgVFXwZCkj2xhv07gc51atV8XZA5XhRy8TNhYpmAkImJrhblNnserqmEKZBh7ZCfVSKMZB1rHsxIFTNpeSA42VVR9dZBH0XCeXA0aMsyPhxi7sZD"},{"id":"106798253176843","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/106798253176843\/","access_token":"EAABtDnNMkbIBACNoWodogmtcR62Q7o2K3MiIiQtjBZAkfoSZBYCGEUsxhvSh97DpmMcV6wMLK2glnafkm3gEgOoxohMQXYEQlxzf5QkqaDPnIgT2ZAYuP0MMJEkyyuoQ7X8I3MxB1CdGZCaGxxmDQCZArKUnLEcGSfXtd0dGUZBrLpBJpnO261vzDtWgaqZAPwZD"},{"id":"126605231192422","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/126605231192422\/","access_token":"EAABtDnNMkbIBAEXaa69QZBophJkDN2D1LbjBps27zwek5KZCNdnuVdnuxYfz5ZCntOYhfET3oyQCxQC4aSbTeaTZA84TKO0YBtfIPQsmoV4WsX7rKdtqJHv1OFZBLSlAZC59cLIswjv71ImIzzUeEdSrJuATZBiIRBdFFttLGhglI8IscAZCFZA4ZBna6ljpBSRX0ZD"},{"id":"101330510391991","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/101330510391991\/","access_token":"EAABtDnNMkbIBAMcvlgvtdKEthgcWabktKPyFRAmedZCEGiJrhEql7feYCGGYzdHZBt2dyVz32vFRy2gUZCTNW4LtmCfWECQla7vtS0wxGooIQZBtSwGuZCPxZCKyITJnQ1y7OZBAJMBnXsR1asg4KbcFegcvhqyiwdwOeUqgVEUgNfJkByrqnzM81Ws5pe0VtIZD"},{"id":"105505479973088","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/105505479973088\/","access_token":"EAABtDnNMkbIBAHsVBuHJBnDvtMBgf1HO7mSfexb463fOarEdu2ZBkinKUJAFgDfvna129s0SWdS6CdrVlBGNLXZAwfucMqXfXrSe5WwYXY8Qt7PLLZCEByyjwBJCRyQFVO6pq3F1D5Y9WTebwrl0qHUZCz7ZCr6yzh8wO7VtVMTyKpPZAlCZCEo32X3lDrZCxXQZD"},{"id":"107216613134895","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/107216613134895\/","access_token":"EAABtDnNMkbIBALuLLgaK6JS0dCAuyQIcJVQRiZAzKDBdQIUXvmN9VTrEBqCErVrKVtaxxv7xw6nrZB52DP6JhzkUDZCQtouHZBc0XyIlcmJtRghnraudvcQQHzzzX1ZCaCAnjYnep4SxZCRcbmZBguLaUoQXNygYqnvjmh1ZAUEJP8DdTu6xSzBpp0ivLJ1nCuAZD"},{"id":"134002377117793","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/134002377117793\/","access_token":"EAABtDnNMkbIBABKtcAotDo6YWjUGy9kxyI6iMmM1i6UZANrgYtPOsTJUXZBa2gDM2YiAK7hmrCPLT3k00yre62pKCEZB7dP49yVGLRLhsZABHnHRQJBnTa2wpIqLKYtAZAdUdOaAB5hb20WsI5F3iYZBT7VQWpPY5EJRZCuLxd6pLzLTjXuk7Ertmlh5GsmdRAZD"},{"id":"102515120271368","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/102515120271368\/","access_token":"EAABtDnNMkbIBAJqy3QDoH0YaOFhPcb5r0xz8ByPD05ZAtEFQTRubbPfW6EUEGNrPirUuh7IEYNRQEoZACtrL1aCZAXeWGYAb99MpokxkGZBj0clOmfsKfwNUfXubVixtTVRUvLl9B5yaS645a9jSvR6LF8VYxb1WZC8SJDiZBhdxLaOVyW7tTOlyZC2IX0VaUcZD"},{"id":"114232912430044","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/114232912430044\/","access_token":"EAABtDnNMkbIBAI7TiBwT3IYknbZAz2Xt59AJwJXDT1DysXvCZB8vzQZA3UElRj2GadxWWUHd7ZA10eYJEsvuk5zbDbsgtdSpUJaSGlJKK2ZCJfsDUHWJN3ZAQL6IpH456ErDAocT95bjvhgbUerGSO1SXze1rUWHddMJWhLjdoa8juVwgHjCJ0MFuDLBbJ2X0ZD"},{"id":"100190163838009","login_url":"https:\/\/developers.facebook.com\/checkpoint\/test-user-login\/100190163838009\/","access_token":"EAABtDnNMkbIBAKEHD5z8s5ZAEu10xVQ7mJt21pnEapDLZC240fZBQJQqAnoZBW1CgwUxZBoKG8aoOHV6npvT58ZAWxUwy7zBsuztM7KhAqi0MPQ0BuMhOtyqrjTZC8WQlh325vP3t0WJr6odmMd7l36qRAQQU2aihSM2SZAnZALTVQfuvyQLrHQLaENLDZAJmhp1wZD"}],"paging":{"cursors":{"before":"MTI1Nzk4MjgxMjczNDM3","after":"MTAwMTkwMTYzODM4MDA5"},"next":"https:\/\/graph.facebook.com\/v2.8\/119908831367602\/accounts?access_token=119908831367602\u00257Co3wswWQ88LYjEC9-ukR_gjRIOMw&limit=25&after=MTAwMTkwMTYzODM4MDA5","previous":"https:\/\/graph.facebook.com\/v2.8\/119908831367602\/accounts?access_token=119908831367602\u00257Co3wswWQ88LYjEC9-ukR_gjRIOMw&limit=25&before=MTI1Nzk4MjgxMjczNDM3"}}'
95
+ http_version:
96
+ recorded_at: Sat, 18 Feb 2017 16:22:30 GMT
97
+ recorded_with: VCR 2.9.3
@@ -2,16 +2,19 @@ require 'spec_helper'
2
2
 
3
3
  module Koala
4
4
  RSpec.describe "requests using GraphCollections" do
5
- let(:api) { Facebook::API.new(KoalaTest.vcr_oauth_token) }
5
+ let(:api) { Facebook::API.new(KoalaTest.app_access_token) }
6
6
 
7
7
  before :each do
8
8
  # use the right version of the API as of the writing of this test
9
- Koala.config.api_version = "v2.2"
9
+ Koala.config.api_version = "v2.8"
10
10
  end
11
11
 
12
- it "can access the next page of a friend list" do
13
- KoalaTest.with_vcr_unless_live("friend_list_next_page") do
14
- result = api.get_connection("me", "friends")
12
+ it "can access the next page of a test accounts" do
13
+ # NOTE: if recording this cassette again, you'll need to swap in the real access token. It's
14
+ # been manually edited out of the cassette. (Once all tests are switched to VCR this will be
15
+ # resolved.)
16
+ KoalaTest.with_vcr_unless_live("app test accounts") do
17
+ result = api.get_connection(KoalaTest.app_id, "accounts")
15
18
  expect(result).not_to be_empty
16
19
  expect(result.next_page).not_to be_empty
17
20
  end
@@ -1,5 +1,6 @@
1
1
  shared_examples_for "Koala GraphAPI" do
2
2
  # all Graph API instances should pass these tests, regardless of configuration
3
+ let(:dummy_response) { double("fake response", data: {}, status: 200, body: "", headers: {}) }
3
4
 
4
5
  # API
5
6
  it "never uses the rest api server" do
@@ -13,80 +14,7 @@ shared_examples_for "Koala GraphAPI" do
13
14
  @api.api("anything")
14
15
  end
15
16
 
16
- # GRAPH CALL
17
- describe "graph_call" do
18
- it "passes all arguments to the api method" do
19
- user = KoalaTest.user1
20
- args = {}
21
- verb = 'get'
22
- opts = {:a => :b}
23
- expect(@api).to receive(:api).with(user, args, verb, opts)
24
- @api.graph_call(user, args, verb, opts)
25
- end
26
-
27
- it "throws an APIError if the result hash has an error key" do
28
- allow(Koala).to receive(:make_request).and_return(Koala::HTTPService::Response.new(500, '{"error": "An error occurred!"}', {}))
29
- expect { @api.graph_call(KoalaTest.user1, {}) }.to raise_exception(Koala::Facebook::APIError)
30
- end
31
-
32
- it "passes the results through GraphCollection.evaluate" do
33
- result = {}
34
- allow(@api).to receive(:api).and_return(result)
35
- expect(Koala::Facebook::API::GraphCollection).to receive(:evaluate).with(result, @api)
36
- @api.graph_call("/me")
37
- end
38
-
39
- it "returns the results of GraphCollection.evaluate" do
40
- expected = {}
41
- allow(@api).to receive(:api).and_return([])
42
- expect(Koala::Facebook::API::GraphCollection).to receive(:evaluate).and_return(expected)
43
- expect(@api.graph_call("/me")).to eq(expected)
44
- end
45
-
46
- it "returns the post_processing block's results if one is supplied" do
47
- other_result = [:a, 2, :three]
48
- block = Proc.new {|r| other_result}
49
- allow(@api).to receive(:api).and_return({})
50
- expect(@api.graph_call("/me", {}, "get", {}, &block)).to eq(other_result)
51
- end
52
- end
53
-
54
- # SEARCH
55
- it "can search" do
56
- result = @api.search("facebook")
57
- expect(result.length).to be_an(Integer)
58
- end
59
-
60
17
  # DATA
61
- # access public info
62
-
63
- # get_object
64
- it "gets public data about a user" do
65
- result = @api.get_object(KoalaTest.user1)
66
- # the results should have an ID and a name, among other things
67
- expect(result["id"] && result["name"]).not_to be_nil
68
- end
69
-
70
- it "gets public data about a Page" do
71
- result = @api.get_object(KoalaTest.page)
72
- # the results should have an ID and a name, among other things
73
- expect(result["id"] && result["name"]).to be_truthy
74
- end
75
-
76
- it "returns [] from get_objects if passed an empty array" do
77
- results = @api.get_objects([])
78
- expect(results).to eq([])
79
- end
80
-
81
- it "gets multiple objects" do
82
- results = @api.get_objects([KoalaTest.page, KoalaTest.user1])
83
- expect(results.size).to eq(2)
84
- end
85
-
86
- it "gets multiple objects if they're a string" do
87
- results = @api.get_objects("facebook,#{KoalaTest.user1}")
88
- expect(results.size).to eq(2)
89
- end
90
18
 
91
19
  describe "#get_picture" do
92
20
  it "can access a user's picture" do
@@ -123,27 +51,6 @@ shared_examples_for "Koala GraphAPI" do
123
51
  end
124
52
  end
125
53
 
126
- it "can access connections from public Pages" do
127
- result = @api.get_connections(KoalaTest.page, "photos")
128
- expect(result).to be_a(Array)
129
- end
130
-
131
- it "can access comments for a URL" do
132
- result = @api.get_comments_for_urls(["http://developers.facebook.com/blog/post/472"])
133
- expect(result["http://developers.facebook.com/blog/post/472"]).to be_truthy
134
- end
135
-
136
- it "can access comments for 2 URLs" do
137
- result = @api.get_comments_for_urls(["http://developers.facebook.com/blog/post/490", "http://developers.facebook.com/blog/post/472"])
138
- expect(result["http://developers.facebook.com/blog/post/490"] && result["http://developers.facebook.com/blog/post/472"]).to be_truthy
139
- end
140
-
141
- # SEARCH
142
- it "can search" do
143
- result = @api.search("facebook")
144
- expect(result.length).to be_an(Integer)
145
- end
146
-
147
54
  # PAGING THROUGH COLLECTIONS
148
55
  # see also graph_collection_tests
149
56
  it "makes a request for a page when provided a specific set of page params" do
@@ -151,17 +58,44 @@ shared_examples_for "Koala GraphAPI" do
151
58
  expect(@api).to receive(:graph_call).with(*query)
152
59
  @api.get_page(query)
153
60
  end
61
+ end
154
62
 
155
- # Beta tier
156
- it "can use the beta tier" do
157
- result = @api.get_object(KoalaTest.user1, {}, :beta => true)
63
+
64
+ shared_examples_for "Koala GraphAPI with an access token" do
65
+ let(:dummy_response) { double("fake response", data: {}, status: 200, body: "", headers: {}) }
66
+
67
+ it "gets public data about a user" do
68
+ result = @api.get_object(KoalaTest.user1)
158
69
  # the results should have an ID and a name, among other things
159
- expect(result["id"] && result["name"]).to be_truthy
70
+ expect(result["id"] && result["name"]).not_to be_nil
160
71
  end
161
- end
162
72
 
73
+ it "gets public data about a Page" do
74
+ begin
75
+ Koala::Utils.level = 0
76
+ result = @api.get_object(KoalaTest.page)
77
+ # the results should have an ID and a name, among other things
78
+ expect(result["id"] && result["name"]).to be_truthy
79
+ ensure
80
+ Koala::Utils.level = Logger::ERROR
81
+ end
82
+ end
83
+
84
+ it "returns [] from get_objects if passed an empty array" do
85
+ results = @api.get_objects([])
86
+ expect(results).to eq([])
87
+ end
88
+
89
+ it "gets multiple objects" do
90
+ results = @api.get_objects([KoalaTest.page, KoalaTest.user1])
91
+ expect(results.size).to eq(2)
92
+ end
93
+
94
+ it "gets multiple objects if they're a string" do
95
+ results = @api.get_objects("facebook,#{KoalaTest.user1}")
96
+ expect(results.size).to eq(2)
97
+ end
163
98
 
164
- shared_examples_for "Koala GraphAPI with an access token" do
165
99
  it "gets private data about a user" do
166
100
  result = @api.get_object(KoalaTest.user1)
167
101
  # updated_time should be a pretty fixed test case
@@ -174,8 +108,18 @@ shared_examples_for "Koala GraphAPI with an access token" do
174
108
  end
175
109
 
176
110
  it "gets multiple objects" do
177
- result = @api.get_objects([KoalaTest.page, KoalaTest.user1])
178
- expect(result.length).to eq(2)
111
+ begin
112
+ Koala::Utils.level = 0
113
+ result = @api.get_objects([KoalaTest.page, KoalaTest.user1])
114
+ expect(result.length).to eq(2)
115
+ ensure
116
+ Koala::Utils.level = Logger::ERROR
117
+ end
118
+ end
119
+
120
+ it "can access connections from public Pages" do
121
+ result = @api.get_connections(KoalaTest.page, "events")
122
+ expect(result).to be_a(Array)
179
123
  end
180
124
 
181
125
  describe "#get_object_metadata" do
@@ -186,10 +130,16 @@ shared_examples_for "Koala GraphAPI with an access token" do
186
130
  end
187
131
 
188
132
  it "can access connections from users" do
189
- result = @api.get_connections(KoalaTest.user2, "friends")
133
+ result = @api.get_connections(KoalaTest.user2, "likes")
190
134
  expect(result.length).to be > 0
191
135
  end
192
136
 
137
+ # SEARCH
138
+ it "can search" do
139
+ result = @api.search("facebook", type: "page")
140
+ expect(result.length).to be_an(Integer)
141
+ end
142
+
193
143
  # PUT
194
144
  it "can write an object to the graph" do
195
145
  result = @api.put_wall_post("Hello, world, from the test suite!")
@@ -202,7 +152,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
202
152
  result = @api.put_wall_post("Hello, world, from the test suite delete method!")
203
153
  object_id_to_delete = result["id"]
204
154
  delete_result = @api.delete_object(object_id_to_delete)
205
- expect(delete_result).to eq(true)
155
+ expect(delete_result).to eq("success" => true)
206
156
  end
207
157
 
208
158
  it "can delete likes" do
@@ -210,7 +160,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
210
160
  @temporary_object_id = result["id"]
211
161
  @api.put_like(@temporary_object_id)
212
162
  delete_like_result = @api.delete_like(@temporary_object_id)
213
- expect(delete_like_result).to eq(true)
163
+ expect(delete_like_result).to eq("success" => true)
214
164
  end
215
165
 
216
166
  # additional put tests
@@ -253,52 +203,53 @@ shared_examples_for "Koala GraphAPI with an access token" do
253
203
  end
254
204
 
255
205
  describe "#put_picture" do
256
- it "can post photos to the user's wall with an open file object" do
257
- content_type = "image/jpg"
258
- file = File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "beach.jpg"))
206
+ context "with a file object" do
207
+ let(:content_type) { "image/jpg" }
208
+ let(:file) { File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "beach.jpg")) }
209
+ let(:file_path) { File.join(File.dirname(__FILE__), "..", "fixtures", "beach.jpg") }
259
210
 
260
- result = @api.put_picture(file, content_type)
261
- @temporary_object_id = result["id"]
262
- expect(@temporary_object_id).not_to be_nil
263
- end
264
-
265
- it "can post photos to the user's wall without an open file object" do
266
- content_type = "image/jpg",
267
- file_path = File.join(File.dirname(__FILE__), "..", "fixtures", "beach.jpg")
211
+ it "can post photos to the user's wall with an open file object" do
212
+ result = @api.put_picture(file, content_type)
213
+ @temporary_object_id = result["id"]
214
+ expect(@temporary_object_id).not_to be_nil
215
+ end
268
216
 
269
- result = @api.put_picture(file_path, content_type)
270
- @temporary_object_id = result["id"]
271
- expect(@temporary_object_id).not_to be_nil
272
- end
217
+ it "can post photos to the user's wall without an open file object" do
218
+ result = @api.put_picture(file_path, content_type)
219
+ @temporary_object_id = result["id"]
220
+ expect(@temporary_object_id).not_to be_nil
221
+ end
273
222
 
274
- it "can verify a photo posted to a user's wall" do
275
- content_type = "image/jpg",
276
- file_path = File.join(File.dirname(__FILE__), "..", "fixtures", "beach.jpg")
223
+ it "can verify a photo posted to a user's wall" do
224
+ expected_message = "This is the test message"
277
225
 
278
- expected_message = "This is the test message"
226
+ result = @api.put_picture(file_path, content_type, :message => expected_message)
227
+ @temporary_object_id = result["id"]
228
+ expect(@temporary_object_id).not_to be_nil
279
229
 
280
- result = @api.put_picture(file_path, content_type, :message => expected_message)
281
- @temporary_object_id = result["id"]
282
- expect(@temporary_object_id).not_to be_nil
230
+ get_result = @api.get_object(@temporary_object_id)
231
+ expect(get_result["name"]).to eq(expected_message)
232
+ end
283
233
 
284
- get_result = @api.get_object(@temporary_object_id)
285
- expect(get_result["name"]).to eq(expected_message)
234
+ it "passes options and block through" do
235
+ opts = {a: 2}
236
+ block = Proc.new {}
237
+ expect(@api).to receive(:graph_call).with(anything, anything, anything, hash_including(opts), &block)
238
+ @api.put_picture(file_path, content_type, {:message => "my message"}, "target", opts, &block)
239
+ end
286
240
  end
287
241
 
288
-
289
242
  describe "using a URL instead of a file" do
290
- before :each do
291
- @url = "http://img.slate.com/images/redesign2008/slate_logo.gif"
292
- end
243
+ let(:url) { "http://img.slate.com/images/redesign2008/slate_logo.gif" }
293
244
 
294
245
  it "can post photo to the user's wall using a URL" do
295
- result = @api.put_picture(@url)
246
+ result = @api.put_picture(url)
296
247
  @temporary_object_id = result["id"]
297
248
  expect(@temporary_object_id).not_to be_nil
298
249
  end
299
250
 
300
- it "can post photo to the user's wall using a URL and an additional param" do
301
- result = @api.put_picture(@url, :message => "my message")
251
+ it "can post photo to the user's wall using aurl and an additional param" do
252
+ result = @api.put_picture(url, :message => "my message")
302
253
  @temporary_object_id = result["id"]
303
254
  expect(@temporary_object_id).not_to be_nil
304
255
  end
@@ -306,10 +257,8 @@ shared_examples_for "Koala GraphAPI with an access token" do
306
257
  end
307
258
 
308
259
  describe "#put_video" do
309
- before :each do
310
- @cat_movie = File.join(File.dirname(__FILE__), "..", "fixtures", "cat.m4v")
311
- @content_type = "video/mpeg4"
312
- end
260
+ let(:cat_movie) { File.join(File.dirname(__FILE__), "..", "fixtures", "cat.m4v") }
261
+ let(:content_type) { "video/mpeg4" }
313
262
 
314
263
  it "sets options[:video] to true" do
315
264
  source = double("UploadIO")
@@ -319,16 +268,24 @@ shared_examples_for "Koala GraphAPI with an access token" do
319
268
  @api.put_video("foo")
320
269
  end
321
270
 
271
+ it "passes options and block through" do
272
+ opts = {a: 2}
273
+ block = Proc.new {}
274
+ expect(@api).to receive(:graph_call).with(anything, anything, anything, hash_including(opts), &block)
275
+ file = File.open(cat_movie)
276
+ @api.put_video(file, content_type, {}, "target", opts, &block)
277
+ end
278
+
322
279
  it "can post videos to the user's wall with an open file object" do
323
- file = File.open(@cat_movie)
280
+ file = File.open(cat_movie)
324
281
 
325
- result = @api.put_video(file, @content_type)
282
+ result = @api.put_video(file, content_type)
326
283
  @temporary_object_id = result["id"]
327
284
  expect(@temporary_object_id).not_to be_nil
328
285
  end
329
286
 
330
287
  it "can post videos to the user's wall without an open file object" do
331
- result = @api.put_video(@cat_movie, @content_type)
288
+ result = @api.put_video(cat_movie, content_type)
332
289
  @temporary_object_id = result["id"]
333
290
  expect(@temporary_object_id).not_to be_nil
334
291
  end
@@ -336,21 +293,17 @@ shared_examples_for "Koala GraphAPI with an access token" do
336
293
  # note: Facebook doesn't post videos immediately to the wall, due to processing time
337
294
  # during which get_object(video_id) will return false
338
295
  # hence we can't do the same verify test we do for photos
296
+ describe "using aurl instead of a file" do
297
+ let(:url) { "http://techslides.com/demos/sample-videos/small.mp4" }
339
298
 
340
-
341
- describe "using a URL instead of a file" do
342
- before :each do
343
- @url = "http://techslides.com/demos/sample-videos/small.mp4"
344
- end
345
-
346
- it "can post photo to the user's wall using a URL" do
347
- result = @api.put_video(@url)
299
+ it "can post photo to the user's wall using aurl" do
300
+ result = @api.put_video(url)
348
301
  @temporary_object_id = result["id"]
349
302
  expect(@temporary_object_id).not_to be_nil
350
303
  end
351
304
 
352
- it "can post photo to the user's wall using a URL and an additional param" do
353
- result = @api.put_video(@url, :description => "my message")
305
+ it "can post photo to the user's wall using aurl and an additional param" do
306
+ result = @api.put_video(url, :description => "my message")
354
307
  @temporary_object_id = result["id"]
355
308
  expect(@temporary_object_id).not_to be_nil
356
309
  end
@@ -365,7 +318,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
365
318
 
366
319
  # make sure the result we fetch includes all the parameters we sent
367
320
  it_matches = attachment.inject(true) {|valid, param| valid && (get_result[param[0]] == attachment[param[0]])}
368
- expect(it_matches).to eq(true)
321
+ expect(it_matches).to be true
369
322
  end
370
323
 
371
324
  it "can comment on an object" do
@@ -394,7 +347,8 @@ shared_examples_for "Koala GraphAPI with an access token" do
394
347
  it "can like an object" do
395
348
  result = @api.put_wall_post("Hello, world, from the test suite, testing liking!")
396
349
  @temporary_object_id = result["id"]
397
- like_result = @api.put_like(@temporary_object_id)
350
+ app_api = Koala::Facebook::API.new(@app_access_token)
351
+ like_result = app_api.put_like(@temporary_object_id)
398
352
  expect(like_result).to be_truthy
399
353
  end
400
354
 
@@ -402,14 +356,14 @@ shared_examples_for "Koala GraphAPI with an access token" do
402
356
  describe "#get_page_access_token" do
403
357
  it "gets the page object with the access_token field" do
404
358
  # we can't test this live since test users (or random real users) can't be guaranteed to have pages to manage
405
- expect(@api).to receive(:api).with("my_page", hash_including({:fields => "access_token"}), "get", anything)
359
+ expect(@api).to receive(:api).with("my_page", hash_including({:fields => "access_token"}), "get", anything).and_return(dummy_response)
406
360
  @api.get_page_access_token("my_page")
407
361
  end
408
362
 
409
363
  it "merges in any other arguments" do
410
364
  # we can't test this live since test users (or random real users) can't be guaranteed to have pages to manage
411
365
  args = {:a => 3}
412
- expect(@api).to receive(:api).with("my_page", hash_including(args), "get", anything)
366
+ expect(@api).to receive(:api).with("my_page", hash_including(args), "get", anything).and_return(dummy_response)
413
367
  @api.get_page_access_token("my_page", args)
414
368
  end
415
369
  end
@@ -455,37 +409,22 @@ shared_examples_for "Koala GraphAPI with an access token" do
455
409
  # we run the tests here (rather than in the common shared example group)
456
410
  # since some require access tokens
457
411
  describe "HTTP options" do
458
- # Each of the below methods should take an options hash as their last argument
459
- # ideally we'd use introspection to determine how many arguments a method has
460
- # but some methods require specially formatted arguments for processing
461
- # (and anyway, Ruby 1.8's arity method fails (for this) for methods w/ 2+ optional arguments)
462
- # (Ruby 1.9's parameters method is perfect, but only in 1.9)
463
- # so we have to double-document
464
- {
465
- :get_object => 3, :put_object => 4, :delete_object => 2,
466
- :get_connections => 4, :put_connections => 4, :delete_connections => 4,
467
- :put_wall_post => 4,
468
- :put_comment => 3,
469
- :put_like => 2, :delete_like => 2,
470
- :search => 3,
471
- :set_app_restrictions => 4,
472
- :get_page_access_token => 3,
473
- # methods that have special arguments
474
- :get_comments_for_urls => [["url1", "url2"], {}],
475
- :put_picture => ["x.jpg", "image/jpg", {}, "me"],
476
- :put_video => ["x.mp4", "video/mpeg4", {}, "me"],
477
- :get_objects => [["x"], {}]
478
- }.each_pair do |method_name, params|
412
+ # Each of the below methods should take an options hash as their last argument.
413
+ [
414
+ :get_object,
415
+ :get_connections,
416
+ :put_wall_post,
417
+ :put_comment,
418
+ :put_like,
419
+ :search,
420
+ :set_app_restrictions,
421
+ :get_page_access_token,
422
+ :get_objects
423
+ ].each do |method_name|
479
424
  it "passes http options through for #{method_name}" do
480
- options = {:a => 2}
481
- # graph call should ultimately receive options as the fourth argument
482
- expect(@api).to receive(:graph_call).with(anything, anything, anything, options)
483
-
484
- # if we supply args, use them (since some methods process params)
485
- # the method should receive as args n-1 anythings and then options
486
- args = (params.is_a?(Integer) ? ([{}] * (params - 1)) : params) + [options]
487
-
488
- @api.send(method_name, *args)
425
+ params = @api.method(method_name).parameters
426
+ expect(params.last).to eq([:block, :block])
427
+ expect(params[-2]).to eq([:opt, :options])
489
428
  end
490
429
  end
491
430
 
@@ -497,15 +436,25 @@ shared_examples_for "Koala GraphAPI with an access token" do
497
436
  @api.send(:get_picture, "x", {}, options)
498
437
  end
499
438
  end
439
+
440
+ # Beta tier
441
+ # In theory this is usable by both but so few operations now allow access without a token
442
+ it "can use the beta tier" do
443
+ result = @api.get_object(KoalaTest.user1, {}, :beta => true)
444
+ # the results should have an ID and a name, among other things
445
+ expect(result["id"] && result["name"]).to be_truthy
446
+ end
500
447
  end
501
448
 
502
449
 
503
450
  # GraphCollection
504
451
  shared_examples_for "Koala GraphAPI with GraphCollection" do
452
+ let(:dummy_response) { double("fake response", data: {}, status: 200, body: "", headers: {}) }
453
+
505
454
  describe "when getting a collection" do
506
455
  # GraphCollection methods
507
456
  it "gets a GraphCollection when getting connections" do
508
- @result = @api.get_connections(KoalaTest.page, "photos")
457
+ @result = @api.get_connections(KoalaTest.page, "events")
509
458
  expect(@result).to be_a(Koala::Facebook::API::GraphCollection)
510
459
  end
511
460
 
@@ -516,43 +465,37 @@ shared_examples_for "Koala GraphAPI with GraphCollection" do
516
465
  end
517
466
 
518
467
  it "gets a GraphCollection when searching" do
519
- result = @api.search("facebook")
468
+ result = @api.search("facebook", type: "page")
520
469
  expect(result).to be_a(Koala::Facebook::API::GraphCollection)
521
470
  end
522
471
 
523
472
  it "returns nil if the search call fails with nil" do
524
473
  # this happens sometimes
525
474
  expect(@api).to receive(:graph_call).and_return(nil)
526
- expect(@api.search("facebook")).to be_nil
475
+ expect(@api.search("facebook", type: "page")).to be_nil
527
476
  end
528
477
 
529
478
  it "gets a GraphCollection when paging through results" do
530
- @results = @api.get_page(["search", {"q"=>"facebook", "limit"=>"25", "until"=> KoalaTest.search_time}])
479
+ @results = @api.get_page(["search", {"q"=>"facebook", "type" => "page", "limit"=>"25", "until"=> KoalaTest.search_time}])
531
480
  expect(@results).to be_a(Koala::Facebook::API::GraphCollection)
532
481
  end
533
482
 
534
483
  it "returns nil if the page call fails with nil" do
535
484
  # this happens sometimes
536
485
  expect(@api).to receive(:graph_call).and_return(nil)
537
- expect(@api.get_page(["search", {"q"=>"facebook", "limit"=>"25", "until"=> KoalaTest.search_time}])).to be_nil
486
+ expect(@api.get_page(["search", {"q"=>"facebook", "type" => "page", "limit"=>"25", "until"=> KoalaTest.search_time}])).to be_nil
538
487
  end
539
488
  end
540
489
  end
541
490
 
542
491
 
543
492
  shared_examples_for "Koala GraphAPI without an access token" do
544
- it "can't get private data about a user" do
545
- result = @api.get_object(KoalaTest.user1)
546
- # updated_time should be a pretty fixed test case
547
- expect(result["updated_time"]).to be_nil
548
- end
549
-
550
493
  it "can't get data about 'me'" do
551
494
  expect { @api.get_object("me") }.to raise_error(Koala::Facebook::ClientError)
552
495
  end
553
496
 
554
497
  it "can't access connections from users" do
555
- expect { @api.get_connections(KoalaTest.user2, "friends") }.to raise_error(Koala::Facebook::ClientError)
498
+ expect { @api.get_connections(KoalaTest.user2, "likes") }.to raise_error(Koala::Facebook::ClientError)
556
499
  end
557
500
 
558
501
  it "can't put an object" do