koala 1.8.0 → 1.9.0rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/Gemfile +5 -9
- data/changelog.md +22 -3
- data/koala.gemspec +0 -2
- data/lib/koala.rb +5 -0
- data/lib/koala/api.rb +12 -2
- data/lib/koala/api/graph_api.rb +4 -1
- data/lib/koala/version.rb +1 -1
- data/readme.md +17 -4
- data/spec/cases/api_spec.rb +81 -24
- data/spec/cases/error_spec.rb +16 -16
- data/spec/cases/graph_api_batch_spec.rb +103 -103
- data/spec/cases/graph_api_spec.rb +33 -10
- data/spec/cases/graph_collection_spec.rb +35 -35
- data/spec/cases/http_service_spec.rb +92 -92
- data/spec/cases/koala_spec.rb +9 -9
- data/spec/cases/legacy_spec.rb +22 -22
- data/spec/cases/multipart_request_spec.rb +20 -21
- data/spec/cases/oauth_spec.rb +125 -125
- data/spec/cases/realtime_updates_spec.rb +44 -44
- data/spec/cases/test_users_spec.rb +58 -58
- data/spec/cases/uploadable_io_spec.rb +36 -36
- data/spec/cases/utils_spec.rb +11 -11
- data/spec/spec_helper.rb +0 -19
- data/spec/support/custom_matchers.rb +3 -3
- data/spec/support/graph_api_shared_examples.rb +117 -114
- data/spec/support/koala_test.rb +3 -8
- data/spec/support/rest_api_shared_examples.rb +18 -19
- data/spec/support/uploadable_io_shared_examples.rb +10 -10
- metadata +20 -50
- data/spec/support/ordered_hash.rb +0 -201
@@ -16,7 +16,7 @@ describe "Koala::UploadableIO" do
|
|
16
16
|
:tempfile => tempfile,
|
17
17
|
:original_filename => "bar"
|
18
18
|
)
|
19
|
-
tempfile.
|
19
|
+
allow(tempfile).to receive(:respond_to?).with(:path).and_return(true)
|
20
20
|
|
21
21
|
[tempfile, uploaded_file]
|
22
22
|
end
|
@@ -39,15 +39,15 @@ describe "Koala::UploadableIO" do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "returns an UploadIO with the same file path" do
|
42
|
-
Koala::UploadableIO.new(*@koala_io_params).io_or_path.
|
42
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@path)
|
43
43
|
end
|
44
44
|
|
45
45
|
it "returns an UploadIO with the same content type" do
|
46
|
-
Koala::UploadableIO.new(*@koala_io_params).content_type.
|
46
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(@stub_type)
|
47
47
|
end
|
48
48
|
|
49
49
|
it "returns an UploadIO with the file's name" do
|
50
|
-
Koala::UploadableIO.new(*@koala_io_params).filename.
|
50
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@path))
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -68,16 +68,16 @@ describe "Koala::UploadableIO" do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it "returns an UploadIO with the same io" do
|
71
|
-
Koala::UploadableIO.new(*@koala_io_params).io_or_path.
|
71
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@koala_io_params[0])
|
72
72
|
end
|
73
73
|
|
74
74
|
it "returns an UploadableIO with the same content_type" do
|
75
75
|
content_stub = @koala_io_params[1] = double('Content Type')
|
76
|
-
Koala::UploadableIO.new(*@koala_io_params).content_type.
|
76
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
|
77
77
|
end
|
78
78
|
|
79
79
|
it "returns an UploadableIO with the right filename" do
|
80
|
-
Koala::UploadableIO.new(*@koala_io_params).filename.
|
80
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@file.path))
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -100,16 +100,16 @@ describe "Koala::UploadableIO" do
|
|
100
100
|
|
101
101
|
it "returns an UploadIO with the same io" do
|
102
102
|
#Problem comparing Tempfile in Ruby 1.8, REE and Rubinius mode 1.8
|
103
|
-
Koala::UploadableIO.new(*@koala_io_params).io_or_path.path.
|
103
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).io_or_path.path).to eq(@koala_io_params[0].path)
|
104
104
|
end
|
105
105
|
|
106
106
|
it "returns an UploadableIO with the same content_type" do
|
107
107
|
content_stub = @koala_io_params[1] = double('Content Type')
|
108
|
-
Koala::UploadableIO.new(*@koala_io_params).content_type.
|
108
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
|
109
109
|
end
|
110
110
|
|
111
111
|
it "returns an UploadableIO with the right filename" do
|
112
|
-
Koala::UploadableIO.new(*@koala_io_params).filename.
|
112
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).filename).to eq(File.basename(@file.path))
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
@@ -130,18 +130,18 @@ describe "Koala::UploadableIO" do
|
|
130
130
|
end
|
131
131
|
|
132
132
|
it "returns an UploadableIO with the same io" do
|
133
|
-
Koala::UploadableIO.new(*@koala_io_params).io_or_path.
|
133
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).io_or_path).to eq(@koala_io_params[0])
|
134
134
|
end
|
135
135
|
|
136
136
|
it "returns an UploadableIO with the same content_type" do
|
137
137
|
content_stub = @koala_io_params[1] = double('Content Type')
|
138
|
-
Koala::UploadableIO.new(*@koala_io_params).content_type.
|
138
|
+
expect(Koala::UploadableIO.new(*@koala_io_params).content_type).to eq(content_stub)
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
142
|
describe "and no content type" do
|
143
143
|
it "raises an exception" do
|
144
|
-
|
144
|
+
expect { Koala::UploadableIO.new(*@koala_io_params) }.to raise_exception(Koala::KoalaError)
|
145
145
|
end
|
146
146
|
end
|
147
147
|
end
|
@@ -153,18 +153,18 @@ describe "Koala::UploadableIO" do
|
|
153
153
|
|
154
154
|
it "gets the path from the tempfile associated with the UploadedFile" do
|
155
155
|
expected_path = double('Tempfile')
|
156
|
-
@tempfile.
|
157
|
-
Koala::UploadableIO.new(@uploaded_file).io_or_path.
|
156
|
+
expect(@tempfile).to receive(:path).and_return(expected_path)
|
157
|
+
expect(Koala::UploadableIO.new(@uploaded_file).io_or_path).to eq(expected_path)
|
158
158
|
end
|
159
159
|
|
160
160
|
it "gets the content type via the content_type method" do
|
161
161
|
expected_content_type = double('Content Type')
|
162
|
-
@uploaded_file.
|
163
|
-
Koala::UploadableIO.new(@uploaded_file).content_type.
|
162
|
+
expect(@uploaded_file).to receive(:content_type).and_return(expected_content_type)
|
163
|
+
expect(Koala::UploadableIO.new(@uploaded_file).content_type).to eq(expected_content_type)
|
164
164
|
end
|
165
165
|
|
166
166
|
it "gets the filename from the UploadedFile" do
|
167
|
-
Koala::UploadableIO.new(@uploaded_file).filename.
|
167
|
+
expect(Koala::UploadableIO.new(@uploaded_file).filename).to eq(@uploaded_file.original_filename)
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
@@ -178,7 +178,7 @@ describe "Koala::UploadableIO" do
|
|
178
178
|
@file_hash[:tempfile] = expected_file
|
179
179
|
|
180
180
|
uploadable = Koala::UploadableIO.new(@file_hash)
|
181
|
-
uploadable.io_or_path.
|
181
|
+
expect(uploadable.io_or_path).to eq(expected_file)
|
182
182
|
end
|
183
183
|
|
184
184
|
it "gets the content type from the :type key" do
|
@@ -186,12 +186,12 @@ describe "Koala::UploadableIO" do
|
|
186
186
|
@file_hash[:type] = expected_content_type
|
187
187
|
|
188
188
|
uploadable = Koala::UploadableIO.new(@file_hash)
|
189
|
-
uploadable.content_type.
|
189
|
+
expect(uploadable.content_type).to eq(expected_content_type)
|
190
190
|
end
|
191
191
|
|
192
192
|
it "gets the content type from the :type key" do
|
193
193
|
uploadable = Koala::UploadableIO.new(@file_hash)
|
194
|
-
uploadable.filename.
|
194
|
+
expect(uploadable.filename).to eq(@file_hash[:filename])
|
195
195
|
end
|
196
196
|
end
|
197
197
|
|
@@ -199,12 +199,12 @@ describe "Koala::UploadableIO" do
|
|
199
199
|
# what that means is tested below
|
200
200
|
it "should accept a file object alone" do
|
201
201
|
params = [BEACH_BALL_PATH]
|
202
|
-
|
202
|
+
expect { Koala::UploadableIO.new(*params) }.not_to raise_exception
|
203
203
|
end
|
204
204
|
|
205
205
|
it "should accept a file path alone" do
|
206
206
|
params = [BEACH_BALL_PATH]
|
207
|
-
|
207
|
+
expect { Koala::UploadableIO.new(*params) }.not_to raise_exception
|
208
208
|
end
|
209
209
|
end
|
210
210
|
end
|
@@ -212,20 +212,20 @@ describe "Koala::UploadableIO" do
|
|
212
212
|
describe "getting an UploadableIO" do
|
213
213
|
before(:each) do
|
214
214
|
@upload_io = double("UploadIO")
|
215
|
-
UploadIO.
|
215
|
+
allow(UploadIO).to receive(:new).with(anything, anything, anything).and_return(@upload_io)
|
216
216
|
end
|
217
217
|
|
218
218
|
context "if no filename was provided" do
|
219
219
|
it "should call the constructor with the content type, file name, and a dummy file name" do
|
220
|
-
UploadIO.
|
221
|
-
Koala::UploadableIO.new(BEACH_BALL_PATH, "content/type").to_upload_io.
|
220
|
+
expect(UploadIO).to receive(:new).with(BEACH_BALL_PATH, "content/type", anything).and_return(@upload_io)
|
221
|
+
expect(Koala::UploadableIO.new(BEACH_BALL_PATH, "content/type").to_upload_io).to eq(@upload_io)
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
225
225
|
context "if a filename was provided" do
|
226
226
|
it "should call the constructor with the content type, file name, and the filename" do
|
227
227
|
filename = "file"
|
228
|
-
UploadIO.
|
228
|
+
expect(UploadIO).to receive(:new).with(BEACH_BALL_PATH, "content/type", filename).and_return(@upload_io)
|
229
229
|
Koala::UploadableIO.new(BEACH_BALL_PATH, "content/type", filename).to_upload_io
|
230
230
|
end
|
231
231
|
end
|
@@ -234,33 +234,33 @@ describe "Koala::UploadableIO" do
|
|
234
234
|
describe "getting a file" do
|
235
235
|
it "returns the File if initialized with a file" do
|
236
236
|
f = File.new(BEACH_BALL_PATH)
|
237
|
-
Koala::UploadableIO.new(f).to_file.
|
237
|
+
expect(Koala::UploadableIO.new(f).to_file).to eq(f)
|
238
238
|
end
|
239
239
|
|
240
240
|
it "should open up and return a file corresponding to the path if io_or_path is a path" do
|
241
241
|
result = double("File")
|
242
|
-
File.
|
243
|
-
Koala::UploadableIO.new(BEACH_BALL_PATH).to_file.
|
242
|
+
expect(File).to receive(:open).with(BEACH_BALL_PATH).and_return(result)
|
243
|
+
expect(Koala::UploadableIO.new(BEACH_BALL_PATH).to_file).to eq(result)
|
244
244
|
end
|
245
245
|
end
|
246
246
|
|
247
247
|
describe ".binary_content?" do
|
248
248
|
it "returns true for Rails 3 file uploads" do
|
249
|
-
Koala::UploadableIO.binary_content?(rails_3_mocks.last).
|
249
|
+
expect(Koala::UploadableIO.binary_content?(rails_3_mocks.last)).to be_truthy
|
250
250
|
end
|
251
251
|
|
252
252
|
it "returns true for Sinatra file uploads" do
|
253
|
-
Koala::UploadableIO.binary_content?(rails_3_mocks.last).
|
253
|
+
expect(Koala::UploadableIO.binary_content?(rails_3_mocks.last)).to be_truthy
|
254
254
|
end
|
255
255
|
|
256
256
|
it "returns true for File objects" do
|
257
|
-
Koala::UploadableIO.binary_content?(File.open(BEACH_BALL_PATH)).
|
257
|
+
expect(Koala::UploadableIO.binary_content?(File.open(BEACH_BALL_PATH))).to be_truthy
|
258
258
|
end
|
259
259
|
|
260
260
|
it "returns false for everything else" do
|
261
|
-
Koala::UploadableIO.binary_content?(StringIO.new).
|
262
|
-
Koala::UploadableIO.binary_content?(BEACH_BALL_PATH).
|
263
|
-
Koala::UploadableIO.binary_content?(nil).
|
261
|
+
expect(Koala::UploadableIO.binary_content?(StringIO.new)).to be_falsey
|
262
|
+
expect(Koala::UploadableIO.binary_content?(BEACH_BALL_PATH)).to be_falsey
|
263
|
+
expect(Koala::UploadableIO.binary_content?(nil)).to be_falsey
|
264
264
|
end
|
265
265
|
end
|
266
266
|
end # describe UploadableIO
|
data/spec/cases/utils_spec.rb
CHANGED
@@ -4,29 +4,29 @@ describe Koala::Utils do
|
|
4
4
|
describe ".deprecate" do
|
5
5
|
before :each do
|
6
6
|
# unstub deprecate so we can test it
|
7
|
-
|
7
|
+
allow(Koala::Utils).to receive(:deprecate).and_call_original
|
8
8
|
end
|
9
9
|
|
10
10
|
it "has a deprecation prefix that includes the words Koala and deprecation" do
|
11
|
-
Koala::Utils::DEPRECATION_PREFIX.
|
12
|
-
Koala::Utils::DEPRECATION_PREFIX.
|
11
|
+
expect(Koala::Utils::DEPRECATION_PREFIX).to match(/koala/i)
|
12
|
+
expect(Koala::Utils::DEPRECATION_PREFIX).to match(/deprecation/i)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "prints a warning with Kernel.warn" do
|
16
16
|
message = Time.now.to_s + rand.to_s
|
17
|
-
Kernel.
|
17
|
+
expect(Kernel).to receive(:warn)
|
18
18
|
Koala::Utils.deprecate(message)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "prints the deprecation prefix and the warning" do
|
22
22
|
message = Time.now.to_s + rand.to_s
|
23
|
-
Kernel.
|
23
|
+
expect(Kernel).to receive(:warn).with(Koala::Utils::DEPRECATION_PREFIX + message)
|
24
24
|
Koala::Utils.deprecate(message)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "only prints each unique message once" do
|
28
28
|
message = Time.now.to_s + rand.to_s
|
29
|
-
Kernel.
|
29
|
+
expect(Kernel).to receive(:warn).once
|
30
30
|
Koala::Utils.deprecate(message)
|
31
31
|
Koala::Utils.deprecate(message)
|
32
32
|
end
|
@@ -34,20 +34,20 @@ describe Koala::Utils do
|
|
34
34
|
|
35
35
|
describe ".logger" do
|
36
36
|
it "has an accessor for logger" do
|
37
|
-
Koala::Utils.methods.map(&:to_sym).
|
38
|
-
Koala::Utils.methods.map(&:to_sym).
|
37
|
+
expect(Koala::Utils.methods.map(&:to_sym)).to include(:logger)
|
38
|
+
expect(Koala::Utils.methods.map(&:to_sym)).to include(:logger=)
|
39
39
|
end
|
40
40
|
|
41
41
|
it "defaults to the standard ruby logger with level set to ERROR" do |variable|
|
42
|
-
Koala::Utils.logger.
|
43
|
-
Koala::Utils.logger.level.
|
42
|
+
expect(Koala::Utils.logger).to be_kind_of(Logger)
|
43
|
+
expect(Koala::Utils.logger.level).to eq(Logger::ERROR)
|
44
44
|
end
|
45
45
|
|
46
46
|
logger_methods = [:debug, :info, :warn, :error, :fatal]
|
47
47
|
|
48
48
|
logger_methods.each do |logger_method|
|
49
49
|
it "should delegate #{logger_method} to the attached logger" do
|
50
|
-
Koala::Utils.logger.
|
50
|
+
expect(Koala::Utils.logger).to receive(logger_method)
|
51
51
|
Koala::Utils.send(logger_method, "Test #{logger_method} message")
|
52
52
|
end
|
53
53
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,22 +1,3 @@
|
|
1
|
-
if RUBY_VERSION == '1.9.2' && RUBY_PATCHLEVEL < 290 && RUBY_ENGINE != "macruby"
|
2
|
-
# In Ruby 1.9.2 versions before patchlevel 290, the default Psych
|
3
|
-
# parser has an issue with YAML merge keys, which
|
4
|
-
# fixtures/mock_facebook_responses.yml relies heavily on.
|
5
|
-
#
|
6
|
-
# Anyone using an earlier version will see missing mock response
|
7
|
-
# errors when running the test suite similar to this:
|
8
|
-
#
|
9
|
-
# RuntimeError:
|
10
|
-
# Missing a mock response for graph_api: /me/videos: source=[FILE]: post: with_token
|
11
|
-
# API PATH: /me/videos?source=[FILE]&format=json&access_token=*
|
12
|
-
#
|
13
|
-
# For now, it seems the best fix is to just downgrade to the old syck YAML parser
|
14
|
-
# for these troubled versions.
|
15
|
-
#
|
16
|
-
# See https://github.com/tenderlove/psych/issues/8 for more details
|
17
|
-
YAML::ENGINE.yamler = 'syck'
|
18
|
-
end
|
19
|
-
|
20
1
|
# load the library
|
21
2
|
require 'koala'
|
22
3
|
|
@@ -7,14 +7,14 @@ RSpec::Matchers.define :match_url do |url|
|
|
7
7
|
original_query_hash = query_to_params(original_query_string)
|
8
8
|
|
9
9
|
# the base URLs need to match
|
10
|
-
base.
|
10
|
+
expect(base).to eq(original_base)
|
11
11
|
|
12
12
|
# the number of parameters should match (avoid one being a subset of the other)
|
13
|
-
query_hash.values.length.
|
13
|
+
expect(query_hash.values.length).to eq(original_query_hash.values.length)
|
14
14
|
|
15
15
|
# and ensure all the keys and values match
|
16
16
|
query_hash.each_pair do |key, value|
|
17
|
-
original_query_hash[key].
|
17
|
+
expect(original_query_hash[key]).to eq(value)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -3,7 +3,7 @@ shared_examples_for "Koala GraphAPI" do
|
|
3
3
|
|
4
4
|
# API
|
5
5
|
it "never uses the rest api server" do
|
6
|
-
Koala.
|
6
|
+
expect(Koala).to receive(:make_request).with(
|
7
7
|
anything,
|
8
8
|
anything,
|
9
9
|
anything,
|
@@ -16,42 +16,45 @@ shared_examples_for "Koala GraphAPI" do
|
|
16
16
|
# GRAPH CALL
|
17
17
|
describe "graph_call" do
|
18
18
|
it "passes all arguments to the api method" do
|
19
|
-
|
20
|
-
|
21
|
-
|
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)
|
22
25
|
end
|
23
26
|
|
24
27
|
it "throws an APIError if the result hash has an error key" do
|
25
|
-
Koala.
|
26
|
-
|
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)
|
27
30
|
end
|
28
31
|
|
29
32
|
it "passes the results through GraphCollection.evaluate" do
|
30
33
|
result = {}
|
31
|
-
@api.
|
32
|
-
Koala::Facebook::GraphCollection.
|
34
|
+
allow(@api).to receive(:api).and_return(result)
|
35
|
+
expect(Koala::Facebook::GraphCollection).to receive(:evaluate).with(result, @api)
|
33
36
|
@api.graph_call("/me")
|
34
37
|
end
|
35
38
|
|
36
39
|
it "returns the results of GraphCollection.evaluate" do
|
37
40
|
expected = {}
|
38
|
-
@api.
|
39
|
-
Koala::Facebook::GraphCollection.
|
40
|
-
@api.graph_call("/me").
|
41
|
+
allow(@api).to receive(:api).and_return([])
|
42
|
+
expect(Koala::Facebook::GraphCollection).to receive(:evaluate).and_return(expected)
|
43
|
+
expect(@api.graph_call("/me")).to eq(expected)
|
41
44
|
end
|
42
45
|
|
43
46
|
it "returns the post_processing block's results if one is supplied" do
|
44
47
|
other_result = [:a, 2, :three]
|
45
48
|
block = Proc.new {|r| other_result}
|
46
|
-
@api.
|
47
|
-
@api.graph_call("/me", {}, "get", {}, &block).
|
49
|
+
allow(@api).to receive(:api).and_return({})
|
50
|
+
expect(@api.graph_call("/me", {}, "get", {}, &block)).to eq(other_result)
|
48
51
|
end
|
49
52
|
end
|
50
53
|
|
51
54
|
# SEARCH
|
52
55
|
it "can search" do
|
53
56
|
result = @api.search("facebook")
|
54
|
-
result.length.
|
57
|
+
expect(result.length).to be_an(Integer)
|
55
58
|
end
|
56
59
|
|
57
60
|
# DATA
|
@@ -61,71 +64,71 @@ shared_examples_for "Koala GraphAPI" do
|
|
61
64
|
it "gets public data about a user" do
|
62
65
|
result = @api.get_object(KoalaTest.user1)
|
63
66
|
# the results should have an ID and a name, among other things
|
64
|
-
(result["id"] && result["name"]).
|
67
|
+
expect(result["id"] && result["name"]).not_to be_nil
|
65
68
|
end
|
66
69
|
|
67
70
|
it "gets public data about a Page" do
|
68
71
|
result = @api.get_object(KoalaTest.page)
|
69
72
|
# the results should have an ID and a name, among other things
|
70
|
-
(result["id"] && result["name"]).
|
73
|
+
expect(result["id"] && result["name"]).to be_truthy
|
71
74
|
end
|
72
75
|
|
73
76
|
it "returns [] from get_objects if passed an empty array" do
|
74
77
|
results = @api.get_objects([])
|
75
|
-
results.
|
78
|
+
expect(results).to eq([])
|
76
79
|
end
|
77
80
|
|
78
81
|
it "gets multiple objects" do
|
79
82
|
results = @api.get_objects([KoalaTest.page, KoalaTest.user1])
|
80
|
-
results.
|
83
|
+
expect(results.size).to eq(2)
|
81
84
|
end
|
82
85
|
|
83
86
|
it "gets multiple objects if they're a string" do
|
84
87
|
results = @api.get_objects("facebook,#{KoalaTest.user1}")
|
85
|
-
results.
|
88
|
+
expect(results.size).to eq(2)
|
86
89
|
end
|
87
90
|
|
88
91
|
describe "#get_picture" do
|
89
92
|
it "can access a user's picture" do
|
90
|
-
@api.get_picture(KoalaTest.user2).
|
93
|
+
expect(@api.get_picture(KoalaTest.user2)).to match(/http[s]*\:\/\//)
|
91
94
|
end
|
92
95
|
|
93
96
|
it "can access a user's picture, given a picture type" do
|
94
|
-
@api.get_picture(KoalaTest.user2, {:type => 'large'}).
|
97
|
+
expect(@api.get_picture(KoalaTest.user2, {:type => 'large'})).to match(/^http[s]*\:\/\//)
|
95
98
|
end
|
96
99
|
|
97
100
|
it "works even if Facebook returns nil" do
|
98
|
-
@api.
|
99
|
-
@api.get_picture(KoalaTest.user2, {:type => 'large'}).
|
101
|
+
allow(@api).to receive(:graph_call).and_return(nil)
|
102
|
+
expect(@api.get_picture(KoalaTest.user2, {:type => 'large'})).to be_nil
|
100
103
|
end
|
101
104
|
end
|
102
105
|
|
103
106
|
it "can access connections from public Pages" do
|
104
107
|
result = @api.get_connections(KoalaTest.page, "photos")
|
105
|
-
result.
|
108
|
+
expect(result).to be_a(Array)
|
106
109
|
end
|
107
110
|
|
108
111
|
it "can access comments for a URL" do
|
109
112
|
result = @api.get_comments_for_urls(["http://developers.facebook.com/blog/post/472"])
|
110
|
-
(result["http://developers.facebook.com/blog/post/472"]).
|
113
|
+
expect(result["http://developers.facebook.com/blog/post/472"]).to be_truthy
|
111
114
|
end
|
112
115
|
|
113
116
|
it "can access comments for 2 URLs" do
|
114
117
|
result = @api.get_comments_for_urls(["http://developers.facebook.com/blog/post/490", "http://developers.facebook.com/blog/post/472"])
|
115
|
-
(result["http://developers.facebook.com/blog/post/490"] && result["http://developers.facebook.com/blog/post/472"]).
|
118
|
+
expect(result["http://developers.facebook.com/blog/post/490"] && result["http://developers.facebook.com/blog/post/472"]).to be_truthy
|
116
119
|
end
|
117
120
|
|
118
121
|
# SEARCH
|
119
122
|
it "can search" do
|
120
123
|
result = @api.search("facebook")
|
121
|
-
result.length.
|
124
|
+
expect(result.length).to be_an(Integer)
|
122
125
|
end
|
123
126
|
|
124
127
|
# PAGING THROUGH COLLECTIONS
|
125
128
|
# see also graph_collection_tests
|
126
129
|
it "makes a request for a page when provided a specific set of page params" do
|
127
130
|
query = [1, 2]
|
128
|
-
@api.
|
131
|
+
expect(@api).to receive(:graph_call).with(*query)
|
129
132
|
@api.get_page(query)
|
130
133
|
end
|
131
134
|
|
@@ -133,41 +136,41 @@ shared_examples_for "Koala GraphAPI" do
|
|
133
136
|
it "can use the beta tier" do
|
134
137
|
result = @api.get_object(KoalaTest.user1, {}, :beta => true)
|
135
138
|
# the results should have an ID and a name, among other things
|
136
|
-
(result["id"] && result["name"]).
|
139
|
+
expect(result["id"] && result["name"]).to be_truthy
|
137
140
|
end
|
138
141
|
|
139
142
|
# FQL
|
140
143
|
describe "#fql_query" do
|
141
144
|
it "makes a request to /fql" do
|
142
|
-
@api.
|
145
|
+
expect(@api).to receive(:get_object).with("fql", anything, anything)
|
143
146
|
@api.fql_query double('query string')
|
144
147
|
end
|
145
148
|
|
146
149
|
it "passes a query argument" do
|
147
150
|
query = double('query string')
|
148
|
-
@api.
|
151
|
+
expect(@api).to receive(:get_object).with(anything, hash_including(:q => query), anything)
|
149
152
|
@api.fql_query(query)
|
150
153
|
end
|
151
154
|
|
152
155
|
it "passes on any other arguments provided" do
|
153
156
|
args = {:a => 2}
|
154
|
-
@api.
|
157
|
+
expect(@api).to receive(:get_object).with(anything, hash_including(args), anything)
|
155
158
|
@api.fql_query("a query", args)
|
156
159
|
end
|
157
160
|
end
|
158
161
|
|
159
162
|
describe "#fql_multiquery" do
|
160
163
|
it "makes a request to /fql" do
|
161
|
-
@api.
|
164
|
+
expect(@api).to receive(:get_object).with("fql", anything, anything)
|
162
165
|
@api.fql_multiquery 'query string'
|
163
166
|
end
|
164
167
|
|
165
168
|
it "passes a queries argument" do
|
166
169
|
queries = double('query string')
|
167
170
|
queries_json = "some JSON"
|
168
|
-
MultiJson.
|
171
|
+
allow(MultiJson).to receive(:dump).with(queries).and_return(queries_json)
|
169
172
|
|
170
|
-
@api.
|
173
|
+
expect(@api).to receive(:get_object).with(anything, hash_including(:q => queries_json), anything)
|
171
174
|
@api.fql_multiquery(queries)
|
172
175
|
end
|
173
176
|
|
@@ -181,14 +184,14 @@ shared_examples_for "Koala GraphAPI" do
|
|
181
184
|
"query2" => [:a, :b, :c]
|
182
185
|
}
|
183
186
|
|
184
|
-
@api.
|
187
|
+
allow(@api).to receive(:get_object).and_return(raw_results)
|
185
188
|
results = @api.fql_multiquery({:query => true})
|
186
|
-
results.
|
189
|
+
expect(results).to eq(expected_results)
|
187
190
|
end
|
188
191
|
|
189
192
|
it "passes on any other arguments provided" do
|
190
193
|
args = {:a => 2}
|
191
|
-
@api.
|
194
|
+
expect(@api).to receive(:get_object).with(anything, hash_including(args), anything)
|
192
195
|
@api.fql_multiquery("a query", args)
|
193
196
|
end
|
194
197
|
end
|
@@ -199,28 +202,28 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
199
202
|
it "gets private data about a user" do
|
200
203
|
result = @api.get_object(KoalaTest.user1)
|
201
204
|
# updated_time should be a pretty fixed test case
|
202
|
-
result["updated_time"].
|
205
|
+
expect(result["updated_time"]).not_to be_nil
|
203
206
|
end
|
204
207
|
|
205
208
|
it "gets data about 'me'" do
|
206
209
|
result = @api.get_object("me")
|
207
|
-
result["updated_time"].
|
210
|
+
expect(result["updated_time"]).to be_truthy
|
208
211
|
end
|
209
212
|
|
210
213
|
it "gets multiple objects" do
|
211
214
|
result = @api.get_objects([KoalaTest.page, KoalaTest.user1])
|
212
|
-
result.length.
|
215
|
+
expect(result.length).to eq(2)
|
213
216
|
end
|
214
217
|
it "can access connections from users" do
|
215
218
|
result = @api.get_connections(KoalaTest.user2, "friends")
|
216
|
-
result.length.
|
219
|
+
expect(result.length).to be > 0
|
217
220
|
end
|
218
221
|
|
219
222
|
# PUT
|
220
223
|
it "can write an object to the graph" do
|
221
224
|
result = @api.put_wall_post("Hello, world, from the test suite!")
|
222
225
|
@temporary_object_id = result["id"]
|
223
|
-
@temporary_object_id.
|
226
|
+
expect(@temporary_object_id).not_to be_nil
|
224
227
|
end
|
225
228
|
|
226
229
|
# DELETE
|
@@ -228,7 +231,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
228
231
|
result = @api.put_wall_post("Hello, world, from the test suite delete method!")
|
229
232
|
object_id_to_delete = result["id"]
|
230
233
|
delete_result = @api.delete_object(object_id_to_delete)
|
231
|
-
delete_result.
|
234
|
+
expect(delete_result).to eq(true)
|
232
235
|
end
|
233
236
|
|
234
237
|
it "can delete likes" do
|
@@ -236,7 +239,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
236
239
|
@temporary_object_id = result["id"]
|
237
240
|
@api.put_like(@temporary_object_id)
|
238
241
|
delete_like_result = @api.delete_like(@temporary_object_id)
|
239
|
-
delete_like_result.
|
242
|
+
expect(delete_like_result).to eq(true)
|
240
243
|
end
|
241
244
|
|
242
245
|
# additional put tests
|
@@ -247,13 +250,13 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
247
250
|
get_result = @api.get_object(@temporary_object_id)
|
248
251
|
|
249
252
|
# make sure the message we sent is the message that got posted
|
250
|
-
get_result["message"].
|
253
|
+
expect(get_result["message"]).to eq(message)
|
251
254
|
end
|
252
255
|
|
253
256
|
it "can post a message with an attachment to a feed" do
|
254
257
|
result = @api.put_wall_post("Hello, world, from the test suite again!", {:name => "OAuth Playground", :link => "http://oauth.twoalex.com/"})
|
255
258
|
@temporary_object_id = result["id"]
|
256
|
-
@temporary_object_id.
|
259
|
+
expect(@temporary_object_id).not_to be_nil
|
257
260
|
end
|
258
261
|
|
259
262
|
it "can post a message whose attachment has a properties dictionary" do
|
@@ -271,11 +274,11 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
271
274
|
|
272
275
|
result = @api.put_wall_post("body", args)
|
273
276
|
@temporary_object_id = result["id"]
|
274
|
-
@temporary_object_id.
|
277
|
+
expect(@temporary_object_id).not_to be_nil
|
275
278
|
|
276
279
|
# ensure the properties dictionary is there
|
277
280
|
api_data = @api.get_object(@temporary_object_id)
|
278
|
-
api_data["properties"].
|
281
|
+
expect(api_data["properties"]).not_to be_nil
|
279
282
|
end
|
280
283
|
|
281
284
|
describe "#put_picture" do
|
@@ -285,7 +288,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
285
288
|
|
286
289
|
result = @api.put_picture(file, content_type)
|
287
290
|
@temporary_object_id = result["id"]
|
288
|
-
@temporary_object_id.
|
291
|
+
expect(@temporary_object_id).not_to be_nil
|
289
292
|
end
|
290
293
|
|
291
294
|
it "can post photos to the user's wall without an open file object" do
|
@@ -294,7 +297,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
294
297
|
|
295
298
|
result = @api.put_picture(file_path, content_type)
|
296
299
|
@temporary_object_id = result["id"]
|
297
|
-
@temporary_object_id.
|
300
|
+
expect(@temporary_object_id).not_to be_nil
|
298
301
|
end
|
299
302
|
|
300
303
|
it "can verify a photo posted to a user's wall" do
|
@@ -305,10 +308,10 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
305
308
|
|
306
309
|
result = @api.put_picture(file_path, content_type, :message => expected_message)
|
307
310
|
@temporary_object_id = result["id"]
|
308
|
-
@temporary_object_id.
|
311
|
+
expect(@temporary_object_id).not_to be_nil
|
309
312
|
|
310
313
|
get_result = @api.get_object(@temporary_object_id)
|
311
|
-
get_result["name"].
|
314
|
+
expect(get_result["name"]).to eq(expected_message)
|
312
315
|
end
|
313
316
|
|
314
317
|
|
@@ -320,13 +323,13 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
320
323
|
it "can post photo to the user's wall using a URL" do
|
321
324
|
result = @api.put_picture(@url)
|
322
325
|
@temporary_object_id = result["id"]
|
323
|
-
@temporary_object_id.
|
326
|
+
expect(@temporary_object_id).not_to be_nil
|
324
327
|
end
|
325
328
|
|
326
329
|
it "can post photo to the user's wall using a URL and an additional param" do
|
327
330
|
result = @api.put_picture(@url, :message => "my message")
|
328
331
|
@temporary_object_id = result["id"]
|
329
|
-
@temporary_object_id.
|
332
|
+
expect(@temporary_object_id).not_to be_nil
|
330
333
|
end
|
331
334
|
end
|
332
335
|
end
|
@@ -339,9 +342,9 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
339
342
|
|
340
343
|
it "sets options[:video] to true" do
|
341
344
|
source = double("UploadIO")
|
342
|
-
Koala::UploadableIO.
|
343
|
-
source.
|
344
|
-
Koala.
|
345
|
+
allow(Koala::UploadableIO).to receive(:new).and_return(source)
|
346
|
+
allow(source).to receive(:requires_base_http_service).and_return(false)
|
347
|
+
expect(Koala).to receive(:make_request).with(anything, anything, anything, hash_including(:video => true)).and_return(Koala::HTTPService::Response.new(200, "[]", {}))
|
345
348
|
@api.put_video("foo")
|
346
349
|
end
|
347
350
|
|
@@ -350,13 +353,13 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
350
353
|
|
351
354
|
result = @api.put_video(file, @content_type)
|
352
355
|
@temporary_object_id = result["id"]
|
353
|
-
@temporary_object_id.
|
356
|
+
expect(@temporary_object_id).not_to be_nil
|
354
357
|
end
|
355
358
|
|
356
359
|
it "can post videos to the user's wall without an open file object" do
|
357
360
|
result = @api.put_video(@cat_movie, @content_type)
|
358
361
|
@temporary_object_id = result["id"]
|
359
|
-
@temporary_object_id.
|
362
|
+
expect(@temporary_object_id).not_to be_nil
|
360
363
|
end
|
361
364
|
|
362
365
|
# note: Facebook doesn't post videos immediately to the wall, due to processing time
|
@@ -372,7 +375,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
372
375
|
|
373
376
|
# make sure the result we fetch includes all the parameters we sent
|
374
377
|
it_matches = attachment.inject(true) {|valid, param| valid && (get_result[param[0]] == attachment[param[0]])}
|
375
|
-
it_matches.
|
378
|
+
expect(it_matches).to eq(true)
|
376
379
|
end
|
377
380
|
|
378
381
|
it "can comment on an object" do
|
@@ -381,7 +384,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
381
384
|
|
382
385
|
# this will be deleted when the post gets deleted
|
383
386
|
comment_result = @api.put_comment(@temporary_object_id, "it's my comment!")
|
384
|
-
comment_result.
|
387
|
+
expect(comment_result).not_to be_nil
|
385
388
|
end
|
386
389
|
|
387
390
|
it "can verify a comment posted about an object" do
|
@@ -395,38 +398,38 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
395
398
|
get_result = @api.get_object(comment_result["id"])
|
396
399
|
|
397
400
|
# make sure the text of the comment matches what we sent
|
398
|
-
get_result["message"].
|
401
|
+
expect(get_result["message"]).to eq(comment_text)
|
399
402
|
end
|
400
403
|
|
401
404
|
it "can like an object" do
|
402
405
|
result = @api.put_wall_post("Hello, world, from the test suite, testing liking!")
|
403
406
|
@temporary_object_id = result["id"]
|
404
407
|
like_result = @api.put_like(@temporary_object_id)
|
405
|
-
like_result.
|
408
|
+
expect(like_result).to be_truthy
|
406
409
|
end
|
407
410
|
|
408
411
|
# Page Access Token Support
|
409
412
|
describe "#get_page_access_token" do
|
410
413
|
it "gets the page object with the access_token field" do
|
411
414
|
# we can't test this live since test users (or random real users) can't be guaranteed to have pages to manage
|
412
|
-
@api.
|
415
|
+
expect(@api).to receive(:api).with("my_page", hash_including({:fields => "access_token"}), "get", anything)
|
413
416
|
@api.get_page_access_token("my_page")
|
414
417
|
end
|
415
418
|
|
416
419
|
it "merges in any other arguments" do
|
417
420
|
# we can't test this live since test users (or random real users) can't be guaranteed to have pages to manage
|
418
421
|
args = {:a => 3}
|
419
|
-
@api.
|
422
|
+
expect(@api).to receive(:api).with("my_page", hash_including(args), "get", anything)
|
420
423
|
@api.get_page_access_token("my_page", args)
|
421
424
|
end
|
422
425
|
end
|
423
426
|
|
424
427
|
it "can get information about an access token" do
|
425
428
|
result = @api.debug_token(KoalaTest.app_access_token)
|
426
|
-
result.
|
427
|
-
result["data"].
|
428
|
-
result["data"]["app_id"].to_s.
|
429
|
-
result["data"]["application"].
|
429
|
+
expect(result).to be_kind_of(Hash)
|
430
|
+
expect(result["data"]).to be_kind_of(Hash)
|
431
|
+
expect(result["data"]["app_id"].to_s).to eq(KoalaTest.app_id.to_s)
|
432
|
+
expect(result["data"]["application"]).not_to be_nil
|
430
433
|
end
|
431
434
|
|
432
435
|
describe "#set_app_restrictions" do
|
@@ -438,31 +441,31 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
438
441
|
end
|
439
442
|
|
440
443
|
it "makes a POST to /app_id" do
|
441
|
-
@app_api.
|
444
|
+
expect(@app_api).to receive(:graph_call).with(KoalaTest.app_id, anything, "post", anything)
|
442
445
|
@app_api.set_app_restrictions(KoalaTest.app_id, @restrictions)
|
443
446
|
end
|
444
447
|
|
445
448
|
it "JSON-encodes the restrictions" do
|
446
|
-
@app_api.
|
449
|
+
expect(@app_api).to receive(:graph_call).with(anything, hash_including(:restrictions => MultiJson.dump(@restrictions)), anything, anything)
|
447
450
|
@app_api.set_app_restrictions(KoalaTest.app_id, @restrictions)
|
448
451
|
end
|
449
452
|
|
450
453
|
it "includes the other arguments" do
|
451
454
|
args = {:a => 2}
|
452
|
-
@app_api.
|
455
|
+
expect(@app_api).to receive(:graph_call).with(anything, hash_including(args), anything, anything)
|
453
456
|
@app_api.set_app_restrictions(KoalaTest.app_id, @restrictions, args)
|
454
457
|
end
|
455
458
|
|
456
459
|
it "works" do
|
457
|
-
@app_api.set_app_restrictions(KoalaTest.app_id, @restrictions).
|
460
|
+
expect(@app_api.set_app_restrictions(KoalaTest.app_id, @restrictions)).to be_truthy
|
458
461
|
end
|
459
462
|
end
|
460
463
|
|
461
464
|
it "can access public information via FQL" do
|
462
465
|
result = @api.fql_query("select uid, first_name from user where uid = #{KoalaTest.user2_id}")
|
463
|
-
result.size.
|
464
|
-
result.first['first_name'].
|
465
|
-
result.first['uid'].
|
466
|
+
expect(result.size).to eq(1)
|
467
|
+
expect(result.first['first_name']).to eq(KoalaTest.user2_name)
|
468
|
+
expect(result.first['uid']).to eq(KoalaTest.user2_id.to_i)
|
466
469
|
end
|
467
470
|
|
468
471
|
it "can access public information via FQL.multiquery" do
|
@@ -470,11 +473,11 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
470
473
|
:query1 => "select uid, first_name from user where uid = #{KoalaTest.user2_id}",
|
471
474
|
:query2 => "select uid, first_name from user where uid = #{KoalaTest.user1_id}"
|
472
475
|
)
|
473
|
-
result.size.
|
476
|
+
expect(result.size).to eq(2)
|
474
477
|
# this should check for first_name, but there's an FB bug currently
|
475
|
-
result["query1"].first['uid'].
|
478
|
+
expect(result["query1"].first['uid']).to eq(KoalaTest.user2_id.to_i)
|
476
479
|
# result["query1"].first['first_name'].should == KoalaTest.user2_name
|
477
|
-
result["query2"].first['first_name'].
|
480
|
+
expect(result["query2"].first['first_name']).to eq(KoalaTest.user1_name)
|
478
481
|
end
|
479
482
|
|
480
483
|
it "can access protected information via FQL" do
|
@@ -488,9 +491,9 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
488
491
|
# now send a query about your permissions
|
489
492
|
result = @api.fql_query("select read_stream from permissions where uid = #{id}")
|
490
493
|
|
491
|
-
result.size.
|
494
|
+
expect(result.size).to eq(1)
|
492
495
|
# we've verified that you have read_stream permissions, so we can test against that
|
493
|
-
result.first["read_stream"].
|
496
|
+
expect(result.first["read_stream"]).to eq(1)
|
494
497
|
end
|
495
498
|
|
496
499
|
it "can access protected information via FQL.multiquery" do
|
@@ -499,8 +502,8 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
499
502
|
:query2 => "select fromid from comment where post_id in (select post_id from #query1)",
|
500
503
|
:query3 => "select uid, name from user where uid in (select fromid from #query2)"
|
501
504
|
)
|
502
|
-
result.size.
|
503
|
-
result.keys.
|
505
|
+
expect(result.size).to eq(3)
|
506
|
+
expect(result.keys).to include("query1", "query2", "query3")
|
504
507
|
end
|
505
508
|
|
506
509
|
# test all methods to make sure they pass data through to the API
|
@@ -532,7 +535,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
532
535
|
it "passes http options through for #{method_name}" do
|
533
536
|
options = {:a => 2}
|
534
537
|
# graph call should ultimately receive options as the fourth argument
|
535
|
-
@api.
|
538
|
+
expect(@api).to receive(:graph_call).with(anything, anything, anything, options)
|
536
539
|
|
537
540
|
# if we supply args, use them (since some methods process params)
|
538
541
|
# the method should receive as args n-1 anythings and then options
|
@@ -546,7 +549,7 @@ shared_examples_for "Koala GraphAPI with an access token" do
|
|
546
549
|
it "passes http options through for get_picture" do
|
547
550
|
options = {:a => 2}
|
548
551
|
# graph call should ultimately receive options as the fourth argument
|
549
|
-
@api.
|
552
|
+
expect(@api).to receive(:graph_call).with(anything, anything, anything, hash_including(options)).and_return({})
|
550
553
|
@api.send(:get_picture, "x", {}, options)
|
551
554
|
end
|
552
555
|
end
|
@@ -559,35 +562,35 @@ shared_examples_for "Koala GraphAPI with GraphCollection" do
|
|
559
562
|
# GraphCollection methods
|
560
563
|
it "gets a GraphCollection when getting connections" do
|
561
564
|
@result = @api.get_connections(KoalaTest.page, "photos")
|
562
|
-
@result.
|
565
|
+
expect(@result).to be_a(Koala::Facebook::GraphCollection)
|
563
566
|
end
|
564
567
|
|
565
568
|
it "returns nil if the get_collections call fails with nil" do
|
566
569
|
# this happens sometimes
|
567
|
-
@api.
|
568
|
-
@api.get_connections(KoalaTest.page, "photos").
|
570
|
+
expect(@api).to receive(:graph_call).and_return(nil)
|
571
|
+
expect(@api.get_connections(KoalaTest.page, "photos")).to be_nil
|
569
572
|
end
|
570
573
|
|
571
574
|
it "gets a GraphCollection when searching" do
|
572
575
|
result = @api.search("facebook")
|
573
|
-
result.
|
576
|
+
expect(result).to be_a(Koala::Facebook::GraphCollection)
|
574
577
|
end
|
575
578
|
|
576
579
|
it "returns nil if the search call fails with nil" do
|
577
580
|
# this happens sometimes
|
578
|
-
@api.
|
579
|
-
@api.search("facebook").
|
581
|
+
expect(@api).to receive(:graph_call).and_return(nil)
|
582
|
+
expect(@api.search("facebook")).to be_nil
|
580
583
|
end
|
581
584
|
|
582
585
|
it "gets a GraphCollection when paging through results" do
|
583
586
|
@results = @api.get_page(["search", {"q"=>"facebook", "limit"=>"25", "until"=> KoalaTest.search_time}])
|
584
|
-
@results.
|
587
|
+
expect(@results).to be_a(Koala::Facebook::GraphCollection)
|
585
588
|
end
|
586
589
|
|
587
590
|
it "returns nil if the page call fails with nil" do
|
588
591
|
# this happens sometimes
|
589
|
-
@api.
|
590
|
-
@api.get_page(["search", {"q"=>"facebook", "limit"=>"25", "until"=> KoalaTest.search_time}]).
|
592
|
+
expect(@api).to receive(:graph_call).and_return(nil)
|
593
|
+
expect(@api.get_page(["search", {"q"=>"facebook", "limit"=>"25", "until"=> KoalaTest.search_time}])).to be_nil
|
591
594
|
end
|
592
595
|
end
|
593
596
|
end
|
@@ -597,57 +600,57 @@ shared_examples_for "Koala GraphAPI without an access token" do
|
|
597
600
|
it "can't get private data about a user" do
|
598
601
|
result = @api.get_object(KoalaTest.user1)
|
599
602
|
# updated_time should be a pretty fixed test case
|
600
|
-
result["updated_time"].
|
603
|
+
expect(result["updated_time"]).to be_nil
|
601
604
|
end
|
602
605
|
|
603
606
|
it "can't get data about 'me'" do
|
604
|
-
|
607
|
+
expect { @api.get_object("me") }.to raise_error(Koala::Facebook::ClientError)
|
605
608
|
end
|
606
609
|
|
607
610
|
it "can't access connections from users" do
|
608
|
-
|
611
|
+
expect { @api.get_connections(KoalaTest.user2, "friends") }.to raise_error(Koala::Facebook::ClientError)
|
609
612
|
end
|
610
613
|
|
611
614
|
it "can't put an object" do
|
612
|
-
|
615
|
+
expect { @result = @api.put_connections(KoalaTest.user2, "feed", :message => "Hello, world") }.to raise_error(Koala::Facebook::AuthenticationError)
|
613
616
|
# legacy put_object syntax
|
614
|
-
|
617
|
+
expect { @result = @api.put_object(KoalaTest.user2, "feed", :message => "Hello, world") }.to raise_error(Koala::Facebook::AuthenticationError)
|
615
618
|
end
|
616
619
|
|
617
620
|
# these are not strictly necessary as the other put methods resolve to put_connections,
|
618
621
|
# but are here for completeness
|
619
622
|
it "can't post to a feed" do
|
620
|
-
(lambda do
|
623
|
+
expect(lambda do
|
621
624
|
attachment = {:name => "OAuth Playground", :link => "http://oauth.twoalex.com/"}
|
622
625
|
@result = @api.put_wall_post("Hello, world", attachment, "facebook")
|
623
|
-
end).
|
626
|
+
end).to raise_error(Koala::Facebook::AuthenticationError)
|
624
627
|
end
|
625
628
|
|
626
629
|
it "can't comment on an object" do
|
627
630
|
# random public post on the facebook wall
|
628
|
-
|
631
|
+
expect { @result = @api.put_comment("7204941866_119776748033392", "The hackathon was great!") }.to raise_error(Koala::Facebook::AuthenticationError)
|
629
632
|
end
|
630
633
|
|
631
634
|
it "can't like an object" do
|
632
|
-
|
635
|
+
expect { @api.put_like("7204941866_119776748033392") }.to raise_error(Koala::Facebook::AuthenticationError)
|
633
636
|
end
|
634
637
|
|
635
638
|
# DELETE
|
636
639
|
it "can't delete posts" do
|
637
640
|
# test post on the Ruby SDK Test application
|
638
|
-
|
641
|
+
expect { @result = @api.delete_object("115349521819193_113815981982767") }.to raise_error(Koala::Facebook::AuthenticationError)
|
639
642
|
end
|
640
643
|
|
641
644
|
it "can't delete a like" do
|
642
|
-
|
645
|
+
expect { @api.delete_like("7204941866_119776748033392") }.to raise_error(Koala::Facebook::AuthenticationError)
|
643
646
|
end
|
644
647
|
|
645
648
|
# FQL_QUERY
|
646
649
|
describe "when making a FQL request" do
|
647
650
|
it "can access public information via FQL" do
|
648
651
|
result = @api.fql_query("select uid, first_name from user where uid = #{KoalaTest.user2_id}")
|
649
|
-
result.size.
|
650
|
-
result.first['first_name'].
|
652
|
+
expect(result.size).to eq(1)
|
653
|
+
expect(result.first['first_name']).to eq(KoalaTest.user2_name)
|
651
654
|
end
|
652
655
|
|
653
656
|
it "can access public information via FQL.multiquery" do
|
@@ -655,23 +658,23 @@ shared_examples_for "Koala GraphAPI without an access token" do
|
|
655
658
|
:query1 => "select uid, first_name from user where uid = #{KoalaTest.user2_id}",
|
656
659
|
:query2 => "select uid, first_name from user where uid = #{KoalaTest.user1_id}"
|
657
660
|
)
|
658
|
-
result.size.
|
659
|
-
result["query1"].first['first_name'].
|
660
|
-
result["query2"].first['first_name'].
|
661
|
+
expect(result.size).to eq(2)
|
662
|
+
expect(result["query1"].first['first_name']).to eq(KoalaTest.user2_name)
|
663
|
+
expect(result["query2"].first['first_name']).to eq(KoalaTest.user1_name)
|
661
664
|
end
|
662
665
|
|
663
666
|
it "can't access protected information via FQL" do
|
664
|
-
|
667
|
+
expect { @api.fql_query("select read_stream from permissions where uid = #{KoalaTest.user2_id}") }.to raise_error(Koala::Facebook::APIError)
|
665
668
|
end
|
666
669
|
|
667
670
|
it "can't access protected information via FQL.multiquery" do
|
668
|
-
|
671
|
+
expect {
|
669
672
|
@api.fql_multiquery(
|
670
673
|
:query1 => "select post_id from stream where source_id = me()",
|
671
674
|
:query2 => "select fromid from comment where post_id in (select post_id from #query1)",
|
672
675
|
:query3 => "select uid, name from user where uid in (select fromid from #query2)"
|
673
676
|
)
|
674
|
-
}.
|
677
|
+
}.to raise_error(Koala::Facebook::APIError)
|
675
678
|
end
|
676
679
|
end
|
677
680
|
end
|