koala 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ class GraphAndRestAPIWithTokenTests < Test::Unit::TestCase
2
+ describe "Koala GraphAndRestAPI without an access token" do
3
+ it_should_behave_like "live testing examples"
4
+ it_should_behave_like "Koala RestAPI with an access token"
5
+ it_should_behave_like "Koala GraphAPI with an access token"
6
+
7
+ before(:each) do
8
+ @api = Koala::Facebook::GraphAndRestAPI.new(@token)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,101 @@
1
+ shared_examples_for "Koala GraphAPI without an access token" do
2
+ it "should get public data about a user" do
3
+ result = @api.get_object("koppel")
4
+ # the results should have an ID and a name, among other things
5
+ (result["id"] && result["name"]).should
6
+ end
7
+
8
+ it "should not get private data about a user" do
9
+ result = @api.get_object("koppel")
10
+ # updated_time should be a pretty fixed test case
11
+ result["updated_time"].should be_nil
12
+ end
13
+
14
+ it "should get public data about a Page" do
15
+ result = @api.get_object("contextoptional")
16
+ # the results should have an ID and a name, among other things
17
+ (result["id"] && result["name"]).should
18
+ end
19
+
20
+ it "should not be able to get data about 'me'" do
21
+ lambda { @api.get_object("me") }.should raise_error(Koala::Facebook::APIError)
22
+ end
23
+
24
+ it "should be able to get multiple objects" do
25
+ results = @api.get_objects(["contextoptional", "naitik"])
26
+ results.length.should == 2
27
+ end
28
+
29
+ it "shouldn't be able to access connections from users" do
30
+ lambda { @api.get_connections("lukeshepard", "likes") }.should raise_error(Koala::Facebook::APIError)
31
+ end
32
+
33
+ it "should be able to access a user's picture" do
34
+ @api.get_picture("chris.baclig").should =~ /http\:\/\//
35
+ end
36
+
37
+ it "should be able to access connections from public Pages" do
38
+ result = @api.get_connections("contextoptional", "likes")
39
+ result["data"].should be_a(Array)
40
+ end
41
+
42
+ it "should not be able to put an object" do
43
+ lambda { @result = @api.put_object("lukeshepard", "feed", :message => "Hello, world") }.should raise_error(Koala::Facebook::APIError)
44
+ puts "Error! Object #{@result.inspect} somehow put onto Luke Shepard's wall!" if @result
45
+ end
46
+
47
+ # these are not strictly necessary as the other put methods resolve to put_object, but are here for completeness
48
+ it "should not be able to post to a feed" do
49
+ (lambda do
50
+ attachment = {:name => "Context Optional", :link => "http://www.contextoptional.com/"}
51
+ @result = @api.put_wall_post("Hello, world", attachment, "contextoptional")
52
+ end).should raise_error(Koala::Facebook::APIError)
53
+ puts "Error! Object #{@result.inspect} somehow put onto Context Optional's wall!" if @result
54
+ end
55
+
56
+ it "should not be able to comment on an object" do
57
+ # random public post on the ContextOptional wall
58
+ lambda { @result = @api.put_comment("7204941866_119776748033392", "The hackathon was great!") }.should raise_error(Koala::Facebook::APIError)
59
+ puts "Error! Object #{@result.inspect} somehow commented on post 7204941866_119776748033392!" if @result
60
+ end
61
+
62
+ it "should not be able to like an object" do
63
+ lambda { @api.put_like("7204941866_119776748033392") }.should raise_error(Koala::Facebook::APIError)
64
+ end
65
+
66
+
67
+ # DELETE
68
+ it "should not be able to delete posts" do
69
+ # test post on the Ruby SDK Test application
70
+ lambda { @result = @api.delete_object("115349521819193_113815981982767") }.should raise_error(Koala::Facebook::APIError)
71
+ end
72
+
73
+ # SEARCH
74
+ it "should be able to search" do
75
+ result = @api.search("facebook")
76
+ result["data"].should be_an(Array)
77
+ end
78
+
79
+ # API
80
+ it "should never use the rest api server" do
81
+ Koala.should_receive(:make_request).with(
82
+ anything,
83
+ anything,
84
+ anything,
85
+ hash_not_including(:rest_api => true)
86
+ ).and_return(Koala::Response.new(200, "", {}))
87
+
88
+ @api.api("anything")
89
+ end
90
+ end
91
+
92
+ class FacebookNoAccessTokenTests < Test::Unit::TestCase
93
+ describe "Koala GraphAPI without an access token" do
94
+ before :each do
95
+ @api = Koala::Facebook::GraphAPI.new
96
+ end
97
+
98
+ it_should_behave_like "Koala GraphAPI without an access token"
99
+ end
100
+ end
101
+
@@ -1,95 +1,83 @@
1
- class FacebookWithAccessTokenTests < Test::Unit::TestCase
2
- describe "Koala GraphAPI with an access token" do
3
- before :each do
4
- token = $testing_data["oauth_token"]
5
- raise Exception, "Must supply access token to run FacebookWithAccessTokenTests!" unless token
6
- @graph = Koala::Facebook::GraphAPI.new(token)
7
- end
8
-
9
- after :each do
10
- # clean up any temporary objects
11
- if @temporary_object_id
12
- puts "\nCleaning up temporary object #{@temporary_object_id.to_s}"
13
- result = @graph.delete_object(@temporary_object_id)
14
- raise "Unable to clean up temporary Graph object #{@temporary_object_id}!" unless result
15
- end
16
- end
17
-
18
- it "should get public data about a user" do
19
- result = @graph.get_object("koppel")
1
+ shared_examples_for "Koala GraphAPI with an access token" do
2
+ it "should get public data about a user" do
3
+ result = @api.get_object("koppel")
20
4
  # the results should have an ID and a name, among other things
21
5
  (result["id"] && result["name"]).should_not be_nil
22
6
  end
23
7
 
24
8
  it "should get private data about a user" do
25
- result = @graph.get_object("koppel")
9
+ result = @api.get_object("koppel")
26
10
  # updated_time should be a pretty fixed test case
27
11
  result["updated_time"].should_not be_nil
28
12
  end
29
13
 
30
14
  it "should get public data about a Page" do
31
- result = @graph.get_object("contextoptional")
15
+ result = @api.get_object("contextoptional")
32
16
  # the results should have an ID and a name, among other things
33
17
  (result["id"] && result["name"]).should
34
18
  end
35
19
 
36
20
  it "should get data about 'me'" do
37
- result = @graph.get_object("me")
21
+ result = @api.get_object("me")
38
22
  result["updated_time"].should
39
23
  end
40
24
 
41
25
  it "should be able to get multiple objects" do
42
- result = @graph.get_objects(["contextoptional", "naitik"])
26
+ result = @api.get_objects(["contextoptional", "naitik"])
43
27
  result.length.should == 2
44
28
  end
45
29
 
30
+ it "should be able to access a user's picture" do
31
+ @api.get_picture("chris.baclig").should =~ /http\:\/\//
32
+ end
33
+
46
34
  it "should be able to access connections from users" do
47
- result = @graph.get_connections("lukeshepard", "likes")
35
+ result = @api.get_connections("lukeshepard", "likes")
48
36
  result["data"].length.should > 0
49
37
  end
50
38
 
51
39
  it "should be able to access connections from public Pages" do
52
- result = @graph.get_connections("contextoptional", "likes")
40
+ result = @api.get_connections("contextoptional", "likes")
53
41
  result["data"].should be_a(Array)
54
42
  end
55
43
 
56
44
  # PUT
57
45
  it "should be able to write an object to the graph" do
58
- result = @graph.put_wall_post("Hello, world, from the test suite!")
46
+ result = @api.put_wall_post("Hello, world, from the test suite!")
59
47
  @temporary_object_id = result["id"]
60
48
  @temporary_object_id.should_not be_nil
61
49
  end
62
50
 
63
51
  # DELETE
64
52
  it "should be able to delete posts" do
65
- result = @graph.put_wall_post("Hello, world, from the test suite delete method!")
53
+ result = @api.put_wall_post("Hello, world, from the test suite delete method!")
66
54
  object_id_to_delete = result["id"]
67
- delete_result = @graph.delete_object(object_id_to_delete)
55
+ delete_result = @api.delete_object(object_id_to_delete)
68
56
  delete_result.should == true
69
57
  end
70
58
 
71
59
  # additional put tests
72
60
  it "should be able to verify messages posted to a wall" do
73
61
  message = "the cats are asleep"
74
- put_result = @graph.put_wall_post(message)
62
+ put_result = @api.put_wall_post(message)
75
63
  @temporary_object_id = put_result["id"]
76
- get_result = @graph.get_object(@temporary_object_id)
64
+ get_result = @api.get_object(@temporary_object_id)
77
65
 
78
66
  # make sure the message we sent is the message that got posted
79
67
  get_result["message"].should == message
80
68
  end
81
69
 
82
70
  it "should be able to post a message with an attachment to a feed" do
83
- result = @graph.put_wall_post("Hello, world, from the test suite again!", {:name => "Context Optional", :link => "http://www.contextoptional.com/"})
71
+ result = @api.put_wall_post("Hello, world, from the test suite again!", {:name => "Context Optional", :link => "http://www.contextoptional.com/"})
84
72
  @temporary_object_id = result["id"]
85
73
  @temporary_object_id.should_not be_nil
86
74
  end
87
75
 
88
76
  it "should be able to verify a message with an attachment posted to a feed" do
89
77
  attachment = {"name" => "Context Optional", "link" => "http://www.contextoptional.com/"}
90
- result = @graph.put_wall_post("Hello, world, from the test suite again!", attachment)
78
+ result = @api.put_wall_post("Hello, world, from the test suite again!", attachment)
91
79
  @temporary_object_id = result["id"]
92
- get_result = @graph.get_object(@temporary_object_id)
80
+ get_result = @api.get_object(@temporary_object_id)
93
81
 
94
82
  # make sure the result we fetch includes all the parameters we sent
95
83
  it_matches = attachment.inject(true) {|valid, param| valid && (get_result[param[0]] == attachment[param[0]])}
@@ -97,43 +85,51 @@ class FacebookWithAccessTokenTests < Test::Unit::TestCase
97
85
  end
98
86
 
99
87
  it "should be able to comment on an object" do
100
- result = @graph.put_wall_post("Hello, world, from the test suite, testing comments!")
88
+ result = @api.put_wall_post("Hello, world, from the test suite, testing comments!")
101
89
  @temporary_object_id = result["id"]
102
90
 
103
91
  # this will be deleted when the post gets deleted
104
- comment_result = @graph.put_comment(@temporary_object_id, "it's my comment!")
92
+ comment_result = @api.put_comment(@temporary_object_id, "it's my comment!")
105
93
  comment_result.should_not be_nil
106
94
  end
107
95
 
108
96
  it "should be able to verify a comment posted about an object" do
109
97
  message_text = "Hello, world, from the test suite, testing comments!"
110
- result = @graph.put_wall_post(message_text)
98
+ result = @api.put_wall_post(message_text)
111
99
  @temporary_object_id = result["id"]
112
100
 
113
101
  # this will be deleted when the post gets deleted
114
102
  comment_text = "it's my comment!"
115
- comment_result = @graph.put_comment(@temporary_object_id, comment_text)
116
- get_result = @graph.get_object(comment_result["id"])
103
+ comment_result = @api.put_comment(@temporary_object_id, comment_text)
104
+ get_result = @api.get_object(comment_result["id"])
117
105
 
118
106
  # make sure the text of the comment matches what we sent
119
107
  get_result["message"].should == comment_text
120
108
  end
121
109
 
122
110
  it "should be able to like an object" do
123
- result = @graph.put_wall_post("Hello, world, from the test suite, testing comments!")
111
+ result = @api.put_wall_post("Hello, world, from the test suite, testing comments!")
124
112
  @temporary_object_id = result["id"]
125
- like_result = @graph.put_like(@temporary_object_id)
113
+ like_result = @api.put_like(@temporary_object_id)
126
114
  end
127
115
 
128
116
  # SEARCH
129
117
  it "should be able to search" do
130
- result = @graph.search("facebook")
118
+ result = @api.search("facebook")
131
119
  result["data"].should be_an(Array)
132
120
  end
133
121
 
134
122
  # API
135
123
  # the above tests test this already, but we should consider additional api tests
136
-
137
- end # describe
124
+ end
138
125
 
139
- end #class
126
+ class FacebookWithAccessTokenTests < Test::Unit::TestCase
127
+ describe "Koala GraphAPI with an access token" do
128
+ it_should_behave_like "live testing examples"
129
+ it_should_behave_like "Koala GraphAPI with an access token"
130
+
131
+ before :each do
132
+ @api = Koala::Facebook::GraphAPI.new(@token)
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,15 @@
1
+ shared_examples_for "live testing examples" do
2
+ before :each do
3
+ @token = $testing_data["oauth_token"]
4
+ raise Exception, "Must supply access token to run FacebookWithAccessTokenTests!" unless @token
5
+ end
6
+
7
+ after :each do
8
+ # clean up any temporary objects
9
+ if @temporary_object_id
10
+ puts "\nCleaning up temporary object #{@temporary_object_id.to_s}"
11
+ result = @api.delete_object(@temporary_object_id)
12
+ raise "Unable to clean up temporary Graph object #{@temporary_object_id}!" unless result
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'http_services'
2
+
3
+ class NetHTTPServiceTests < Test::Unit::TestCase
4
+ module Bear
5
+ include Koala::NetHTTPService
6
+ end
7
+
8
+ it "should define a make_request static module method" do
9
+ Bear.respond_to?(:make_request).should be_true
10
+ end
11
+
12
+ it "should use POST if verb is not GET"
13
+
14
+ it "should return a Koala::Response object"
15
+ end
@@ -156,36 +156,54 @@ class FacebookOAuthTests < Test::Unit::TestCase
156
156
  url.should == "https://#{Koala::Facebook::GRAPH_SERVER}/oauth/access_token?client_id=#{@app_id}&redirect_uri=#{callback}&client_secret=#{@secret}&code=#{@code}"
157
157
  out.should_not be_nil
158
158
  end
159
+
160
+ # START CODE THAT NEEDS MOCKING
161
+
162
+ # get_access_token
163
+ it "should properly get and parse an access token token results" do
164
+ result = @oauth.get_access_token(@code)
165
+ result["access_token"].should
166
+ end
167
+
168
+ it "should raise an error when get_access_token is called with a bad code" do
169
+ lambda { @oauth.get_access_token("foo") }.should raise_error(Koala::Facebook::APIError)
170
+ end
171
+
172
+ it "should properly get and parse an app's access token token results" do
173
+ result = @oauth.get_app_access_token
174
+ result["access_token"].should
175
+ end
176
+
177
+ # protected methods
178
+ # since these are pretty fundamental and pretty testable, we want to test them
159
179
 
160
180
  # parse_access_token
161
181
  it "should properly parse access token results" do
162
- result = @oauth.parse_access_token(@raw_token_string)
182
+ result = @oauth.send(:parse_access_token, @raw_token_string)
163
183
  has_both_parts = result["access_token"] && result["expires"]
164
184
  has_both_parts.should
165
185
  end
166
186
 
167
187
  it "should properly parse offline access token results" do
168
- result = @oauth.parse_access_token(@raw_offline_access_token_string)
188
+ result = @oauth.send(:parse_access_token, @raw_offline_access_token_string)
169
189
  has_both_parts = result["access_token"] && !result["expires"]
170
190
  has_both_parts.should
171
191
  end
172
-
192
+
173
193
  # fetch_token_string
174
- # note -- we just test that this looks right, since get_access_token tests the parsing too
194
+ # somewhat duplicative with the tests for get_access_token and get_app_access_token
195
+ # but no harm in thoroughness
175
196
  it "should fetch a proper token string from Facebook when given a code" do
176
- result = @oauth.fetch_token_string(@code)
197
+ result = @oauth.send(:fetch_token_string, :code => @code, :redirect_uri => @callback_url)
177
198
  result.should =~ /^access_token/
178
199
  end
179
-
180
- # get_access_token
181
- it "should properly get and parse an access token token results" do
182
- result = @oauth.get_access_token(@code)
183
- result["access_token"].should
184
- end
185
200
 
186
- it "should raise an error when get_access_token is called with a bad code" do
187
- lambda { @oauth.get_access_token("foo") }.should raise_error(Koala::Facebook::APIError)
201
+ it "should fetch a proper token string from Facebook when asked for the app token" do
202
+ result = @oauth.send(:fetch_token_string, {:type => 'client_cred'}, true)
203
+ result.should =~ /^access_token/
188
204
  end
205
+
206
+ # END CODE THAT NEEDS MOCKING
189
207
  end # describe
190
208
 
191
209
  end #class
@@ -0,0 +1,187 @@
1
+ class FacebookRealtimeUpdatesTests < Test::Unit::TestCase
2
+ include Koala
3
+
4
+ describe "Koala RealtimeUpdates" do
5
+ before :all do
6
+ # get oauth data
7
+ @oauth_data = $testing_data["oauth_test_data"]
8
+ @app_id = @oauth_data["app_id"]
9
+ @secret = @oauth_data["secret"]
10
+ @callback_url = @oauth_data["callback_url"]
11
+ @app_access_token = @oauth_data["app_access_token"]
12
+
13
+ # check OAuth data
14
+ unless @app_id && @secret && @callback_url && @app_access_token
15
+ raise Exception, "Must supply OAuth app id, secret, app_access_token, and callback to run live subscription tests!"
16
+ end
17
+
18
+ # get subscription data
19
+ @subscription_data = $testing_data["subscription_test_data"]
20
+ @verify_token = @subscription_data["verify_token"]
21
+ @challenge_data = @subscription_data["challenge_data"]
22
+ @subscription_path = @subscription_data["subscription_path"]
23
+
24
+ # check subscription data
25
+ unless @verify_token && @challenge_data && @subscription_path
26
+ raise Exception, "Must supply verify_token and equivalent challenge_data to run live subscription tests!"
27
+ end
28
+ end
29
+
30
+ describe "when initializing" do
31
+ # basic initialization
32
+ it "should initialize properly with an app_id and an app_access_token" do
33
+ updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :app_access_token => @app_access_token)
34
+ updates.should be_a(Facebook::RealtimeUpdates)
35
+ end
36
+
37
+ # attributes
38
+ it "should allow read access to app_id, app_access_token, and secret" do
39
+ updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :app_access_token => @app_access_token)
40
+ # this should not throw errors
41
+ updates.app_id && updates.app_access_token && updates.secret
42
+ end
43
+
44
+ it "should not allow write access to app_id" do
45
+ updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :app_access_token => @app_access_token)
46
+ # this should not throw errors
47
+ lambda { updates.app_id = 2 }.should raise_error(NoMethodError)
48
+ end
49
+
50
+ it "should not allow write access to app_access_token" do
51
+ updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :app_access_token => @app_access_token)
52
+ # this should not throw errors
53
+ lambda { updates.app_access_token = 2 }.should raise_error(NoMethodError)
54
+ end
55
+
56
+ it "should not allow write access to secret" do
57
+ updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :app_access_token => @app_access_token)
58
+ # this should not throw errors
59
+ lambda { updates.secret = 2 }.should raise_error(NoMethodError)
60
+ end
61
+
62
+ # init with secret / fetching the token
63
+ it "should initialize properly with an app_id and a secret" do
64
+ updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :secret => @secret)
65
+ updates.should be_a(Facebook::RealtimeUpdates)
66
+ end
67
+
68
+ it "should fetch an app_token from Facebook when provided an app_id and a secret" do
69
+ updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :secret => @secret)
70
+ updates.app_access_token.should_not be_nil
71
+ end
72
+
73
+ it "should use the OAuth class to fetch a token when provided an app_id and a secret" do
74
+ oauth = Facebook::OAuth.new(@app_id, @secret)
75
+ token = oauth.get_app_access_token
76
+ oauth.should_receive(:get_app_access_token).and_return(token)
77
+ Facebook::OAuth.should_receive(:new).with(@app_id, @secret).and_return(oauth)
78
+ updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :secret => @secret)
79
+ end
80
+ end
81
+
82
+ describe "when used" do
83
+ before :each do
84
+ @updates = Facebook::RealtimeUpdates.new(:app_id => @app_id, :secret => @secret)
85
+ end
86
+
87
+ it "should send a subscription request to a valid server" do
88
+ result = @updates.subscribe("user", "name", @subscription_path, @verify_token)
89
+ result.should be_true
90
+ end
91
+
92
+ it "should send a subscription request to a valid server" do
93
+ result = @updates.subscribe("user", "name", @subscription_path, @verify_token)
94
+ result.should be_true
95
+ end
96
+
97
+ it "should send a subscription request to an invalid path on a valid server" do
98
+ lambda { result = @updates.subscribe("user", "name", @subscription_path + "foo", @verify_token) }.should raise_exception(Koala::Facebook::APIError)
99
+ end
100
+
101
+ it "should fail to send a subscription request to an invalid server" do
102
+ lambda { @updates.subscribe("user", "name", "foo", @verify_token) }.should raise_exception(Koala::Facebook::APIError)
103
+ end
104
+
105
+ it "should unsubscribe a valid individual object successfully" do
106
+ @updates.unsubscribe("user").should be_true
107
+ end
108
+
109
+ it "should unsubscribe all subscriptions successfully" do
110
+ @updates.unsubscribe.should be_true
111
+ end
112
+
113
+ it "should fail when an invalid object is provided to unsubscribe" do
114
+ lambda { @updates.unsubscribe("kittens") }.should raise_error(Koala::Facebook::APIError)
115
+ end
116
+
117
+ it "should is subscriptions properly" do
118
+ @updates.list_subscriptions["data"].should be_a(Array)
119
+ end
120
+ end # describe "when used"
121
+
122
+ describe "when meeting challenge" do
123
+ it "should return false if hub.mode isn't subscribe" do
124
+ params = {'hub.mode' => 'not subscribe'}
125
+ Facebook::RealtimeUpdates.meet_challenge(params).should be_false
126
+ end
127
+
128
+ it "should return false if not given a verify_token or block" do
129
+ params = {'hub.mode' => 'subscribe'}
130
+ Facebook::RealtimeUpdates.meet_challenge(params).should be_false
131
+ end
132
+
133
+ describe "and mode is 'subscribe'" do
134
+ before(:each) do
135
+ @params = {'hub.mode' => 'subscribe'}
136
+ end
137
+
138
+ describe "and a token is given" do
139
+ before(:each) do
140
+ @token = 'token'
141
+ @params['hub.verify_token'] = @token
142
+ end
143
+
144
+ it "should return false if the given verify token doesn't match" do
145
+ Facebook::RealtimeUpdates.meet_challenge(@params, @token + '1').should be_false
146
+ end
147
+
148
+ it "should return the challenge if the given verify token matches" do
149
+ @params['hub.challenge'] = 'challenge val'
150
+ Facebook::RealtimeUpdates.meet_challenge(@params, @token).should == @params['hub.challenge']
151
+ end
152
+ end
153
+
154
+ describe "and a block is given" do
155
+ it "should give the block the token as a parameter" do
156
+ Facebook::RealtimeUpdates.meet_challenge(@params)do |token|
157
+ token.should == @token
158
+ end
159
+ end
160
+
161
+ it "should return false if the given block return false" do
162
+ Facebook::RealtimeUpdates.meet_challenge(@params)do |token|
163
+ false
164
+ end.should be_false
165
+ end
166
+
167
+ it "should return false if the given block returns nil" do
168
+ Facebook::RealtimeUpdates.meet_challenge(@params)do |token|
169
+ nil
170
+ end.should be_false
171
+ end
172
+
173
+ it "should return the challenge if the given block returns true" do
174
+ @params['hub.challenge'] = 'challenge val'
175
+ Facebook::RealtimeUpdates.meet_challenge(@params) do |token|
176
+ true
177
+ end.should be_true
178
+ end
179
+ end
180
+
181
+ end # describe "and mode is subscribe"
182
+
183
+ end # describe "when meeting challenge"
184
+
185
+ end # describe
186
+
187
+ end #class
@@ -0,0 +1,94 @@
1
+ shared_examples_for "Koala RestAPI without an access token" do
2
+ # REST_CALL
3
+ describe "when making a rest request" do
4
+ it "should use the proper path" do
5
+ method = stub('methodName')
6
+ @api.should_receive(:api).with(
7
+ "method/#{method}",
8
+ anything,
9
+ anything,
10
+ anything
11
+ )
12
+
13
+ @api.rest_call(method)
14
+ end
15
+
16
+ it "should always use the rest api" do
17
+ @api.should_receive(:api).with(
18
+ anything,
19
+ anything,
20
+ anything,
21
+ :rest_api => true
22
+ )
23
+
24
+ @api.rest_call('anything')
25
+ end
26
+
27
+ it "should take an optional hash of arguments" do
28
+ args = {:arg1 => 'arg1'}
29
+
30
+ @api.should_receive(:api).with(
31
+ anything,
32
+ hash_including(args),
33
+ anything,
34
+ anything
35
+ )
36
+
37
+ @api.rest_call('anything', args)
38
+ end
39
+
40
+ it "should always ask for JSON" do
41
+ @api.should_receive(:api).with(
42
+ anything,
43
+ hash_including('format' => 'json'),
44
+ anything,
45
+ anything
46
+ )
47
+
48
+ @api.rest_call('anything')
49
+ end
50
+ end
51
+
52
+ # FQL_QUERY
53
+ describe "when making a FQL request" do
54
+ it "should call fql.query method" do
55
+ @api.should_receive(:rest_call).with(
56
+ "fql.query",
57
+ anything
58
+ ).and_return(Koala::Response.new(200, "2", {}))
59
+
60
+ @api.fql_query stub('query string')
61
+ end
62
+
63
+ it "should pass a query argument" do
64
+ query = stub('query string')
65
+
66
+ @api.should_receive(:rest_call).with(
67
+ anything,
68
+ hash_including("query" => query)
69
+ )
70
+
71
+ @api.fql_query(query)
72
+ end
73
+
74
+ it "should be able to access public information via FQL" do
75
+ @result = @api.fql_query("select first_name from user where uid = 216743")
76
+ @result.size.should == 1
77
+ @result.first["first_name"].should == "Chris"
78
+ end
79
+
80
+ it "should not be able to access protected information via FQL" do
81
+ lambda { @api.fql_query("select read_stream from permissions where uid = 216743") }.should raise_error(Koala::Facebook::APIError)
82
+ end
83
+ end
84
+ end
85
+
86
+ class FacebookRestAPINoAccessTokenTest < Test::Unit::TestCase
87
+ before :each do
88
+ @api = Koala::Facebook::RestAPI.new
89
+ end
90
+
91
+ describe "Koala RestAPI without an access token" do
92
+ it_should_behave_like "Koala RestAPI without an access token"
93
+ end
94
+ end