koala 1.3.0rc1 → 1.3.0rc2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -1
- data/.travis.yml +4 -0
- data/.yardopts +3 -0
- data/CHANGELOG +7 -0
- data/Gemfile +14 -0
- data/Guardfile +6 -0
- data/lib/koala.rb +16 -97
- data/lib/koala/api.rb +93 -0
- data/lib/koala/api/batch_operation.rb +83 -0
- data/lib/koala/api/graph_api.rb +476 -0
- data/lib/koala/{graph_batch_api.rb → api/graph_batch_api.rb} +20 -16
- data/lib/koala/api/graph_collection.rb +107 -0
- data/lib/koala/api/legacy.rb +26 -0
- data/lib/koala/{rest_api.rb → api/rest_api.rb} +33 -3
- data/lib/koala/http_service.rb +69 -19
- data/lib/koala/http_service/multipart_request.rb +41 -0
- data/lib/koala/http_service/response.rb +18 -0
- data/lib/koala/http_service/uploadable_io.rb +187 -0
- data/lib/koala/oauth.rb +117 -14
- data/lib/koala/realtime_updates.rb +89 -51
- data/lib/koala/test_users.rb +109 -33
- data/lib/koala/utils.rb +4 -0
- data/lib/koala/version.rb +1 -1
- data/spec/cases/api_spec.rb +19 -12
- data/spec/cases/graph_api_batch_spec.rb +41 -41
- data/spec/cases/http_service_spec.rb +1 -22
- data/spec/cases/legacy_spec.rb +107 -0
- data/spec/cases/multipart_request_spec.rb +5 -5
- data/spec/cases/oauth_spec.rb +9 -9
- data/spec/cases/realtime_updates_spec.rb +154 -47
- data/spec/cases/test_users_spec.rb +268 -219
- data/spec/fixtures/mock_facebook_responses.yml +10 -6
- data/spec/support/graph_api_shared_examples.rb +17 -12
- data/spec/support/koala_test.rb +1 -1
- data/spec/support/mock_http_service.rb +2 -2
- data/spec/support/rest_api_shared_examples.rb +1 -1
- metadata +82 -104
- data/lib/koala/batch_operation.rb +0 -74
- data/lib/koala/graph_api.rb +0 -289
- data/lib/koala/graph_collection.rb +0 -63
- data/lib/koala/multipart_request.rb +0 -35
- data/lib/koala/uploadable_io.rb +0 -181
- data/spec/cases/graph_and_rest_api_spec.rb +0 -22
- data/spec/cases/graph_api_spec.rb +0 -22
- data/spec/cases/rest_api_spec.rb +0 -22
@@ -1,36 +1,27 @@
|
|
1
1
|
module Koala
|
2
2
|
module Facebook
|
3
|
-
|
4
|
-
#
|
3
|
+
class RealtimeUpdates
|
4
|
+
# Manage realtime callbacks for changes to users' information.
|
5
|
+
# See http://developers.facebook.com/docs/reference/api/realtime.
|
6
|
+
#
|
7
|
+
# @note: to subscribe to real-time updates, you must have an application access token
|
8
|
+
# or provide the app secret when initializing your RealtimeUpdates object.
|
5
9
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# parses the challenge params and makes sure the call is legitimate
|
12
|
-
# returns the challenge string to be sent back to facebook if true
|
13
|
-
# returns false otherwise
|
14
|
-
# this is a class method, since you don't need to know anything about the app
|
15
|
-
# saves a potential trip fetching the app access token
|
16
|
-
def self.meet_challenge(params, verify_token = nil, &verification_block)
|
17
|
-
if params["hub.mode"] == "subscribe" &&
|
18
|
-
# you can make sure this is legitimate through two ways
|
19
|
-
# if your store the token across the calls, you can pass in the token value
|
20
|
-
# and we'll make sure it matches
|
21
|
-
(verify_token && params["hub.verify_token"] == verify_token) ||
|
22
|
-
# alternately, if you sent a specially-constructed value (such as a hash of various secret values)
|
23
|
-
# you can pass in a block, which we'll call with the verify_token sent by Facebook
|
24
|
-
# if it's legit, return anything that evaluates to true; otherwise, return nil or false
|
25
|
-
(verification_block && yield(params["hub.verify_token"]))
|
26
|
-
params["hub.challenge"]
|
27
|
-
else
|
28
|
-
false
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
10
|
+
# The application API interface used to communicate with Facebook.
|
11
|
+
# @return [Koala::Facebook::API]
|
12
|
+
attr_reader :api
|
13
|
+
attr_reader :app_id, :app_access_token, :secret
|
33
14
|
|
15
|
+
# Create a new RealtimeUpdates instance.
|
16
|
+
# If you don't have your app's access token, provide the app's secret and
|
17
|
+
# Koala will make a request to Facebook for the appropriate token.
|
18
|
+
#
|
19
|
+
# @param options initialization options.
|
20
|
+
# @option options :app_id the application's ID.
|
21
|
+
# @option options :app_access_token an application access token, if known.
|
22
|
+
# @option options :secret the application's secret.
|
23
|
+
#
|
24
|
+
# @raise ArgumentError if the application ID and one of the app access token or the secret are not provided.
|
34
25
|
def initialize(options = {})
|
35
26
|
@app_id = options[:app_id]
|
36
27
|
@app_access_token = options[:app_access_token]
|
@@ -45,45 +36,92 @@ module Koala
|
|
45
36
|
@app_access_token = oauth.get_app_access_token
|
46
37
|
end
|
47
38
|
|
48
|
-
@
|
39
|
+
@api = API.new(@app_access_token)
|
49
40
|
end
|
50
41
|
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
|
42
|
+
# Subscribe to realtime updates for certain fields on a given object (user, page, etc.).
|
43
|
+
# See {http://developers.facebook.com/docs/reference/api/realtime the realtime updates documentation}
|
44
|
+
# for more information on what objects and fields you can register for.
|
45
|
+
#
|
46
|
+
# @note Your callback_url must be set up to handle the verification request or the subscription will not be set up.
|
47
|
+
#
|
48
|
+
# @param object a Facebook ID (name or number)
|
49
|
+
# @param fields the fields you want your app to be updated about
|
50
|
+
# @param callback_url the URL Facebook should ping when an update is available
|
51
|
+
# @param verify_token a token included in the verification request, allowing you to ensure the call is genuine
|
52
|
+
# (see the docs for more information)
|
53
|
+
# @param options (see Koala::HTTPService.make_request)
|
54
|
+
#
|
55
|
+
# @return true if successful, false (or an APIError) otherwise.
|
56
|
+
def subscribe(object, fields, callback_url, verify_token, options = {})
|
55
57
|
args = {
|
56
58
|
:object => object,
|
57
59
|
:fields => fields,
|
58
60
|
:callback_url => callback_url,
|
59
|
-
|
60
|
-
}
|
61
|
+
}.merge(verify_token ? {:verify_token => verify_token} : {})
|
61
62
|
# a subscription is a success if Facebook returns a 200 (after hitting your server for verification)
|
62
|
-
@
|
63
|
+
@api.graph_call(subscription_path, args, 'post', options.merge(:http_component => :status)) == 200
|
63
64
|
end
|
64
65
|
|
65
|
-
#
|
66
|
-
#
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
66
|
+
# Unsubscribe from updates for a particular object or from updates.
|
67
|
+
#
|
68
|
+
# @param object the object whose subscriptions to delete.
|
69
|
+
# If no object is provided, all subscriptions will be removed.
|
70
|
+
# @param options (see Koala::HTTPService.make_request)
|
71
|
+
#
|
72
|
+
# @return true if the unsubscription is successful, false (or an APIError) otherwise.
|
73
|
+
def unsubscribe(object = nil, options = {})
|
74
|
+
@api.graph_call(subscription_path, object ? {:object => object} : {}, "delete", options.merge(:http_component => :status)) == 200
|
71
75
|
end
|
72
76
|
|
73
|
-
|
74
|
-
|
77
|
+
# List all active subscriptions for this application.
|
78
|
+
#
|
79
|
+
# @param options (see Koala::HTTPService.make_request)
|
80
|
+
#
|
81
|
+
# @return [Array] a list of active subscriptions
|
82
|
+
def list_subscriptions(options = {})
|
83
|
+
@api.graph_call(subscription_path, {}, "get", options)
|
75
84
|
end
|
76
85
|
|
77
|
-
|
78
|
-
|
79
|
-
|
86
|
+
# As a security measure (to prevent DDoS attacks), Facebook sends a verification request to your server
|
87
|
+
# after you request a subscription.
|
88
|
+
# This method parses the challenge params and makes sure the call is legitimate.
|
89
|
+
#
|
90
|
+
# @param params the request parameters sent by Facebook. (You can pass in a Rails params hash.)
|
91
|
+
# @param verify_token the verify token sent in the {#subscribe subscription request}, if you provided one
|
92
|
+
#
|
93
|
+
# @yield verify_token if you need to compute the verification token
|
94
|
+
# (for instance, if your callback URL includes a record ID, which you look up
|
95
|
+
# and use to calculate a hash), you can pass meet_challenge a block, which
|
96
|
+
# will receive the verify_token received back from Facebook.
|
97
|
+
#
|
98
|
+
# @return the challenge string to be sent back to Facebook, or false if the request is invalid.
|
99
|
+
def self.meet_challenge(params, verify_token = nil, &verification_block)
|
100
|
+
if params["hub.mode"] == "subscribe" &&
|
101
|
+
# you can make sure this is legitimate through two ways
|
102
|
+
# if your store the token across the calls, you can pass in the token value
|
103
|
+
# and we'll make sure it matches
|
104
|
+
(verify_token && params["hub.verify_token"] == verify_token) ||
|
105
|
+
# alternately, if you sent a specially-constructed value (such as a hash of various secret values)
|
106
|
+
# you can pass in a block, which we'll call with the verify_token sent by Facebook
|
107
|
+
# if it's legit, return anything that evaluates to true; otherwise, return nil or false
|
108
|
+
(verification_block && yield(params["hub.verify_token"]))
|
109
|
+
params["hub.challenge"]
|
110
|
+
else
|
111
|
+
false
|
112
|
+
end
|
80
113
|
end
|
81
|
-
|
82
|
-
|
83
|
-
|
114
|
+
|
115
|
+
# The Facebook subscription management URL for your application.
|
84
116
|
def subscription_path
|
85
117
|
@subscription_path ||= "#{@app_id}/subscriptions"
|
86
118
|
end
|
119
|
+
|
120
|
+
# @private
|
121
|
+
def graph_api
|
122
|
+
Koala::Utils.deprecate("the TestUsers.graph_api accessor is deprecated and will be removed in a future version; please use .api instead.")
|
123
|
+
@api
|
124
|
+
end
|
87
125
|
end
|
88
126
|
end
|
89
127
|
end
|
data/lib/koala/test_users.rb
CHANGED
@@ -1,16 +1,34 @@
|
|
1
1
|
require 'koala'
|
2
|
-
|
3
2
|
module Koala
|
4
3
|
module Facebook
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
|
5
|
+
# Create and manage test users for your application.
|
6
|
+
# A test user is a user account associated with an app created for the purpose
|
7
|
+
# of testing the functionality of that app.
|
8
|
+
# You can use test users for manual or automated testing --
|
9
|
+
# Koala's live test suite uses test users to verify the library works with Facebook.
|
10
|
+
#
|
11
|
+
# @note the test user API is fairly slow compared to other interfaces
|
12
|
+
# (which makes sense -- it's creating whole new user accounts!).
|
13
|
+
#
|
14
|
+
# See http://developers.facebook.com/docs/test_users/.
|
15
|
+
class TestUsers
|
16
|
+
|
17
|
+
# The application API interface used to communicate with Facebook.
|
18
|
+
# @return [Koala::Facebook::API]
|
19
|
+
attr_reader :api
|
20
|
+
attr_reader :app_id, :app_access_token, :secret
|
21
|
+
|
22
|
+
# Create a new TestUsers instance.
|
23
|
+
# If you don't have your app's access token, provide the app's secret and
|
24
|
+
# Koala will make a request to Facebook for the appropriate token.
|
25
|
+
#
|
26
|
+
# @param options initialization options.
|
27
|
+
# @option options :app_id the application's ID.
|
28
|
+
# @option options :app_access_token an application access token, if known.
|
29
|
+
# @option options :secret the application's secret.
|
30
|
+
#
|
31
|
+
# @raise ArgumentError if the application ID and one of the app access token or the secret are not provided.
|
14
32
|
def initialize(options = {})
|
15
33
|
@app_id = options[:app_id]
|
16
34
|
@app_access_token = options[:app_access_token]
|
@@ -24,35 +42,81 @@ module Koala
|
|
24
42
|
oauth = Koala::Facebook::OAuth.new(@app_id, @secret)
|
25
43
|
@app_access_token = oauth.get_app_access_token
|
26
44
|
end
|
45
|
+
|
27
46
|
@api = API.new(@app_access_token)
|
28
47
|
end
|
29
48
|
|
49
|
+
# Create a new test user.
|
50
|
+
#
|
51
|
+
# @param installed whether the user has installed your app
|
52
|
+
# @param permissions a comma-separated string or array of permissions the user has granted (if installed)
|
53
|
+
# @param args any additional arguments for the create call (name, etc.)
|
54
|
+
# @param options (see Koala::Facebook::API#api)
|
55
|
+
#
|
56
|
+
# @return a hash of information for the new user (id, access token, login URL, etc.)
|
30
57
|
def create(installed, permissions = nil, args = {}, options = {})
|
31
58
|
# Creates and returns a test user
|
32
59
|
args['installed'] = installed
|
33
60
|
args['permissions'] = (permissions.is_a?(Array) ? permissions.join(",") : permissions) if installed
|
34
|
-
@api.graph_call(
|
61
|
+
@api.graph_call(test_user_accounts_path, args, "post", options)
|
35
62
|
end
|
36
63
|
|
37
|
-
|
38
|
-
|
64
|
+
# List all test users for the app.
|
65
|
+
#
|
66
|
+
# @param options (see Koala::Facebook::API#api)
|
67
|
+
#
|
68
|
+
# @return an array of hashes of user information (id, access token, etc.)
|
69
|
+
def list(options = {})
|
70
|
+
@api.graph_call(test_user_accounts_path, {}, "get", options)
|
39
71
|
end
|
40
72
|
|
41
|
-
|
73
|
+
# Delete a test user.
|
74
|
+
#
|
75
|
+
# @param test_user the user to delete; can be either a Facebook ID or the hash returned by {#create}
|
76
|
+
# @param options (see Koala::Facebook::API#api)
|
77
|
+
#
|
78
|
+
# @return true if successful, false (or an {Koala::Facebook::APIError APIError}) if not
|
79
|
+
def delete(test_user, options = {})
|
42
80
|
test_user = test_user["id"] if test_user.is_a?(Hash)
|
43
|
-
@api.delete_object(test_user)
|
81
|
+
@api.delete_object(test_user, options)
|
44
82
|
end
|
45
83
|
|
46
|
-
|
47
|
-
|
84
|
+
# Deletes all test users.
|
85
|
+
#
|
86
|
+
# @note if you have a lot of test users (> 20), this operation can take a long time.
|
87
|
+
#
|
88
|
+
# @param options (see Koala::Facebook::API#api)
|
89
|
+
#
|
90
|
+
# @return a list of the test users that have been deleted
|
91
|
+
def delete_all(options = {})
|
92
|
+
list(options).each {|u| delete(u, options)}
|
48
93
|
end
|
49
94
|
|
50
|
-
|
95
|
+
# Updates a test user's attributes.
|
96
|
+
#
|
97
|
+
# @note currently, only name and password can be changed;
|
98
|
+
# see {http://developers.facebook.com/docs/test_users/ the Facebook documentation}.
|
99
|
+
#
|
100
|
+
# @param test_user the user to update; can be either a Facebook ID or the hash returned by {#create}
|
101
|
+
# @param args the updates to make
|
102
|
+
# @param options (see Koala::Facebook::API#api)
|
103
|
+
#
|
104
|
+
# @return true if successful, false (or an {Koala::Facebook::APIError APIError}) if not
|
105
|
+
def update(test_user, args = {}, options = {})
|
51
106
|
test_user = test_user["id"] if test_user.is_a?(Hash)
|
52
|
-
@api.graph_call(test_user, args, "post",
|
107
|
+
@api.graph_call(test_user, args, "post", options)
|
53
108
|
end
|
54
109
|
|
55
|
-
|
110
|
+
# Make two test users friends.
|
111
|
+
#
|
112
|
+
# @note there's no way to unfriend test users; you can always just create a new one.
|
113
|
+
#
|
114
|
+
# @param user1_hash one of the users to friend; the hash must contain both ID and access token (as returned by {#create})
|
115
|
+
# @param user2_hash the other user to friend
|
116
|
+
# @param options (see Koala::Facebook::API#api)
|
117
|
+
#
|
118
|
+
# @return true if successful, false (or an {Koala::Facebook::APIError APIError}) if not
|
119
|
+
def befriend(user1_hash, user2_hash, options = {})
|
56
120
|
user1_id = user1_hash["id"] || user1_hash[:id]
|
57
121
|
user2_id = user2_hash["id"] || user2_hash[:id]
|
58
122
|
user1_token = user1_hash["access_token"] || user1_hash[:access_token]
|
@@ -67,35 +131,47 @@ module Koala
|
|
67
131
|
u1_graph_api = API.new(user1_token)
|
68
132
|
u2_graph_api = API.new(user2_token)
|
69
133
|
|
70
|
-
u1_graph_api.graph_call("#{user1_id}/friends/#{user2_id}", {}, "post") &&
|
71
|
-
u2_graph_api.graph_call("#{user2_id}/friends/#{user1_id}", {}, "post")
|
134
|
+
u1_graph_api.graph_call("#{user1_id}/friends/#{user2_id}", {}, "post", options) &&
|
135
|
+
u2_graph_api.graph_call("#{user2_id}/friends/#{user1_id}", {}, "post", options)
|
72
136
|
end
|
73
137
|
|
74
|
-
|
75
|
-
|
138
|
+
# Create a network of test users, all of whom are friends and have the same permissions.
|
139
|
+
#
|
140
|
+
# @note this call slows down dramatically the more users you create
|
141
|
+
# (test user calls are slow, and more users => more 1-on-1 connections to be made).
|
142
|
+
# Use carefully.
|
143
|
+
#
|
144
|
+
# @param network_size how many users to create
|
145
|
+
# @param installed whether the users have installed your app (see {#create})
|
146
|
+
# @param permissions what permissions the users have granted (see {#create})
|
147
|
+
# @param options (see Koala::Facebook::API#api)
|
148
|
+
#
|
149
|
+
# @return the list of users created
|
150
|
+
def create_network(network_size, installed = true, permissions = '', options = {})
|
151
|
+
users = (0...network_size).collect { create(installed, permissions, options) }
|
76
152
|
friends = users.clone
|
77
153
|
users.each do |user|
|
78
154
|
# Remove this user from list of friends
|
79
155
|
friends.delete_at(0)
|
80
156
|
# befriend all the others
|
81
157
|
friends.each do |friend|
|
82
|
-
befriend(user, friend)
|
158
|
+
befriend(user, friend, options)
|
83
159
|
end
|
84
160
|
end
|
85
161
|
return users
|
86
162
|
end
|
87
|
-
|
163
|
+
|
164
|
+
# The Facebook test users management URL for your application.
|
165
|
+
def test_user_accounts_path
|
166
|
+
@test_user_accounts_path ||= "/#{@app_id}/accounts/test-users"
|
167
|
+
end
|
168
|
+
|
169
|
+
# @private
|
170
|
+
# Legacy accessor for before GraphAPI was unified into API
|
88
171
|
def graph_api
|
89
172
|
Koala::Utils.deprecate("the TestUsers.graph_api accessor is deprecated and will be removed in a future version; please use .api instead.")
|
90
173
|
@api
|
91
174
|
end
|
92
|
-
|
93
|
-
protected
|
94
|
-
|
95
|
-
def accounts_path
|
96
|
-
@accounts_path ||= "/#{@app_id}/accounts/test-users"
|
97
|
-
end
|
98
|
-
|
99
175
|
end # TestUserMethods
|
100
176
|
end # Facebook
|
101
177
|
end # Koala
|
data/lib/koala/utils.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
module Koala
|
2
2
|
module Utils
|
3
3
|
|
4
|
+
# @private
|
4
5
|
DEPRECATION_PREFIX = "KOALA: Deprecation warning: "
|
6
|
+
|
7
|
+
# Prints a deprecation message.
|
8
|
+
# Each individual message will only be printed once to avoid spamming.
|
5
9
|
def self.deprecate(message)
|
6
10
|
@posted_deprecations ||= []
|
7
11
|
unless @posted_deprecations.include?(message)
|
data/lib/koala/version.rb
CHANGED
data/spec/cases/api_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe "Koala::Facebook::API" do
|
|
11
11
|
hash_not_including('access_token' => 1),
|
12
12
|
anything,
|
13
13
|
anything
|
14
|
-
).and_return(Koala::Response.new(200, "", ""))
|
14
|
+
).and_return(Koala::HTTPService::Response.new(200, "", ""))
|
15
15
|
|
16
16
|
@service.api('anything')
|
17
17
|
end
|
@@ -25,7 +25,7 @@ describe "Koala::Facebook::API" do
|
|
25
25
|
hash_including('access_token' => token),
|
26
26
|
anything,
|
27
27
|
anything
|
28
|
-
).and_return(Koala::Response.new(200, "", ""))
|
28
|
+
).and_return(Koala::HTTPService::Response.new(200, "", ""))
|
29
29
|
|
30
30
|
service.api('anything')
|
31
31
|
end
|
@@ -36,15 +36,22 @@ describe "Koala::Facebook::API" do
|
|
36
36
|
service.access_token.should == token
|
37
37
|
end
|
38
38
|
|
39
|
-
it "gets the attribute of a Koala::Response given by the http_component parameter" do
|
39
|
+
it "gets the attribute of a Koala::HTTPService::Response given by the http_component parameter" do
|
40
40
|
http_component = :method_name
|
41
41
|
|
42
42
|
response = mock('Mock KoalaResponse', :body => '', :status => 200)
|
43
|
-
|
44
|
-
|
43
|
+
result = stub("result")
|
44
|
+
response.stub(http_component).and_return(result)
|
45
45
|
Koala.stub(:make_request).and_return(response)
|
46
46
|
|
47
|
-
@service.api('anything', {}, 'get', :http_component => http_component)
|
47
|
+
@service.api('anything', {}, 'get', :http_component => http_component).should == result
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns the entire response if http_component => :response" do
|
51
|
+
http_component = :response
|
52
|
+
response = mock('Mock KoalaResponse', :body => '', :status => 200)
|
53
|
+
Koala.stub(:make_request).and_return(response)
|
54
|
+
@service.api('anything', {}, 'get', :http_component => http_component).should == response
|
48
55
|
end
|
49
56
|
|
50
57
|
it "returns the body of the request as JSON if no http_component is given" do
|
@@ -59,7 +66,7 @@ describe "Koala::Facebook::API" do
|
|
59
66
|
|
60
67
|
it "executes an error checking block if provided" do
|
61
68
|
body = '{}'
|
62
|
-
Koala.stub(:make_request).and_return(Koala::Response.new(200, body, {}))
|
69
|
+
Koala.stub(:make_request).and_return(Koala::HTTPService::Response.new(200, body, {}))
|
63
70
|
|
64
71
|
yield_test = mock('Yield Tester')
|
65
72
|
yield_test.should_receive(:pass)
|
@@ -71,29 +78,29 @@ describe "Koala::Facebook::API" do
|
|
71
78
|
end
|
72
79
|
|
73
80
|
it "raises an API error if the HTTP response code is greater than or equal to 500" do
|
74
|
-
Koala.stub(:make_request).and_return(Koala::Response.new(500, 'response body', {}))
|
81
|
+
Koala.stub(:make_request).and_return(Koala::HTTPService::Response.new(500, 'response body', {}))
|
75
82
|
|
76
83
|
lambda { @service.api('anything') }.should raise_exception(Koala::Facebook::APIError)
|
77
84
|
end
|
78
85
|
|
79
86
|
it "handles rogue true/false as responses" do
|
80
|
-
Koala.should_receive(:make_request).and_return(Koala::Response.new(200, 'true', {}))
|
87
|
+
Koala.should_receive(:make_request).and_return(Koala::HTTPService::Response.new(200, 'true', {}))
|
81
88
|
@service.api('anything').should be_true
|
82
89
|
|
83
|
-
Koala.should_receive(:make_request).and_return(Koala::Response.new(200, 'false', {}))
|
90
|
+
Koala.should_receive(:make_request).and_return(Koala::HTTPService::Response.new(200, 'false', {}))
|
84
91
|
@service.api('anything').should be_false
|
85
92
|
end
|
86
93
|
|
87
94
|
describe "with regard to leading slashes" do
|
88
95
|
it "adds a leading / to the path if not present" do
|
89
96
|
path = "anything"
|
90
|
-
Koala.should_receive(:make_request).with("/#{path}", anything, anything, anything).and_return(Koala::Response.new(200, 'true', {}))
|
97
|
+
Koala.should_receive(:make_request).with("/#{path}", anything, anything, anything).and_return(Koala::HTTPService::Response.new(200, 'true', {}))
|
91
98
|
@service.api(path)
|
92
99
|
end
|
93
100
|
|
94
101
|
it "doesn't change the path if a leading / is present" do
|
95
102
|
path = "/anything"
|
96
|
-
Koala.should_receive(:make_request).with(path, anything, anything, anything).and_return(Koala::Response.new(200, 'true', {}))
|
103
|
+
Koala.should_receive(:make_request).with(path, anything, anything, anything).and_return(Koala::HTTPService::Response.new(200, 'true', {}))
|
97
104
|
@service.api(path)
|
98
105
|
end
|
99
106
|
end
|