facebooker-lite 1.0.67
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +15 -0
- data/CHANGELOG.rdoc +24 -0
- data/COPYING.rdoc +19 -0
- data/Manifest.txt +114 -0
- data/README.rdoc +120 -0
- data/Rakefile +94 -0
- data/TODO.rdoc +4 -0
- data/facebooker.gemspec +42 -0
- data/generators/xd_receiver/templates/xd_receiver.html +10 -0
- data/generators/xd_receiver/templates/xd_receiver_ssl.html +10 -0
- data/generators/xd_receiver/xd_receiver_generator.rb +10 -0
- data/init.rb +25 -0
- data/install.rb +12 -0
- data/lib/facebooker.rb +261 -0
- data/lib/facebooker/adapters/adapter_base.rb +91 -0
- data/lib/facebooker/adapters/bebo_adapter.rb +77 -0
- data/lib/facebooker/adapters/facebook_adapter.rb +60 -0
- data/lib/facebooker/admin.rb +42 -0
- data/lib/facebooker/application.rb +37 -0
- data/lib/facebooker/attachment.rb +51 -0
- data/lib/facebooker/batch_request.rb +45 -0
- data/lib/facebooker/data.rb +57 -0
- data/lib/facebooker/feed.rb +78 -0
- data/lib/facebooker/logging.rb +44 -0
- data/lib/facebooker/mobile.rb +20 -0
- data/lib/facebooker/mock/service.rb +50 -0
- data/lib/facebooker/mock/session.rb +18 -0
- data/lib/facebooker/model.rb +139 -0
- data/lib/facebooker/models/affiliation.rb +10 -0
- data/lib/facebooker/models/album.rb +11 -0
- data/lib/facebooker/models/applicationproperties.rb +39 -0
- data/lib/facebooker/models/applicationrestrictions.rb +10 -0
- data/lib/facebooker/models/comment.rb +9 -0
- data/lib/facebooker/models/cookie.rb +10 -0
- data/lib/facebooker/models/education_info.rb +11 -0
- data/lib/facebooker/models/event.rb +28 -0
- data/lib/facebooker/models/family_relative_info.rb +7 -0
- data/lib/facebooker/models/friend_list.rb +16 -0
- data/lib/facebooker/models/group.rb +36 -0
- data/lib/facebooker/models/info_item.rb +10 -0
- data/lib/facebooker/models/info_section.rb +10 -0
- data/lib/facebooker/models/location.rb +8 -0
- data/lib/facebooker/models/message_thread.rb +89 -0
- data/lib/facebooker/models/notifications.rb +17 -0
- data/lib/facebooker/models/page.rb +46 -0
- data/lib/facebooker/models/photo.rb +19 -0
- data/lib/facebooker/models/tag.rb +12 -0
- data/lib/facebooker/models/user.rb +751 -0
- data/lib/facebooker/models/video.rb +9 -0
- data/lib/facebooker/models/work_info.rb +10 -0
- data/lib/facebooker/parser.rb +970 -0
- data/lib/facebooker/rails/backwards_compatible_param_checks.rb +31 -0
- data/lib/facebooker/rails/controller.rb +353 -0
- data/lib/facebooker/rails/extensions/action_controller.rb +47 -0
- data/lib/facebooker/rails/extensions/rack_setup.rb +16 -0
- data/lib/facebooker/rails/extensions/routing.rb +15 -0
- data/lib/facebooker/rails/facebook_pretty_errors.rb +22 -0
- data/lib/facebooker/rails/facebook_request_fix.rb +28 -0
- data/lib/facebooker/rails/facebook_request_fix_2-3.rb +31 -0
- data/lib/facebooker/rails/facebook_session_handling.rb +68 -0
- data/lib/facebooker/rails/facebook_url_rewriting.rb +60 -0
- data/lib/facebooker/rails/helpers/fb_connect.rb +75 -0
- data/lib/facebooker/rails/integration_session.rb +38 -0
- data/lib/facebooker/rails/profile_publisher_extensions.rb +42 -0
- data/lib/facebooker/rails/publisher.rb +608 -0
- data/lib/facebooker/rails/routing.rb +49 -0
- data/lib/facebooker/rails/test_helpers.rb +68 -0
- data/lib/facebooker/rails/utilities.rb +22 -0
- data/lib/facebooker/server_cache.rb +24 -0
- data/lib/facebooker/service.rb +103 -0
- data/lib/facebooker/service/base_service.rb +19 -0
- data/lib/facebooker/service/curl_service.rb +44 -0
- data/lib/facebooker/service/net_http_service.rb +12 -0
- data/lib/facebooker/service/typhoeus_multi_service.rb +27 -0
- data/lib/facebooker/service/typhoeus_service.rb +17 -0
- data/lib/facebooker/session.rb +786 -0
- data/lib/facebooker/stream_post.rb +19 -0
- data/lib/facebooker/version.rb +9 -0
- data/lib/net/http_multipart_post.rb +123 -0
- data/lib/rack/facebook.rb +89 -0
- data/lib/rack/facebook_session.rb +21 -0
- data/lib/tasks/facebooker.rake +19 -0
- data/lib/tasks/facebooker.rb +2 -0
- data/lib/tasks/tunnel.rake +46 -0
- data/rails/init.rb +1 -0
- data/setup.rb +1585 -0
- data/templates/layout.erb +24 -0
- data/test/facebooker/adapters_test.rb +191 -0
- data/test/facebooker/admin_test.rb +102 -0
- data/test/facebooker/application_test.rb +110 -0
- data/test/facebooker/attachment_test.rb +72 -0
- data/test/facebooker/batch_request_test.rb +83 -0
- data/test/facebooker/data_test.rb +86 -0
- data/test/facebooker/logging_test.rb +43 -0
- data/test/facebooker/mobile_test.rb +45 -0
- data/test/facebooker/model_test.rb +133 -0
- data/test/facebooker/models/event_test.rb +15 -0
- data/test/facebooker/models/page_test.rb +56 -0
- data/test/facebooker/models/photo_test.rb +16 -0
- data/test/facebooker/models/user_test.rb +1074 -0
- data/test/facebooker/rails/facebook_request_fix_2-3_test.rb +25 -0
- data/test/facebooker/rails/facebook_url_rewriting_test.rb +76 -0
- data/test/facebooker/rails/integration_session_test.rb +13 -0
- data/test/facebooker/rails/publisher_test.rb +538 -0
- data/test/facebooker/rails_integration_test.rb +1543 -0
- data/test/facebooker/server_cache_test.rb +44 -0
- data/test/facebooker/service_test.rb +58 -0
- data/test/facebooker/session_test.rb +883 -0
- data/test/facebooker_test.rb +1263 -0
- data/test/fixtures/multipart_post_body_with_only_parameters.txt +33 -0
- data/test/fixtures/multipart_post_body_with_single_file.txt +38 -0
- data/test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt +38 -0
- data/test/net/http_multipart_post_test.rb +52 -0
- data/test/rack/facebook_session_test.rb +34 -0
- data/test/rack/facebook_test.rb +73 -0
- data/test/rails_test_helper.rb +36 -0
- data/test/test_helper.rb +74 -0
- metadata +278 -0
@@ -0,0 +1,1543 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../rails_test_helper')
|
2
|
+
|
3
|
+
module FBConnectTestHelpers
|
4
|
+
def setup_fb_connect_cookies(params=cookie_hash_for_auth)
|
5
|
+
params.each {|k,v| @request.cookies[ENV['FACEBOOK_API_KEY']+k] = CGI::Cookie.new(ENV['FACEBOOK_API_KEY']+k,v).first}
|
6
|
+
end
|
7
|
+
|
8
|
+
def expired_cookie_hash_for_auth
|
9
|
+
{"_ss" => "not_used", "_session_key"=> "whatever", "_user"=>"77777", "_expires"=>"#{1.day.ago.to_i}"}
|
10
|
+
end
|
11
|
+
|
12
|
+
def cookie_hash_for_auth
|
13
|
+
{"_ss" => "not_used", "_session_key"=> "whatever", "_user"=>"77777", "_expires"=>"#{1.day.from_now.to_i}"}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
class NoisyController < ActionController::Base
|
17
|
+
include Facebooker::Rails::Controller
|
18
|
+
def rescue_action(e) raise e end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
class ControllerWhichRequiresExtendedPermissions< NoisyController
|
23
|
+
ensure_authenticated_to_facebook
|
24
|
+
before_filter :ensure_has_status_update
|
25
|
+
before_filter :ensure_has_photo_upload
|
26
|
+
before_filter :ensure_has_video_upload
|
27
|
+
before_filter :ensure_has_create_listing
|
28
|
+
before_filter :ensure_has_create_event
|
29
|
+
def index
|
30
|
+
render :text => 'score!'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class FBConnectController < NoisyController
|
35
|
+
before_filter :create_facebook_session
|
36
|
+
def index
|
37
|
+
render :text => 'score!'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class FBConnectControllerProxy < NoisyController
|
42
|
+
before_filter :create_facebook_session_with_secret
|
43
|
+
def index
|
44
|
+
render :text => 'score!'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class ControllerWhichRequiresFacebookAuthentication < NoisyController
|
49
|
+
ensure_authenticated_to_facebook
|
50
|
+
def index
|
51
|
+
render :text => 'score!'
|
52
|
+
end
|
53
|
+
def link_test
|
54
|
+
options = {}
|
55
|
+
options[:canvas] = true if params[:canvas] == true
|
56
|
+
options[:canvas] = false if params[:canvas] == false
|
57
|
+
render :text=>url_for(options)
|
58
|
+
end
|
59
|
+
|
60
|
+
def named_route_test
|
61
|
+
render :text=>comments_url()
|
62
|
+
end
|
63
|
+
|
64
|
+
def image_test
|
65
|
+
render :inline=>"<%=image_tag 'image.png'%>"
|
66
|
+
end
|
67
|
+
|
68
|
+
def fb_params_test
|
69
|
+
render :text=>facebook_params['user']
|
70
|
+
end
|
71
|
+
|
72
|
+
def publisher_test
|
73
|
+
if wants_interface?
|
74
|
+
render :text=>"interface"
|
75
|
+
else
|
76
|
+
render :text=>"not interface"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def publisher_test_interface
|
81
|
+
render_publisher_interface("This is a test",false,true)
|
82
|
+
end
|
83
|
+
|
84
|
+
def publisher_test_response
|
85
|
+
ua=Facebooker::Rails::Publisher::UserAction.new
|
86
|
+
ua.data = {:params=>true}
|
87
|
+
ua.template_name = "template_name"
|
88
|
+
ua.template_id = 1234
|
89
|
+
render_publisher_response(ua)
|
90
|
+
end
|
91
|
+
|
92
|
+
def publisher_test_error
|
93
|
+
render_publisher_error("Title","Body")
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
class ControllerWhichRequiresApplicationInstallation < NoisyController
|
98
|
+
ensure_application_is_installed_by_facebook_user
|
99
|
+
def index
|
100
|
+
render :text => 'installed!'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
class FacebookController < ActionController::Base
|
104
|
+
def index
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class PlainOldRailsController < ActionController::Base
|
109
|
+
def index
|
110
|
+
end
|
111
|
+
def link_test
|
112
|
+
options = {}
|
113
|
+
options[:canvas] = true if params[:canvas] == true
|
114
|
+
options[:canvas] = false if params[:canvas] == false
|
115
|
+
render :text => url_for(options)
|
116
|
+
end
|
117
|
+
|
118
|
+
def named_route_test
|
119
|
+
render :text=>comments_url()
|
120
|
+
end
|
121
|
+
def canvas_false_test
|
122
|
+
render :text=>comments_url(:canvas=>false)
|
123
|
+
end
|
124
|
+
def canvas_true_test
|
125
|
+
render :text=>comments_url(:canvas=>true)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
# you can't use asset_recognize, because it can't pass parameters in to the requests
|
131
|
+
class UrlRecognitionTests < Test::Unit::TestCase
|
132
|
+
def test_detects_in_canvas
|
133
|
+
if Rails.version < '2.3'
|
134
|
+
request = ActionController::TestRequest.new({"fb_sig_in_canvas"=>"1"}, {}, nil)
|
135
|
+
else
|
136
|
+
request = ActionController::TestRequest.new
|
137
|
+
request.query_parameters[:fb_sig_in_canvas] = "1"
|
138
|
+
end
|
139
|
+
request.path = "/"
|
140
|
+
ActionController::Routing::Routes.recognize(request)
|
141
|
+
assert_equal({"controller"=>"facebook","action"=>"index"},request.path_parameters)
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_routes_when_not_in_canvas
|
145
|
+
if Rails.version < '2.3'
|
146
|
+
request = ActionController::TestRequest.new({}, {}, nil)
|
147
|
+
else
|
148
|
+
request = ActionController::TestRequest.new
|
149
|
+
end
|
150
|
+
request.path = "/"
|
151
|
+
ActionController::Routing::Routes.recognize(request)
|
152
|
+
assert_equal({"controller"=>"plain_old_rails","action"=>"index"},request.path_parameters)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
class RailsIntegrationTestForFBConnect < Test::Unit::TestCase
|
157
|
+
include FBConnectTestHelpers
|
158
|
+
|
159
|
+
def setup
|
160
|
+
Facebooker.apply_configuration({
|
161
|
+
'api_key' => '1234567',
|
162
|
+
'canvas_page_name' => 'facebook_app_name',
|
163
|
+
'secret_key' => '7654321' })
|
164
|
+
@controller = FBConnectController.new
|
165
|
+
@request = ActionController::TestRequest.new
|
166
|
+
@response = ActionController::TestResponse.new
|
167
|
+
@controller.stubs(:verify_signature).returns(true)
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_doesnt_set_cookie_but_facebook_session_is_available
|
172
|
+
setup_fb_connect_cookies
|
173
|
+
get :index
|
174
|
+
assert_not_nil @controller.facebook_session
|
175
|
+
assert_nil @response.cookies[:facebook_session]
|
176
|
+
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
class RailsIntegrationTestForNonFacebookControllers < Test::Unit::TestCase
|
181
|
+
def setup
|
182
|
+
Facebooker.apply_configuration({
|
183
|
+
'api_key' => '1234567',
|
184
|
+
'canvas_page_name' => 'facebook_app_name',
|
185
|
+
'secret_key' => '7654321' })
|
186
|
+
@controller = PlainOldRailsController.new
|
187
|
+
@request = ActionController::TestRequest.new
|
188
|
+
@response = ActionController::TestResponse.new
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_url_for_links_to_callback_if_canvas_is_false_and_in_canvas
|
192
|
+
get :link_test
|
193
|
+
assert_match(/test.host/, @response.body)
|
194
|
+
end
|
195
|
+
|
196
|
+
def test_named_route_doesnt_include_canvas_path_when_not_in_canvas
|
197
|
+
get :named_route_test
|
198
|
+
assert_equal "http://test.host/comments",@response.body
|
199
|
+
end
|
200
|
+
def test_named_route_includes_canvas_path_when_in_canvas
|
201
|
+
get :named_route_test, facebook_params
|
202
|
+
assert_equal "http://apps.facebook.com/facebook_app_name/comments",@response.body
|
203
|
+
end
|
204
|
+
|
205
|
+
def test_named_route_doesnt_include_canvas_path_when_in_canvas_with_canvas_equals_false
|
206
|
+
get :canvas_false_test, facebook_params
|
207
|
+
assert_equal "http://test.host/comments",@response.body
|
208
|
+
end
|
209
|
+
def test_named_route_does_include_canvas_path_when_not_in_canvas_with_canvas_equals_true
|
210
|
+
get :canvas_true_test
|
211
|
+
assert_equal "http://apps.facebook.com/facebook_app_name/comments",@response.body
|
212
|
+
end
|
213
|
+
|
214
|
+
end
|
215
|
+
|
216
|
+
class RailsIntegrationTestForExtendedPermissions < Test::Unit::TestCase
|
217
|
+
def setup
|
218
|
+
Facebooker.apply_configuration({
|
219
|
+
'api_key' => '1234567',
|
220
|
+
'secret_key' => '7654321' })
|
221
|
+
@controller = ControllerWhichRequiresExtendedPermissions.new
|
222
|
+
@request = ActionController::TestRequest.new
|
223
|
+
@response = ActionController::TestResponse.new
|
224
|
+
@controller.stubs(:verify_signature).returns(true)
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_redirects_without_set_status
|
228
|
+
post :index, facebook_params
|
229
|
+
assert_response :success
|
230
|
+
assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=status_update\" />", @response.body)
|
231
|
+
end
|
232
|
+
def test_redirects_without_photo_upload
|
233
|
+
post :index, facebook_params(:fb_sig_ext_perms=>"status_update,create_event")
|
234
|
+
assert_response :success
|
235
|
+
assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=photo_upload\" />", @response.body)
|
236
|
+
end
|
237
|
+
def test_redirects_without_video_upload
|
238
|
+
post :index, facebook_params(:fb_sig_ext_perms=>"status_update,photo_upload,create_event")
|
239
|
+
assert_response :success
|
240
|
+
assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=video_upload\" />", @response.body)
|
241
|
+
end
|
242
|
+
def test_redirects_without_create_listing
|
243
|
+
post :index, facebook_params(:fb_sig_ext_perms=>"status_update,photo_upload,video_upload,create_event")
|
244
|
+
assert_response :success
|
245
|
+
assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=create_listing\" />", @response.body)
|
246
|
+
end
|
247
|
+
def test_redirects_without_create_event
|
248
|
+
post :index, facebook_params(:fb_sig_ext_perms=>"status_update,photo_upload,create_listing,video_upload")
|
249
|
+
assert_response :success
|
250
|
+
assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=create_event\" />", @response.body)
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_renders_with_permission
|
254
|
+
post :index, facebook_params(:fb_sig_ext_perms=>"status_update,photo_upload,create_listing,video_upload,create_event")
|
255
|
+
assert_response :success
|
256
|
+
assert_equal("score!", @response.body)
|
257
|
+
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
class RailsIntegrationTestForApplicationInstallation < Test::Unit::TestCase
|
262
|
+
def setup
|
263
|
+
Facebooker.apply_configuration({
|
264
|
+
'api_key' => '1234567',
|
265
|
+
'secret_key' => '7654321' })
|
266
|
+
@controller = ControllerWhichRequiresApplicationInstallation.new
|
267
|
+
@request = ActionController::TestRequest.new
|
268
|
+
@response = ActionController::TestResponse.new
|
269
|
+
@controller.stubs(:verify_signature).returns(true)
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_if_controller_requires_application_installation_unauthenticated_requests_will_redirect_to_install_page
|
273
|
+
get :index
|
274
|
+
assert_response :redirect
|
275
|
+
assert_equal("http://www.facebook.com/install.php?api_key=1234567&v=1.0&next=http%3A%2F%2Ftest.host%2Frequire_install", @response.headers['Location'])
|
276
|
+
end
|
277
|
+
|
278
|
+
def test_if_controller_requires_application_installation_authenticated_requests_without_installation_will_redirect_to_install_page
|
279
|
+
get :index, facebook_params(:fb_sig_added => nil)
|
280
|
+
assert_response :success
|
281
|
+
assert(@response.body =~ /fb:redirect/)
|
282
|
+
end
|
283
|
+
|
284
|
+
def test_if_controller_requires_application_installation_authenticated_requests_with_installation_will_render
|
285
|
+
get :index, facebook_params('fb_sig_added' => "1")
|
286
|
+
assert_response :success
|
287
|
+
assert_equal("installed!", @response.body)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
class RailsIntegrationTest < Test::Unit::TestCase
|
292
|
+
include FBConnectTestHelpers
|
293
|
+
def setup
|
294
|
+
Facebooker.apply_configuration({
|
295
|
+
'api_key' => '1234567',
|
296
|
+
'canvas_page_name' => 'root',
|
297
|
+
'secret_key' => '7654321',
|
298
|
+
'set_asset_host_to_callback_url' => true,
|
299
|
+
'callback_url' => "http://root.example.com" })
|
300
|
+
@controller = ControllerWhichRequiresFacebookAuthentication.new
|
301
|
+
@request = ActionController::TestRequest.new
|
302
|
+
@response = ActionController::TestResponse.new
|
303
|
+
@controller.stubs(:verify_signature).returns(true)
|
304
|
+
|
305
|
+
end
|
306
|
+
|
307
|
+
def test_named_route_includes_new_canvas_path_when_in_new_canvas
|
308
|
+
get :named_route_test, facebook_params("fb_sig_in_new_facebook"=>"1")
|
309
|
+
assert_equal "http://apps.facebook.com/root/comments",@response.body
|
310
|
+
end
|
311
|
+
|
312
|
+
def test_if_controller_requires_facebook_authentication_unauthenticated_requests_will_redirect
|
313
|
+
get :index
|
314
|
+
assert_response :redirect
|
315
|
+
assert_equal("http://www.facebook.com/login.php?api_key=1234567&v=1.0&next=http%3A%2F%2Ftest.host%2Frequire_auth", @response.headers['Location'])
|
316
|
+
end
|
317
|
+
|
318
|
+
def test_facebook_params_are_parsed_into_a_separate_hash
|
319
|
+
get :index, facebook_params(:fb_sig_user => '9')
|
320
|
+
assert_not_nil @controller.facebook_params['time']
|
321
|
+
end
|
322
|
+
|
323
|
+
def test_facebook_params_convert_in_canvas_to_boolean
|
324
|
+
get :index, facebook_params
|
325
|
+
assert_equal(true, @controller.facebook_params['in_canvas'])
|
326
|
+
end
|
327
|
+
|
328
|
+
def test_facebook_params_convert_added_to_boolean_false
|
329
|
+
get :index, facebook_params(:fb_sig_added => '0')
|
330
|
+
assert_equal(false, @controller.facebook_params['added'])
|
331
|
+
end
|
332
|
+
|
333
|
+
def test_facebook_params_convert_added_to_boolean_true
|
334
|
+
get :index, facebook_params('fb_sig_added' => "1")
|
335
|
+
assert_equal(true, @controller.facebook_params['added'])
|
336
|
+
end
|
337
|
+
|
338
|
+
def test_facebook_params_convert_added_to_boolean_false_when_already_false
|
339
|
+
get :index, facebook_params('fb_sig_added' => false)
|
340
|
+
assert_equal(false, @controller.facebook_params['added'])
|
341
|
+
end
|
342
|
+
|
343
|
+
def test_facebook_params_convert_added_to_boolean_true_when_already_true
|
344
|
+
get :index, facebook_params('fb_sig_added' => true)
|
345
|
+
assert_equal(true, @controller.facebook_params['added'])
|
346
|
+
end
|
347
|
+
|
348
|
+
def test_facebook_params_convert_expirey_into_nil
|
349
|
+
get :index, facebook_params(:fb_sig_expires => '0')
|
350
|
+
assert_nil(@controller.facebook_params['expires'])
|
351
|
+
end
|
352
|
+
|
353
|
+
def test_facebook_params_convert_expirey_into_time
|
354
|
+
get :index, facebook_params(:fb_sig_expires => 5.minutes.from_now.to_f)
|
355
|
+
assert_instance_of Time, @controller.facebook_params['expires']
|
356
|
+
end
|
357
|
+
|
358
|
+
def test_facebook_params_convert_friend_list_to_parsed_array_of_friend_ids
|
359
|
+
get :index, facebook_params(:fb_sig_friends => '1,2,3,4,5')
|
360
|
+
assert_kind_of(Array, @controller.facebook_params['friends'])
|
361
|
+
assert_equal(5, @controller.facebook_params['friends'].size)
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_session_can_be_resecured_from_facebook_params
|
365
|
+
get :index, facebook_params(:fb_sig_user => 10)
|
366
|
+
assert_equal(10, @controller.facebook_session.user.id)
|
367
|
+
end
|
368
|
+
|
369
|
+
def test_existing_secured_session_is_used_if_available
|
370
|
+
session = Facebooker::Session.create(Facebooker::Session.api_key, Facebooker::Session.secret_key)
|
371
|
+
session.secure_with!("session_key", "111", Time.now.to_i + 60)
|
372
|
+
get :index, facebook_params(:fb_sig_session_key => 'session_key', :fb_sig_user => '987'), {:facebook_session => session}
|
373
|
+
assert_equal(111, @controller.facebook_session.user.id)
|
374
|
+
end
|
375
|
+
|
376
|
+
def test_facebook_params_used_if_existing_secured_session_key_does_not_match
|
377
|
+
session = Facebooker::Session.create(Facebooker::Session.api_key, Facebooker::Session.secret_key)
|
378
|
+
session.secure_with!("different session key", "111", Time.now.to_i + 60)
|
379
|
+
get :index, facebook_params(:fb_sig_session_key => '', :fb_sig_user => '123'), {:facebook_session => session}
|
380
|
+
assert_equal(123, @controller.facebook_session.user.id)
|
381
|
+
end
|
382
|
+
|
383
|
+
def test_existing_secured_session_is_NOT_used_if_available_and_facebook_params_session_key_is_nil_and_in_canvas
|
384
|
+
session = Facebooker::Session.create(Facebooker::Session.api_key, Facebooker::Session.secret_key)
|
385
|
+
session.secure_with!("session_key", "111", Time.now.to_i + 60)
|
386
|
+
session.secure_with!("a session key", "1111111", Time.now.to_i + 60)
|
387
|
+
get :index, facebook_params(:fb_sig_session_key => '', :fb_sig_user => '987'), {:facebook_session => session}
|
388
|
+
assert_equal(987, @controller.facebook_session.user.id)
|
389
|
+
end
|
390
|
+
|
391
|
+
def test_existing_secured_session_IS_used_if_available_and_facebook_params_session_key_is_nil_and_NOT_in_canvas
|
392
|
+
@contoller = PlainOldRailsController.new
|
393
|
+
session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY'])
|
394
|
+
session.secure_with!("a session key", "1111111", Time.now.to_i + 60)
|
395
|
+
get :index,{}, {:facebook_session => session}
|
396
|
+
|
397
|
+
assert_equal(1111111, @controller.facebook_session.user.id)
|
398
|
+
end
|
399
|
+
|
400
|
+
def test_session_can_be_secured_with_secret
|
401
|
+
@controller = FBConnectControllerProxy.new
|
402
|
+
auth_token = 'ohaiauthtokenhere111'
|
403
|
+
modified_params = facebook_params
|
404
|
+
modified_params.delete('fb_sig_session_key')
|
405
|
+
modified_params['auth_token'] = auth_token
|
406
|
+
modified_params['generate_session_secret'] = true
|
407
|
+
session_mock = flexmock(session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY']))
|
408
|
+
session_params = { 'session_key' => '123', 'uid' => '321' }
|
409
|
+
session_mock.should_receive(:post).with('facebook.auth.getSession', :auth_token => auth_token, :generate_session_secret => "1").once.and_return(session_params).ordered
|
410
|
+
flexmock(@controller).should_receive(:new_facebook_session).once.and_return(session).ordered
|
411
|
+
get :index, modified_params
|
412
|
+
end
|
413
|
+
|
414
|
+
def test_session_can_be_secured_with_auth_token
|
415
|
+
auth_token = 'ohaiauthtokenhere111'
|
416
|
+
modified_params = facebook_params
|
417
|
+
modified_params.delete('fb_sig_session_key')
|
418
|
+
modified_params['auth_token'] = auth_token
|
419
|
+
session_mock = flexmock(session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY']))
|
420
|
+
session_params = { 'session_key' => '123', 'uid' => '321' }
|
421
|
+
session_mock.should_receive(:post).with('facebook.auth.getSession', :auth_token => auth_token, :generate_session_secret => "0").once.and_return(session_params).ordered
|
422
|
+
flexmock(@controller).should_receive(:new_facebook_session).once.and_return(session).ordered
|
423
|
+
get :index, modified_params
|
424
|
+
end
|
425
|
+
|
426
|
+
def test_session_secured_with_auth_token_if_cookies_expired
|
427
|
+
auth_token = 'ohaiauthtokenhere111'
|
428
|
+
modified_params = facebook_params
|
429
|
+
modified_params.delete('fb_sig_session_key')
|
430
|
+
modified_params['auth_token'] = auth_token
|
431
|
+
session_mock = flexmock(session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY']))
|
432
|
+
session_params = { 'session_key' => '123', 'uid' => '321' }
|
433
|
+
session_mock.should_receive(:post).with('facebook.auth.getSession', :auth_token => auth_token, :generate_session_secret => "0").once.and_return(session_params).ordered
|
434
|
+
flexmock(@controller).should_receive(:new_facebook_session).once.and_return(session).ordered
|
435
|
+
setup_fb_connect_cookies(expired_cookie_hash_for_auth)
|
436
|
+
get :index, modified_params
|
437
|
+
assert_equal(321, @controller.facebook_session.user.id)
|
438
|
+
end
|
439
|
+
|
440
|
+
def test_session_can_be_secured_with_cookies
|
441
|
+
setup_fb_connect_cookies
|
442
|
+
get :index
|
443
|
+
assert_equal(77777, @controller.facebook_session.user.id)
|
444
|
+
end
|
445
|
+
|
446
|
+
def test_session_does_NOT_secure_with_expired_cookies
|
447
|
+
setup_fb_connect_cookies(expired_cookie_hash_for_auth)
|
448
|
+
get :index
|
449
|
+
assert_nil(@controller.facebook_session)
|
450
|
+
end
|
451
|
+
|
452
|
+
def test_user_friends_can_be_populated_from_facebook_params_if_available
|
453
|
+
get :index, facebook_params(:fb_sig_friends => '1,2,3,4')
|
454
|
+
friends = @controller.facebook_session.user.friends
|
455
|
+
assert_not_nil(friends)
|
456
|
+
assert_equal(4, friends.size)
|
457
|
+
end
|
458
|
+
|
459
|
+
def test_fbml_redirect_tag_handles_hash_parameters_correctly
|
460
|
+
get :index, facebook_params
|
461
|
+
assert_equal "<fb:redirect url=\"http://apps.facebook.com/root/require_auth\" />", @controller.send(:fbml_redirect_tag, :action => :index,:canvas=>true)
|
462
|
+
end
|
463
|
+
|
464
|
+
def test_redirect_to_renders_fbml_redirect_tag_if_request_is_for_a_facebook_canvas
|
465
|
+
get :index, facebook_params(:fb_sig_user => nil)
|
466
|
+
assert_response :success
|
467
|
+
assert @response.body =~ /fb:redirect/
|
468
|
+
end
|
469
|
+
|
470
|
+
def test_redirect_to_renders_javascript_redirect_if_request_is_for_a_facebook_iframe
|
471
|
+
get :index, facebook_params(:fb_sig_user => nil, :fb_sig_in_iframe => 1)
|
472
|
+
assert_response :success
|
473
|
+
assert_match "javascript", @response.body
|
474
|
+
assert_match "http-equiv", @response.body
|
475
|
+
assert_match "http://www.facebook.com/login.php?api_key=1234567&v=1.0", @response.body
|
476
|
+
end
|
477
|
+
|
478
|
+
def test_url_for_links_to_canvas_if_canvas_is_true_and_not_in_canvas
|
479
|
+
get :link_test, facebook_params(:fb_sig_in_canvas=>0,:canvas=>true)
|
480
|
+
assert_match(/apps.facebook.com/, @response.body)
|
481
|
+
end
|
482
|
+
|
483
|
+
def test_includes_relative_url_root_when_linked_to_canvas
|
484
|
+
get :link_test,facebook_params(:fb_sig_in_canvas=>0,:canvas=>true)
|
485
|
+
assert_match(/root/,@response.body)
|
486
|
+
end
|
487
|
+
|
488
|
+
def test_url_for_links_to_callback_if_canvas_is_false_and_in_canvas
|
489
|
+
get :link_test,facebook_params(:fb_sig_in_canvas=>0,:canvas=>false)
|
490
|
+
assert_match(/test.host/,@response.body)
|
491
|
+
end
|
492
|
+
|
493
|
+
def test_url_for_doesnt_include_url_root_when_not_linked_to_canvas
|
494
|
+
get :link_test,facebook_params(:fb_sig_in_canvas=>0,:canvas=>false)
|
495
|
+
assert !@response.body.match(/root/)
|
496
|
+
end
|
497
|
+
|
498
|
+
def test_url_for_links_to_canvas_if_fb_sig_is_ajax_is_true_and_fb_sig_in_canvas_is_not_true
|
499
|
+
# Normal fb ajax calls have no fb_sig_canvas_param but we must explicitly set it to 0 because it is set to 1 in default_facebook_parameters in test helpers
|
500
|
+
get :link_test, facebook_params(:fb_sig_is_ajax=>1, :fb_sig_in_canvas=>0)
|
501
|
+
assert_match(/apps.facebook.com/, @response.body)
|
502
|
+
end
|
503
|
+
|
504
|
+
def test_default_url_omits_fb_params
|
505
|
+
get :index,facebook_params(:fb_sig_friends=>"overwriteme",:get_param=>"yes")
|
506
|
+
assert_equal "http://apps.facebook.com/root/require_auth?get_param=yes", @controller.send(:default_after_facebook_login_url)
|
507
|
+
end
|
508
|
+
|
509
|
+
def test_url_for_links_to_canvas_if_canvas_is_not_set
|
510
|
+
get :link_test,facebook_params
|
511
|
+
assert_match(/apps.facebook.com/,@response.body)
|
512
|
+
end
|
513
|
+
|
514
|
+
def test_image_tag
|
515
|
+
get :image_test, facebook_params
|
516
|
+
assert_equal "<img alt=\"Image\" src=\"http://root.example.com/images/image.png\" />",@response.body
|
517
|
+
end
|
518
|
+
|
519
|
+
def test_wants_interface_is_available_and_detects_method
|
520
|
+
get :publisher_test, facebook_params(:method=>"publisher_getInterface")
|
521
|
+
assert_equal "interface",@response.body
|
522
|
+
end
|
523
|
+
def test_wants_interface_is_available_and_detects_not_interface
|
524
|
+
get :publisher_test, facebook_params(:method=>"publisher_getFeedStory")
|
525
|
+
assert_equal "not interface",@response.body
|
526
|
+
end
|
527
|
+
|
528
|
+
def test_publisher_test_error
|
529
|
+
get :publisher_test_error, facebook_params
|
530
|
+
assert_equal Facebooker.json_decode("{\"errorCode\": 1, \"errorTitle\": \"Title\", \"errorMessage\": \"Body\"}"), Facebooker.json_decode(@response.body)
|
531
|
+
end
|
532
|
+
|
533
|
+
def test_publisher_test_interface
|
534
|
+
get :publisher_test_interface, facebook_params
|
535
|
+
assert_equal Facebooker.json_decode("{\"method\": \"publisher_getInterface\", \"content\": {\"fbml\": \"This is a test\", \"publishEnabled\": false, \"commentEnabled\": true}}"), Facebooker.json_decode(@response.body)
|
536
|
+
end
|
537
|
+
|
538
|
+
def test_publisher_test_reponse
|
539
|
+
get :publisher_test_response, facebook_params
|
540
|
+
assert_equal Facebooker.json_decode("{\"method\": \"publisher_getFeedStory\", \"content\": {\"feed\": {\"template_data\": {\"params\": true}, \"template_id\": 1234}}}"), Facebooker.json_decode(@response.body)
|
541
|
+
|
542
|
+
end
|
543
|
+
|
544
|
+
private
|
545
|
+
|
546
|
+
def expired_cookie_hash_for_auth
|
547
|
+
{"_ss" => "not_used", "_session_key"=> "whatever", "_user"=>"77777", "_expires"=>"#{1.day.ago.to_i}"}
|
548
|
+
end
|
549
|
+
|
550
|
+
def cookie_hash_for_auth
|
551
|
+
{"_ss" => "not_used", "_session_key"=> "whatever", "_user"=>"77777", "_expires"=>"#{1.day.from_now.to_i}"}
|
552
|
+
end
|
553
|
+
|
554
|
+
end
|
555
|
+
|
556
|
+
|
557
|
+
class RailsSignatureTest < Test::Unit::TestCase
|
558
|
+
def setup
|
559
|
+
Facebooker.apply_configuration({
|
560
|
+
'api_key' => '1234567',
|
561
|
+
'canvas_page_name' => 'root',
|
562
|
+
'secret_key' => '7654321' })
|
563
|
+
@controller = ControllerWhichRequiresFacebookAuthentication.new
|
564
|
+
@request = ActionController::TestRequest.new
|
565
|
+
@response = ActionController::TestResponse.new
|
566
|
+
|
567
|
+
end
|
568
|
+
|
569
|
+
if Rails.version < '2.3'
|
570
|
+
|
571
|
+
def test_should_raise_on_bad_sig
|
572
|
+
begin
|
573
|
+
get :fb_params_test, facebook_params.merge('fb_sig' => 'incorrect')
|
574
|
+
fail "No IncorrectSignature raised"
|
575
|
+
rescue Facebooker::Session::IncorrectSignature=>e
|
576
|
+
end
|
577
|
+
end
|
578
|
+
|
579
|
+
def test_valid_signature
|
580
|
+
@controller.expects(:earliest_valid_session).returns(Time.at(1186588275.5988)-1)
|
581
|
+
get :fb_params_test, facebook_params
|
582
|
+
end
|
583
|
+
|
584
|
+
end
|
585
|
+
|
586
|
+
def test_should_raise_too_old_for_replayed_session
|
587
|
+
begin
|
588
|
+
get :fb_params_test, facebook_params('fb_sig_time' => Time.now.to_i - 49.hours)
|
589
|
+
fail "No SignatureTooOld raised"
|
590
|
+
rescue Facebooker::Session::SignatureTooOld=>e
|
591
|
+
end
|
592
|
+
end
|
593
|
+
|
594
|
+
end
|
595
|
+
class RailsHelperTest < Test::Unit::TestCase
|
596
|
+
class HelperClass
|
597
|
+
include ActionView::Helpers::TextHelper
|
598
|
+
include ActionView::Helpers::CaptureHelper
|
599
|
+
include ActionView::Helpers::TagHelper
|
600
|
+
include ActionView::Helpers::AssetTagHelper
|
601
|
+
include ActionView::Helpers::JavaScriptHelper
|
602
|
+
include Facebooker::Rails::Helpers
|
603
|
+
attr_accessor :flash, :output_buffer
|
604
|
+
def initialize
|
605
|
+
@flash={}
|
606
|
+
@template = self
|
607
|
+
@content_for_test_param="Test Param"
|
608
|
+
@output_buffer = ""
|
609
|
+
end
|
610
|
+
#used for stubbing out the form builder
|
611
|
+
def url_for(arg)
|
612
|
+
arg
|
613
|
+
end
|
614
|
+
def request
|
615
|
+
ActionController::TestRequest.new
|
616
|
+
end
|
617
|
+
def fields_for(*args)
|
618
|
+
""
|
619
|
+
end
|
620
|
+
|
621
|
+
end
|
622
|
+
|
623
|
+
# used for capturing the contents of some of the helper tests
|
624
|
+
# this duplicates the rails template system
|
625
|
+
attr_accessor :_erbout
|
626
|
+
|
627
|
+
def setup
|
628
|
+
Facebooker.apply_configuration({
|
629
|
+
'api_key' => '1234567',
|
630
|
+
'canvas_page_name' => 'facebook',
|
631
|
+
'secret_key' => '7654321' })
|
632
|
+
@_erbout = ""
|
633
|
+
@h = HelperClass.new
|
634
|
+
#use an asset path where the canvas path equals the hostname to make sure we handle that case right
|
635
|
+
ActionController::Base.asset_host='http://facebook.host.com'
|
636
|
+
end
|
637
|
+
|
638
|
+
def test_fb_profile_pic
|
639
|
+
assert_equal "<fb:profile-pic uid=\"1234\"></fb:profile-pic>", @h.fb_profile_pic("1234")
|
640
|
+
end
|
641
|
+
|
642
|
+
def test_fb_profile_pic_with_valid_size
|
643
|
+
assert_equal "<fb:profile-pic size=\"small\" uid=\"1234\"></fb:profile-pic>", @h.fb_profile_pic("1234", :size => :small)
|
644
|
+
end
|
645
|
+
|
646
|
+
def test_fb_profile_pic_with_width_and_height
|
647
|
+
assert_equal "<fb:profile-pic height=\"200\" uid=\"1234\" width=\"100\"></fb:profile-pic>", @h.fb_profile_pic("1234", :width => 100, :height => 200)
|
648
|
+
end
|
649
|
+
|
650
|
+
def test_fb_profile_pic_with_invalid_size
|
651
|
+
assert_raises(ArgumentError) {@h.fb_profile_pic("1234", :size => :mediumm)}
|
652
|
+
end
|
653
|
+
|
654
|
+
def test_fb_photo
|
655
|
+
assert_equal "<fb:photo pid=\"1234\"></fb:photo>",@h.fb_photo("1234")
|
656
|
+
end
|
657
|
+
|
658
|
+
def test_fb_photo_with_object_responding_to_photo_id
|
659
|
+
photo = flexmock("photo", :photo_id => "5678")
|
660
|
+
assert_equal "<fb:photo pid=\"5678\"></fb:photo>", @h.fb_photo(photo)
|
661
|
+
end
|
662
|
+
|
663
|
+
def test_fb_photo_with_invalid_size
|
664
|
+
assert_raises(ArgumentError) {@h.fb_photo("1234", :size => :medium)}
|
665
|
+
end
|
666
|
+
|
667
|
+
def test_fb_photo_with_invalid_size_value
|
668
|
+
assert_raises(ArgumentError) {@h.fb_photo("1234", :size => :mediumm)}
|
669
|
+
end
|
670
|
+
|
671
|
+
def test_fb_photo_with_invalid_align_value
|
672
|
+
assert_raises(ArgumentError) {@h.fb_photo("1234", :align => :rightt)}
|
673
|
+
end
|
674
|
+
|
675
|
+
def test_fb_photo_with_valid_align_value
|
676
|
+
assert_equal "<fb:photo align=\"right\" pid=\"1234\"></fb:photo>",@h.fb_photo("1234", :align => :right)
|
677
|
+
end
|
678
|
+
|
679
|
+
def test_fb_photo_with_class
|
680
|
+
assert_equal "<fb:photo class=\"picky\" pid=\"1234\"></fb:photo>",@h.fb_photo("1234", :class => :picky)
|
681
|
+
end
|
682
|
+
def test_fb_photo_with_style
|
683
|
+
assert_equal "<fb:photo pid=\"1234\" style=\"some=css;put=here;\"></fb:photo>",@h.fb_photo("1234", :style => "some=css;put=here;")
|
684
|
+
end
|
685
|
+
|
686
|
+
def test_fb_prompt_permission_valid_no_callback
|
687
|
+
assert_equal "<fb:prompt-permission perms=\"email\">Can I email you?</fb:prompt-permission>",@h.fb_prompt_permission("email","Can I email you?")
|
688
|
+
end
|
689
|
+
|
690
|
+
def test_fb_prompt_permission_valid_with_callback
|
691
|
+
assert_equal "<fb:prompt-permission next_fbjs=\"do_stuff()\" perms=\"email\">a message</fb:prompt-permission>",@h.fb_prompt_permission("email","a message","do_stuff()")
|
692
|
+
end
|
693
|
+
|
694
|
+
def test_fb_prompt_permission_invalid_option
|
695
|
+
assert_raises(ArgumentError) {@h.fb_prompt_permission("invliad", "a message")}
|
696
|
+
|
697
|
+
end
|
698
|
+
|
699
|
+
def test_fb_prompt_permissions_valid_no_callback
|
700
|
+
assert_equal "<fb:prompt-permission perms=\"publish_stream,read_stream\">Can I read and write your streams?</fb:prompt-permission>",
|
701
|
+
@h.fb_prompt_permissions(['publish_stream', 'read_stream'],"Can I read and write your streams?")
|
702
|
+
end
|
703
|
+
|
704
|
+
def test_fb_prompt_permissions_valid_with_callback
|
705
|
+
assert_equal "<fb:prompt-permission next_fbjs=\"do_stuff()\" perms=\"publish_stream,read_stream\">Can I read and write your streams?</fb:prompt-permission>",
|
706
|
+
@h.fb_prompt_permissions(['publish_stream', 'read_stream'],"Can I read and write your streams?", "do_stuff()")
|
707
|
+
end
|
708
|
+
|
709
|
+
def test_fb_prompt_permissions_invalid_option
|
710
|
+
assert_raises(ArgumentError) {@h.fb_prompt_permissions(["invliad", "read_stream"], "a message")}
|
711
|
+
|
712
|
+
end
|
713
|
+
|
714
|
+
|
715
|
+
def test_fb_add_profile_section
|
716
|
+
assert_equal "<fb:add-section-button section=\"profile\" />",@h.fb_add_profile_section
|
717
|
+
end
|
718
|
+
|
719
|
+
def test_fb_add_info_section
|
720
|
+
assert_equal "<fb:add-section-button section=\"info\" />",@h.fb_add_info_section
|
721
|
+
end
|
722
|
+
|
723
|
+
def test_fb_application_name
|
724
|
+
assert_equal "<fb:application-name />", @h.fb_application_name
|
725
|
+
end
|
726
|
+
|
727
|
+
def test_fb_application_name_with_linked_false
|
728
|
+
assert_equal '<fb:application-name linked="false" />', @h.fb_application_name( :linked => false )
|
729
|
+
end
|
730
|
+
|
731
|
+
def test_fb_name_with_invalid_key_size
|
732
|
+
assert_raises(ArgumentError) {@h.fb_name(1234, :sizee => false)}
|
733
|
+
end
|
734
|
+
|
735
|
+
def test_fb_name
|
736
|
+
assert_equal "<fb:name uid=\"1234\"></fb:name>",@h.fb_name("1234")
|
737
|
+
end
|
738
|
+
|
739
|
+
def test_fb_name_with_transformed_key
|
740
|
+
assert_equal "<fb:name uid=\"1234\" useyou=\"true\"></fb:name>", @h.fb_name(1234, :use_you => true)
|
741
|
+
end
|
742
|
+
|
743
|
+
def test_fb_name_with_user_responding_to_facebook_id
|
744
|
+
user = flexmock("user", :facebook_id => "5678")
|
745
|
+
assert_equal "<fb:name uid=\"5678\"></fb:name>", @h.fb_name(user)
|
746
|
+
end
|
747
|
+
|
748
|
+
def test_fb_name_with_invalid_key_linkd
|
749
|
+
assert_raises(ArgumentError) {@h.fb_name(1234, :linkd => false)}
|
750
|
+
end
|
751
|
+
|
752
|
+
def test_fb_tabs
|
753
|
+
assert_equal "<fb:tabs></fb:tabs>", @h.fb_tabs{}
|
754
|
+
end
|
755
|
+
|
756
|
+
def test_fb_tab_item
|
757
|
+
assert_equal "<fb:tab-item href=\"http://www.google.com\" title=\"Google\" />", @h.fb_tab_item("Google", "http://www.google.com")
|
758
|
+
end
|
759
|
+
|
760
|
+
def test_fb_tab_item_raises_exception_for_invalid_option
|
761
|
+
assert_raises(ArgumentError) {@h.fb_tab_item("Google", "http://www.google.com", :alignn => :right)}
|
762
|
+
end
|
763
|
+
|
764
|
+
def test_fb_tab_item_raises_exception_for_invalid_align_value
|
765
|
+
assert_raises(ArgumentError) {@h.fb_tab_item("Google", "http://www.google.com", :align => :rightt)}
|
766
|
+
end
|
767
|
+
|
768
|
+
def test_fb_req_choice
|
769
|
+
assert_equal "<fb:req-choice label=\"label\" url=\"url\" />", @h.fb_req_choice("label","url")
|
770
|
+
end
|
771
|
+
|
772
|
+
def test_fb_multi_friend_selector
|
773
|
+
assert_equal "<fb:multi-friend-selector actiontext=\"This is a message\" max=\"20\" showborder=\"false\" />", @h.fb_multi_friend_selector("This is a message")
|
774
|
+
end
|
775
|
+
def test_fb_multi_friend_selector_with_options
|
776
|
+
assert_equal "<fb:multi-friend-selector actiontext=\"This is a message\" exclude_ids=\"1,2\" max=\"20\" showborder=\"false\" />", @h.fb_multi_friend_selector("This is a message",:exclude_ids=>"1,2")
|
777
|
+
end
|
778
|
+
|
779
|
+
def test_fb_title
|
780
|
+
assert_equal "<fb:title>This is the canvas page window title</fb:title>", @h.fb_title("This is the canvas page window title")
|
781
|
+
end
|
782
|
+
|
783
|
+
def test_fb_google_analytics
|
784
|
+
assert_equal "<fb:google-analytics uacct=\"UA-9999999-99\" />", @h.fb_google_analytics("UA-9999999-99")
|
785
|
+
end
|
786
|
+
|
787
|
+
def test_fb_if_is_user_with_single_object
|
788
|
+
user = flexmock("user", :facebook_id => "5678")
|
789
|
+
assert_equal "<fb:if-is-user uid=\"5678\"></fb:if-is-user>", @h.fb_if_is_user(user){}
|
790
|
+
end
|
791
|
+
|
792
|
+
def test_fb_if_is_user_with_array
|
793
|
+
user1 = flexmock("user", :facebook_id => "5678")
|
794
|
+
user2 = flexmock("user", :facebook_id => "1234")
|
795
|
+
assert_equal "<fb:if-is-user uid=\"5678,1234\"></fb:if-is-user>", @h.fb_if_is_user([user1,user2]){}
|
796
|
+
end
|
797
|
+
|
798
|
+
def test_fb_else
|
799
|
+
assert_equal "<fb:else></fb:else>", @h.fb_else{}
|
800
|
+
end
|
801
|
+
|
802
|
+
def test_fb_about_url
|
803
|
+
ENV["FACEBOOK_API_KEY"]="1234"
|
804
|
+
assert_equal "http://www.facebook.com/apps/application.php?api_key=1234", @h.fb_about_url
|
805
|
+
end
|
806
|
+
|
807
|
+
def test_fb_ref_with_url
|
808
|
+
assert_equal "<fb:ref url=\"A URL\" />", @h.fb_ref(:url => "A URL")
|
809
|
+
end
|
810
|
+
|
811
|
+
def test_fb_ref_with_handle
|
812
|
+
assert_equal "<fb:ref handle=\"A Handle\" />", @h.fb_ref(:handle => "A Handle")
|
813
|
+
end
|
814
|
+
|
815
|
+
def test_fb_ref_with_invalid_attribute
|
816
|
+
assert_raises(ArgumentError) {@h.fb_ref(:handlee => "A HANLDE")}
|
817
|
+
end
|
818
|
+
|
819
|
+
def test_fb_ref_with_handle_and_url
|
820
|
+
assert_raises(ArgumentError) {@h.fb_ref(:url => "URL", :handle => "HANDLE")}
|
821
|
+
end
|
822
|
+
|
823
|
+
def test_facebook_messages_notice
|
824
|
+
@h.flash[:notice]="A message"
|
825
|
+
assert_equal "<fb:success message=\"A message\" />",@h.facebook_messages
|
826
|
+
end
|
827
|
+
|
828
|
+
def test_facebook_messages_error
|
829
|
+
@h.flash[:error]="An error"
|
830
|
+
assert_equal "<fb:error message=\"An error\" />",@h.facebook_messages
|
831
|
+
end
|
832
|
+
def test_fb_wall_post
|
833
|
+
assert_equal "<fb:wallpost uid=\"1234\">A wall post</fb:wallpost>",@h.fb_wall_post("1234","A wall post")
|
834
|
+
end
|
835
|
+
|
836
|
+
def test_fb_pronoun
|
837
|
+
assert_equal "<fb:pronoun uid=\"1234\"></fb:pronoun>", @h.fb_pronoun(1234)
|
838
|
+
end
|
839
|
+
|
840
|
+
def test_fb_pronoun_with_transformed_key
|
841
|
+
assert_equal "<fb:pronoun uid=\"1234\" usethey=\"true\"></fb:pronoun>", @h.fb_pronoun(1234, :use_they => true)
|
842
|
+
end
|
843
|
+
|
844
|
+
def test_fb_pronoun_with_user_responding_to_facebook_id
|
845
|
+
user = flexmock("user", :facebook_id => "5678")
|
846
|
+
assert_equal "<fb:pronoun uid=\"5678\"></fb:pronoun>", @h.fb_pronoun(user)
|
847
|
+
end
|
848
|
+
|
849
|
+
def test_fb_pronoun_with_invalid_key
|
850
|
+
assert_raises(ArgumentError) {@h.fb_pronoun(1234, :posessive => true)}
|
851
|
+
end
|
852
|
+
|
853
|
+
def test_fb_wall
|
854
|
+
@h.expects(:capture).returns("wall content")
|
855
|
+
@h.fb_wall do
|
856
|
+
end
|
857
|
+
assert_equal "<fb:wall>wall content</fb:wall>",@h.output_buffer
|
858
|
+
end
|
859
|
+
|
860
|
+
def test_fb_multi_friend_request
|
861
|
+
@h.expects(:capture).returns("body")
|
862
|
+
@h.expects(:protect_against_forgery?).returns(false)
|
863
|
+
@h.expects(:fb_multi_friend_selector).returns("friend selector")
|
864
|
+
assert_equal "<fb:request-form action=\"action\" content=\"body\" invite=\"true\" method=\"post\" type=\"invite\">friend selector</fb:request-form>",
|
865
|
+
(@h.fb_multi_friend_request("invite","ignored","action") {})
|
866
|
+
end
|
867
|
+
|
868
|
+
def test_fb_multi_friend_request_with_protection_against_forgery
|
869
|
+
@h.expects(:capture).returns("body")
|
870
|
+
@h.expects(:protect_against_forgery?).returns(true)
|
871
|
+
@h.expects(:request_forgery_protection_token).returns('forgery_token')
|
872
|
+
@h.expects(:form_authenticity_token).returns('form_token')
|
873
|
+
|
874
|
+
@h.expects(:fb_multi_friend_selector).returns("friend selector")
|
875
|
+
assert_equal "<fb:request-form action=\"action\" content=\"body\" invite=\"true\" method=\"post\" type=\"invite\">friend selector<input name=\"forgery_token\" type=\"hidden\" value=\"form_token\" /></fb:request-form>",
|
876
|
+
(@h.fb_multi_friend_request("invite","ignored","action") {})
|
877
|
+
end
|
878
|
+
|
879
|
+
def test_fbjs_library
|
880
|
+
@h.expects(:form_authenticity_token).returns('form_token')
|
881
|
+
assert_equal "<script>var _token = 'form_token';var _hostname = 'http://facebook.host.com'</script><script src=\"http://facebook.host.com/javascripts/facebooker.js\" type=\"text/javascript\"></script>", @h.fbjs_library
|
882
|
+
end
|
883
|
+
|
884
|
+
def test_fb_dialog
|
885
|
+
@h.expects(:capture).returns("dialog content")
|
886
|
+
@h.fb_dialog( "my_dialog", true ) {}
|
887
|
+
assert_equal '<fb:dialog cancel_button="1" id="my_dialog">dialog content</fb:dialog>', @h.output_buffer
|
888
|
+
end
|
889
|
+
def test_fb_dialog_title
|
890
|
+
assert_equal '<fb:dialog-title>My Little Dialog</fb:dialog-title>', @h.fb_dialog_title("My Little Dialog")
|
891
|
+
end
|
892
|
+
def test_fb_dialog_content
|
893
|
+
@h.expects(:capture).returns("dialog content content")
|
894
|
+
@h.fb_dialog_content do
|
895
|
+
end
|
896
|
+
assert_equal '<fb:dialog-content>dialog content content</fb:dialog-content>', @h.output_buffer
|
897
|
+
end
|
898
|
+
def test_fb_dialog_button
|
899
|
+
assert_equal '<fb:dialog-button clickrewriteform="my_form" clickrewriteid="my_dialog" clickrewriteurl="http://www.some_url_here.com/dialog_return.php" type="submit" value="Yes" />',
|
900
|
+
@h.fb_dialog_button("submit", "Yes", {:clickrewriteurl => "http://www.some_url_here.com/dialog_return.php",
|
901
|
+
:clickrewriteid => "my_dialog", :clickrewriteform => "my_form" } )
|
902
|
+
end
|
903
|
+
|
904
|
+
def test_fb_request_form
|
905
|
+
@h.expects(:capture).returns("body")
|
906
|
+
@h.expects(:protect_against_forgery?).returns(false)
|
907
|
+
assert_equal "<fb:request-form action=\"action\" content=\"Test Param\" invite=\"true\" method=\"post\" type=\"invite\">body</fb:request-form>",
|
908
|
+
(@h.fb_request_form("invite","test_param","action") {})
|
909
|
+
end
|
910
|
+
|
911
|
+
def test_fb_request_form_with_protect_against_forgery
|
912
|
+
@h.expects(:capture).returns("body")
|
913
|
+
@h.expects(:protect_against_forgery?).returns(true)
|
914
|
+
@h.expects(:request_forgery_protection_token).returns('forgery_token')
|
915
|
+
@h.expects(:form_authenticity_token).returns('form_token')
|
916
|
+
assert_equal "<fb:request-form action=\"action\" content=\"Test Param\" invite=\"true\" method=\"post\" type=\"invite\">body<input name=\"forgery_token\" type=\"hidden\" value=\"form_token\" /></fb:request-form>",
|
917
|
+
(@h.fb_request_form("invite","test_param","action") {})
|
918
|
+
end
|
919
|
+
|
920
|
+
def test_fb_error_with_only_message
|
921
|
+
assert_equal "<fb:error message=\"Errors have occurred!!\" />", @h.fb_error("Errors have occurred!!")
|
922
|
+
end
|
923
|
+
|
924
|
+
def test_fb_error_with_message_and_text
|
925
|
+
assert_equal "<fb:error><fb:message>Errors have occurred!!</fb:message>Label can't be blank!!</fb:error>", @h.fb_error("Errors have occurred!!", "Label can't be blank!!")
|
926
|
+
end
|
927
|
+
|
928
|
+
def test_fb_explanation_with_only_message
|
929
|
+
assert_equal "<fb:explanation message=\"This is an explanation\" />", @h.fb_explanation("This is an explanation")
|
930
|
+
end
|
931
|
+
|
932
|
+
def test_fb_explanation_with_message_and_text
|
933
|
+
assert_equal "<fb:explanation><fb:message>This is an explanation</fb:message>You have a match</fb:explanation>", @h.fb_explanation("This is an explanation", "You have a match")
|
934
|
+
end
|
935
|
+
|
936
|
+
def test_fb_success_with_only_message
|
937
|
+
assert_equal "<fb:success message=\"Woot!!\" />", @h.fb_success("Woot!!")
|
938
|
+
end
|
939
|
+
|
940
|
+
def test_fb_success_with_message_and_text
|
941
|
+
assert_equal "<fb:success><fb:message>Woot!!</fb:message>You Rock!!</fb:success>", @h.fb_success("Woot!!", "You Rock!!")
|
942
|
+
end
|
943
|
+
|
944
|
+
def test_facebook_form_for
|
945
|
+
@h.expects(:protect_against_forgery?).returns(false)
|
946
|
+
form_body=@h.facebook_form_for(:model,:url=>"action") do
|
947
|
+
end
|
948
|
+
assert_equal "<fb:editor action=\"action\"></fb:editor>",form_body
|
949
|
+
end
|
950
|
+
|
951
|
+
def test_facebook_form_for_with_authenticity_token
|
952
|
+
@h.expects(:protect_against_forgery?).returns(true)
|
953
|
+
@h.expects(:request_forgery_protection_token).returns('forgery_token')
|
954
|
+
@h.expects(:form_authenticity_token).returns('form_token')
|
955
|
+
assert_equal "<fb:editor action=\"action\"><input name=\"forgery_token\" type=\"hidden\" value=\"form_token\" /></fb:editor>",
|
956
|
+
(@h.facebook_form_for(:model, :url => "action") {})
|
957
|
+
end
|
958
|
+
|
959
|
+
def test_fb_friend_selector
|
960
|
+
assert_equal("<fb:friend-selector />",@h.fb_friend_selector)
|
961
|
+
end
|
962
|
+
|
963
|
+
def test_fb_request_form_submit
|
964
|
+
assert_equal("<fb:request-form-submit />",@h.fb_request_form_submit)
|
965
|
+
end
|
966
|
+
|
967
|
+
def test_fb_request_form_submit_with_uid
|
968
|
+
assert_equal("<fb:request-form-submit uid=\"123456789\" />",@h.fb_request_form_submit({:uid => "123456789"}))
|
969
|
+
end
|
970
|
+
|
971
|
+
def test_fb_request_form_submit_with_label
|
972
|
+
assert_equal("<fb:request-form-submit label=\"Send Invite to Joel\" />",@h.fb_request_form_submit({:label => "Send Invite to Joel"}))
|
973
|
+
end
|
974
|
+
|
975
|
+
def test_fb_request_form_submit_with_uid_and_label
|
976
|
+
assert_equal("<fb:request-form-submit label=\"Send Invite to Joel\" uid=\"123456789\" />",@h.fb_request_form_submit({:uid =>"123456789", :label => "Send Invite to Joel"}))
|
977
|
+
end
|
978
|
+
|
979
|
+
def test_fb_action
|
980
|
+
assert_equal "<fb:action href=\"/growingpets/rub\">Rub my pet</fb:action>", @h.fb_action("Rub my pet", "/growingpets/rub")
|
981
|
+
end
|
982
|
+
|
983
|
+
def test_fb_help
|
984
|
+
assert_equal "<fb:help href=\"http://www.facebook.com/apps/application.php?id=6236036681\">Help</fb:help>", @h.fb_help("Help", "http://www.facebook.com/apps/application.php?id=6236036681")
|
985
|
+
end
|
986
|
+
|
987
|
+
def test_fb_create_button
|
988
|
+
assert_equal "<fb:create-button href=\"/growingpets/invite\">Invite Friends</fb:create-button>", @h.fb_create_button('Invite Friends', '/growingpets/invite')
|
989
|
+
end
|
990
|
+
|
991
|
+
def test_fb_comments_a_1
|
992
|
+
assert_equal "<fb:comments candelete=\"false\" canpost=\"true\" numposts=\"7\" showform=\"true\" xid=\"a:1\"></fb:comments>", @h.fb_comments("a:1",true,false,7,:showform=>true)
|
993
|
+
end
|
994
|
+
|
995
|
+
def test_fb_comments_xxx
|
996
|
+
assert_equal "<fb:comments candelete=\"false\" canpost=\"true\" numposts=\"4\" optional=\"false\" xid=\"xxx\"></fb:comments>", @h.fb_comments("xxx",true,false,4,:optional=>false)
|
997
|
+
end
|
998
|
+
|
999
|
+
def test_fb_comments_with_title
|
1000
|
+
assert_equal "<fb:comments candelete=\"false\" canpost=\"true\" numposts=\"4\" optional=\"false\" xid=\"xxx\"><fb:title>TITLE</fb:title></fb:comments>", @h.fb_comments("xxx",true,false,4,:optional=>false, :title => "TITLE")
|
1001
|
+
end
|
1002
|
+
def test_fb_board
|
1003
|
+
assert_equal "<fb:board optional=\"false\" xid=\"xxx\"></fb:board>", @h.fb_board("xxx",:optional => false)
|
1004
|
+
end
|
1005
|
+
def test_fb_board_with_title
|
1006
|
+
assert_equal "<fb:board optional=\"false\" xid=\"xxx\"><fb:title>TITLE</fb:title></fb:board>", @h.fb_board("xxx",:optional=>false, :title => "TITLE")
|
1007
|
+
end
|
1008
|
+
|
1009
|
+
def test_fb_dashboard
|
1010
|
+
@h.expects(:capture).returns("dashboard content")
|
1011
|
+
@h.fb_dashboard do
|
1012
|
+
end
|
1013
|
+
assert_equal "<fb:dashboard>dashboard content</fb:dashboard>", @h.output_buffer
|
1014
|
+
end
|
1015
|
+
def test_fb_dashboard_non_block
|
1016
|
+
assert_equal "<fb:dashboard></fb:dashboard>", @h.fb_dashboard
|
1017
|
+
end
|
1018
|
+
|
1019
|
+
def test_fb_wide
|
1020
|
+
@h.expects(:capture).returns("wide profile content")
|
1021
|
+
@h.fb_wide do
|
1022
|
+
end
|
1023
|
+
assert_equal "<fb:wide>wide profile content</fb:wide>", @h.output_buffer
|
1024
|
+
end
|
1025
|
+
|
1026
|
+
def test_fb_narrow
|
1027
|
+
@h.expects(:capture).returns("narrow profile content")
|
1028
|
+
@h.fb_narrow do
|
1029
|
+
end
|
1030
|
+
assert_equal "<fb:narrow>narrow profile content</fb:narrow>", @h.output_buffer
|
1031
|
+
end
|
1032
|
+
|
1033
|
+
def test_fb_login_button
|
1034
|
+
assert_equal "<fb:login-button onlogin=\"somejs\"></fb:login-button>",@h.fb_login_button("somejs")
|
1035
|
+
|
1036
|
+
assert_equal "<fb:login-button onlogin=\"somejs\">Custom</fb:login-button>",@h.fb_login_button("somejs", :text => 'Custom')
|
1037
|
+
end
|
1038
|
+
|
1039
|
+
def test_init_fb_connect_no_features
|
1040
|
+
assert ! @h.init_fb_connect.match(/XFBML/)
|
1041
|
+
end
|
1042
|
+
|
1043
|
+
def test_init_fb_connect_with_features
|
1044
|
+
assert @h.init_fb_connect("XFBML").match(/XFBML/)
|
1045
|
+
end
|
1046
|
+
|
1047
|
+
def test_init_fb_connect_receiver_path
|
1048
|
+
assert @h.init_fb_connect.match(/xd_receiver.html/)
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
def test_init_fb_connect_receiver_path_ssl
|
1052
|
+
@h.instance_eval do
|
1053
|
+
def request
|
1054
|
+
ssl_request = ActionController::TestRequest.new
|
1055
|
+
ssl_request.stubs(:ssl?).returns(true)
|
1056
|
+
ssl_request
|
1057
|
+
end
|
1058
|
+
end
|
1059
|
+
|
1060
|
+
assert @h.init_fb_connect.match(/xd_receiver_ssl.html/)
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
def test_init_fb_connect_with_features_and_body
|
1064
|
+
@h.expects(:capture).returns("Body Content")
|
1065
|
+
|
1066
|
+
__in_erb_template = true
|
1067
|
+
|
1068
|
+
@h.init_fb_connect("XFBML") do
|
1069
|
+
end
|
1070
|
+
assert @h.output_buffer =~ /Body Content/
|
1071
|
+
end
|
1072
|
+
|
1073
|
+
def test_init_fb_connect_no_options
|
1074
|
+
assert ! @h.init_fb_connect.match(/Element.observe\(window,'load',/)
|
1075
|
+
end
|
1076
|
+
|
1077
|
+
def test_init_fb_connect_with_options_js_jquery
|
1078
|
+
assert ! @h.init_fb_connect(:js => :jquery).match(/\$\(document\).ready\(/)
|
1079
|
+
end
|
1080
|
+
|
1081
|
+
def test_init_fb_connect_with_options_js_mootools
|
1082
|
+
assert @h.init_fb_connect("XFBML", :js => :mootools).match(/window.addEvent\('domready',/)
|
1083
|
+
end
|
1084
|
+
|
1085
|
+
def test_init_fb_connect_with_features_and_options_js_jquery
|
1086
|
+
assert @h.init_fb_connect("XFBML", :js => :jquery).match(/XFBML.*/)
|
1087
|
+
assert @h.init_fb_connect("XFBML", :js => :jquery).match(/\jQuery\(document\).ready\(/)
|
1088
|
+
end
|
1089
|
+
|
1090
|
+
def test_init_fb_connect_without_options_app_settings
|
1091
|
+
assert @h.init_fb_connect().match(/, \{\}\)/)
|
1092
|
+
end
|
1093
|
+
|
1094
|
+
def test_init_fb_connect_with_options_app_settings
|
1095
|
+
assert @h.init_fb_connect(:app_settings => "{foo: bar}").match(/, \{foo: bar\}\)/)
|
1096
|
+
end
|
1097
|
+
|
1098
|
+
|
1099
|
+
def test_fb_login_and_redirect
|
1100
|
+
assert_equal @h.fb_login_and_redirect("/path"),"<fb:login-button onlogin=\"window.location.href = "/path";\"></fb:login-button>"
|
1101
|
+
|
1102
|
+
assert_equal @h.fb_login_and_redirect("/path", :text => 'foo'),"<fb:login-button onlogin=\"window.location.href = "/path";\">foo</fb:login-button>"
|
1103
|
+
end
|
1104
|
+
|
1105
|
+
def test_fb_logout_link
|
1106
|
+
assert_equal @h.fb_logout_link("Logout","My URL"),"<a href=\"#\" onclick=\"FB.Connect.logoutAndRedirect("My URL");; return false;\">Logout</a>"
|
1107
|
+
end
|
1108
|
+
|
1109
|
+
def test_fb_bookmark_link
|
1110
|
+
assert_equal @h.fb_bookmark_link("Bookmark","My URL"),"<a href=\"#\" onclick=\"FB.Connect.showBookmarkDialog("My URL");; return false;\">Bookmark</a>"
|
1111
|
+
end
|
1112
|
+
|
1113
|
+
def test_fb_user_action_with_literal_callback
|
1114
|
+
action = Facebooker::Rails::Publisher::UserAction.new
|
1115
|
+
assert_equal "FB.Connect.showFeedDialog(null, null, null, null, null, FB.RequireConnect.promptConnect, function() {alert('hi')}, \"prompt\", #{{"value" => "message"}.to_json});",
|
1116
|
+
@h.fb_user_action(action,"message","prompt","function() {alert('hi')}")
|
1117
|
+
end
|
1118
|
+
|
1119
|
+
def test_fb_user_action_with_nil_callback
|
1120
|
+
action = Facebooker::Rails::Publisher::UserAction.new
|
1121
|
+
assert_equal "FB.Connect.showFeedDialog(null, null, null, null, null, FB.RequireConnect.promptConnect, null, \"prompt\", #{{"value" => "message"}.to_json});",
|
1122
|
+
@h.fb_user_action(action,"message","prompt")
|
1123
|
+
end
|
1124
|
+
|
1125
|
+
def test_fb_connect_stream_publish
|
1126
|
+
stream_post = Facebooker::StreamPost.new
|
1127
|
+
attachment = Facebooker::Attachment.new
|
1128
|
+
attachment.name="name"
|
1129
|
+
stream_post.message = "message"
|
1130
|
+
stream_post.target="12451752"
|
1131
|
+
stream_post.attachment = attachment
|
1132
|
+
|
1133
|
+
assert @h.fb_connect_stream_publish(stream_post).match(/FB.Connect\.streamPublish\(\"message\", \{\"name\":\s?\"name\"\}, \[\], \"12451752\", null, null, false, null\);/)
|
1134
|
+
end
|
1135
|
+
def test_fb_stream_publish
|
1136
|
+
stream_post = Facebooker::StreamPost.new
|
1137
|
+
attachment = Facebooker::Attachment.new
|
1138
|
+
attachment.name="name"
|
1139
|
+
stream_post.message = "message"
|
1140
|
+
stream_post.target="12451752"
|
1141
|
+
stream_post.attachment = attachment
|
1142
|
+
|
1143
|
+
assert @h.fb_stream_publish(stream_post).match(/Facebook\.streamPublish\(\"message\", \{\"name\":\s?\"name\"\}, \[\], \"12451752\", null, null, false, null\);/)
|
1144
|
+
end
|
1145
|
+
|
1146
|
+
def test_fb_connect_javascript_tag
|
1147
|
+
silence_warnings do
|
1148
|
+
assert_equal "<script src=\"http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php\" type=\"text/javascript\"></script>",
|
1149
|
+
@h.fb_connect_javascript_tag
|
1150
|
+
end
|
1151
|
+
end
|
1152
|
+
|
1153
|
+
def test_fb_connect_javascript_tag_with_language_option
|
1154
|
+
silence_warnings do
|
1155
|
+
assert_equal "<script src=\"http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US\" type=\"text/javascript\"></script>",
|
1156
|
+
@h.fb_connect_javascript_tag(:lang => "en_US")
|
1157
|
+
end
|
1158
|
+
end
|
1159
|
+
|
1160
|
+
def test_fb_connect_javascript_tag_ssl
|
1161
|
+
@h.instance_eval do
|
1162
|
+
def request
|
1163
|
+
ssl_request = ActionController::TestRequest.new
|
1164
|
+
ssl_request.stubs(:ssl?).returns(true)
|
1165
|
+
ssl_request
|
1166
|
+
end
|
1167
|
+
end
|
1168
|
+
|
1169
|
+
silence_warnings do
|
1170
|
+
assert_equal "<script src=\"https://ssl.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php\" type=\"text/javascript\"></script>",
|
1171
|
+
@h.fb_connect_javascript_tag
|
1172
|
+
end
|
1173
|
+
end
|
1174
|
+
|
1175
|
+
def test_fb_connect_javascript_tag_ssl_with_language_option
|
1176
|
+
@h.instance_eval do
|
1177
|
+
def request
|
1178
|
+
ssl_request = ActionController::TestRequest.new
|
1179
|
+
ssl_request.stubs(:ssl?).returns(true)
|
1180
|
+
ssl_request
|
1181
|
+
end
|
1182
|
+
end
|
1183
|
+
|
1184
|
+
silence_warnings do
|
1185
|
+
assert_equal "<script src=\"https://ssl.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US\" type=\"text/javascript\"></script>",
|
1186
|
+
@h.fb_connect_javascript_tag(:lang => "en_US")
|
1187
|
+
end
|
1188
|
+
end
|
1189
|
+
|
1190
|
+
def test_fb_container
|
1191
|
+
@h.expects(:capture).returns("Inner Stuff")
|
1192
|
+
@h.fb_container(:condition=>"somejs") do
|
1193
|
+
end
|
1194
|
+
assert_equal "<fb:container condition=\"somejs\">Inner Stuff</fb:container>",@h.output_buffer
|
1195
|
+
end
|
1196
|
+
|
1197
|
+
def test_fb_eventlink
|
1198
|
+
assert_equal '<fb:eventlink eid="21150032416"></fb:eventlink>',@h.fb_eventlink("21150032416")
|
1199
|
+
end
|
1200
|
+
|
1201
|
+
def test_fb_grouplink
|
1202
|
+
assert_equal '<fb:grouplink gid="2541896821"></fb:grouplink>',@h.fb_grouplink("2541896821")
|
1203
|
+
end
|
1204
|
+
|
1205
|
+
def test_fb_serverfbml
|
1206
|
+
@h.expects(:capture).returns("Inner Stuff")
|
1207
|
+
@h.fb_serverfbml(:condition=>"somejs") do
|
1208
|
+
end
|
1209
|
+
assert_equal "<fb:serverfbml condition=\"somejs\">Inner Stuff</fb:serverfbml>",@h.output_buffer
|
1210
|
+
end
|
1211
|
+
|
1212
|
+
def test_fb_share_button
|
1213
|
+
assert_equal "<fb:share-button class=\"url\" href=\"http://www.elevatedrails.com\"></fb:share-button>",@h.fb_share_button("http://www.elevatedrails.com")
|
1214
|
+
end
|
1215
|
+
|
1216
|
+
def test_fb_unconnected_friends_count_without_condition
|
1217
|
+
assert_equal "<fb:unconnected-friends-count></fb:unconnected-friends-count>",@h.fb_unconnected_friends_count
|
1218
|
+
end
|
1219
|
+
|
1220
|
+
def test_fb_user_status
|
1221
|
+
user=flexmock("user", :facebook_id => "5678")
|
1222
|
+
assert_equal '<fb:user-status linked="false" uid="5678"></fb:user-status>',@h.fb_user_status(user,false)
|
1223
|
+
end
|
1224
|
+
|
1225
|
+
def test_fb_time
|
1226
|
+
time = Time.now
|
1227
|
+
assert_equal %Q{<fb:time preposition="true" t="#{time.to_i}" tz="America/New York" />}, @h.fb_time(time, :tz => 'America/New York', :preposition => true)
|
1228
|
+
end
|
1229
|
+
|
1230
|
+
def test_fb_time_defaults
|
1231
|
+
time = Time.now
|
1232
|
+
assert_equal %Q{<fb:time t="#{time.to_i}" />}, @h.fb_time(time)
|
1233
|
+
end
|
1234
|
+
end
|
1235
|
+
class TestModel
|
1236
|
+
attr_accessor :name,:facebook_id
|
1237
|
+
end
|
1238
|
+
|
1239
|
+
class RailsFacebookFormbuilderTest < Test::Unit::TestCase
|
1240
|
+
class TestTemplate
|
1241
|
+
include ActionView::Helpers::TextHelper
|
1242
|
+
include ActionView::Helpers::CaptureHelper
|
1243
|
+
include ActionView::Helpers::TagHelper
|
1244
|
+
include Facebooker::Rails::Helpers
|
1245
|
+
attr_accessor :output_buffer
|
1246
|
+
def initialize
|
1247
|
+
@output_buffer=""
|
1248
|
+
end
|
1249
|
+
end
|
1250
|
+
def setup
|
1251
|
+
@_erbout = ""
|
1252
|
+
@test_model = TestModel.new
|
1253
|
+
@test_model.name="Mike"
|
1254
|
+
@template = TestTemplate.new
|
1255
|
+
@proc = Proc.new {}
|
1256
|
+
@form_builder = Facebooker::Rails::FacebookFormBuilder.new(:test_model,@test_model,@template,{},@proc)
|
1257
|
+
def @form_builder._erbout
|
1258
|
+
""
|
1259
|
+
end
|
1260
|
+
|
1261
|
+
end
|
1262
|
+
|
1263
|
+
def test_text_field
|
1264
|
+
assert_equal "<fb:editor-text id=\"test_model_name\" label=\"Name\" name=\"test_model[name]\" value=\"Mike\"></fb:editor-text>",
|
1265
|
+
@form_builder.text_field(:name)
|
1266
|
+
end
|
1267
|
+
def test_text_area
|
1268
|
+
assert_equal "<fb:editor-textarea id=\"test_model_name\" label=\"Name\" name=\"test_model[name]\">Mike</fb:editor-textarea>",
|
1269
|
+
@form_builder.text_area(:name)
|
1270
|
+
end
|
1271
|
+
|
1272
|
+
def test_default_name_and_id
|
1273
|
+
assert_equal "<fb:editor-text id=\"different_id\" label=\"Name\" name=\"different_name\" value=\"Mike\"></fb:editor-text>",
|
1274
|
+
@form_builder.text_field(:name, {:name => 'different_name', :id => 'different_id'})
|
1275
|
+
end
|
1276
|
+
|
1277
|
+
def test_collection_typeahead
|
1278
|
+
flexmock(@form_builder) do |fb|
|
1279
|
+
fb.should_receive(:collection_typeahead_internal).with(:name,["ABC"],:size,:to_s,{})
|
1280
|
+
end
|
1281
|
+
@form_builder.collection_typeahead(:name,["ABC"],:size,:to_s)
|
1282
|
+
end
|
1283
|
+
|
1284
|
+
def test_collection_typeahead_internal
|
1285
|
+
assert_equal "<fb:typeahead-input id=\"test_model_name\" name=\"test_model[name]\" value=\"Mike\"><fb:typeahead-option value=\"3\">ABC</fb:typeahead-option></fb:typeahead-input>",
|
1286
|
+
@form_builder.collection_typeahead_internal(:name,["ABC"],:size,:to_s)
|
1287
|
+
end
|
1288
|
+
|
1289
|
+
def test_buttons
|
1290
|
+
@form_builder.expects(:create_button).with(:first).returns("first")
|
1291
|
+
@form_builder.expects(:create_button).with(:second).returns("second")
|
1292
|
+
@template.expects(:content_tag).with("fb:editor-buttonset","firstsecond")
|
1293
|
+
@form_builder.buttons(:first,:second)
|
1294
|
+
end
|
1295
|
+
|
1296
|
+
def test_create_button
|
1297
|
+
assert_equal "<fb:editor-button name=\"commit\" value=\"first\"></fb:editor-button>",@form_builder.create_button(:first)
|
1298
|
+
end
|
1299
|
+
|
1300
|
+
def test_custom
|
1301
|
+
@template.expects(:password_field).returns("password_field")
|
1302
|
+
assert_equal "<fb:editor-custom label=\"Name\">password_field</fb:editor-custom>",@form_builder.password_field(:name)
|
1303
|
+
end
|
1304
|
+
|
1305
|
+
def test_text
|
1306
|
+
assert_equal "<fb:editor-custom label=\"custom\">Mike</fb:editor-custom>",@form_builder.text("Mike",:label=>"custom")
|
1307
|
+
end
|
1308
|
+
|
1309
|
+
def test_multi_friend_input
|
1310
|
+
assert_equal "<fb:editor-custom label=\"Friends\"><fb:multi-friend-input></fb:multi-friend-input></fb:editor-custom>",@form_builder.multi_friend_input
|
1311
|
+
end
|
1312
|
+
|
1313
|
+
|
1314
|
+
end
|
1315
|
+
|
1316
|
+
class RailsPrettyErrorsTest < Test::Unit::TestCase
|
1317
|
+
class ControllerWhichFails < ActionController::Base
|
1318
|
+
def pass
|
1319
|
+
render :text=>''
|
1320
|
+
end
|
1321
|
+
def fail
|
1322
|
+
raise "I'm failing"
|
1323
|
+
end
|
1324
|
+
end
|
1325
|
+
|
1326
|
+
def setup
|
1327
|
+
Facebooker.apply_configuration('api_key'=>"1234", 'secret_key'=>"34278",'canvas_page_name'=>'mike','pretty_errors'=>true)
|
1328
|
+
@controller = ControllerWhichFails.new
|
1329
|
+
@request = ActionController::TestRequest.new
|
1330
|
+
@response = ActionController::TestResponse.new
|
1331
|
+
end
|
1332
|
+
|
1333
|
+
def test_pretty_errors_disabled_success
|
1334
|
+
post :pass, facebook_params
|
1335
|
+
assert_response 200
|
1336
|
+
end
|
1337
|
+
|
1338
|
+
def test_pretty_errors_disabled_error
|
1339
|
+
Facebooker.apply_configuration('api_key'=>"1234", 'secret_key'=>"34278",'canvas_page_name'=>'mike','pretty_errors'=>false)
|
1340
|
+
silence_warnings do
|
1341
|
+
post :fail, facebook_params
|
1342
|
+
end
|
1343
|
+
assert_response :error
|
1344
|
+
end
|
1345
|
+
|
1346
|
+
def test_pretty_errors_enabled_success
|
1347
|
+
post :pass, facebook_params
|
1348
|
+
assert_response 200
|
1349
|
+
end
|
1350
|
+
def test_pretty_errors_enabled_error
|
1351
|
+
silence_warnings do
|
1352
|
+
post :fail, facebook_params
|
1353
|
+
end
|
1354
|
+
assert_response 200
|
1355
|
+
end
|
1356
|
+
end
|
1357
|
+
|
1358
|
+
class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
|
1359
|
+
class UrlHelperExtensionsClass
|
1360
|
+
include ActionView::Helpers::UrlHelper
|
1361
|
+
include ActionView::Helpers::TagHelper
|
1362
|
+
def initialize(controller)
|
1363
|
+
@controller = controller
|
1364
|
+
end
|
1365
|
+
|
1366
|
+
def protect_against_forgery?
|
1367
|
+
false
|
1368
|
+
end
|
1369
|
+
|
1370
|
+
def request_comes_from_facebook?
|
1371
|
+
@request_comes_from_facebook
|
1372
|
+
end
|
1373
|
+
|
1374
|
+
def request_comes_from_facebook=(val)
|
1375
|
+
@request_comes_from_facebook = val
|
1376
|
+
end
|
1377
|
+
|
1378
|
+
end
|
1379
|
+
class UrlHelperExtensionsController < NoisyController
|
1380
|
+
def index
|
1381
|
+
render :nothing => true
|
1382
|
+
end
|
1383
|
+
def do_it
|
1384
|
+
render :nothing => true
|
1385
|
+
end
|
1386
|
+
end
|
1387
|
+
|
1388
|
+
class FacebookRequest < ActionController::TestRequest
|
1389
|
+
end
|
1390
|
+
|
1391
|
+
def setup
|
1392
|
+
@controller = UrlHelperExtensionsController.new
|
1393
|
+
@request = FacebookRequest.new
|
1394
|
+
@response = ActionController::TestResponse.new
|
1395
|
+
|
1396
|
+
@u = UrlHelperExtensionsClass.new(@controller)
|
1397
|
+
@u.request_comes_from_facebook = true
|
1398
|
+
|
1399
|
+
@non_canvas_u = UrlHelperExtensionsClass.new(@controller)
|
1400
|
+
@non_canvas_u.request_comes_from_facebook = false
|
1401
|
+
|
1402
|
+
@label = "Testing"
|
1403
|
+
@url = "test.host"
|
1404
|
+
@prompt = "Are you sure?"
|
1405
|
+
@default_title = "Please Confirm"
|
1406
|
+
@title = "Confirm Request"
|
1407
|
+
@style = {:color => 'black'}
|
1408
|
+
@verbose_style = "{color: 'black'}"
|
1409
|
+
@default_okay = "Okay"
|
1410
|
+
@default_cancel = "Cancel"
|
1411
|
+
@default_style = "" #"'width','200px'"
|
1412
|
+
end
|
1413
|
+
|
1414
|
+
def test_link_to
|
1415
|
+
assert_equal "<a href=\"#{@url}\">Testing</a>", @u.link_to(@label, @url)
|
1416
|
+
end
|
1417
|
+
|
1418
|
+
def test_link_to_with_popup
|
1419
|
+
assert_raises(ActionView::ActionViewError) {@u.link_to(@label,@url, :popup=>true)}
|
1420
|
+
end
|
1421
|
+
|
1422
|
+
def test_link_to_with_confirm
|
1423
|
+
assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@default_style});"+
|
1424
|
+
"var a=this;dlg.onconfirm = function() { " +
|
1425
|
+
"document.setLocation(a.getHref()); };return false;\">#{@label}</a>",
|
1426
|
+
@u.link_to(@label, @url, :confirm => @prompt) )
|
1427
|
+
end
|
1428
|
+
def test_link_to_with_confirm_with_title
|
1429
|
+
assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@default_style});"+
|
1430
|
+
"var a=this;dlg.onconfirm = function() { " +
|
1431
|
+
"document.setLocation(a.getHref()); };return false;\">#{@label}</a>",
|
1432
|
+
@u.link_to(@label, @url, :confirm => {:title=>@title,:content=>@prompt}) )
|
1433
|
+
end
|
1434
|
+
def test_link_to_with_confirm_with_title_and_style
|
1435
|
+
assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@verbose_style});"+
|
1436
|
+
"var a=this;dlg.onconfirm = function() { " +
|
1437
|
+
"document.setLocation(a.getHref()); };return false;\">#{@label}</a>",
|
1438
|
+
@u.link_to(@label, @url, :confirm => {:title=>@title,:content=>@prompt}.merge!(@style)) )
|
1439
|
+
end
|
1440
|
+
|
1441
|
+
def test_link_to_with_method
|
1442
|
+
assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var a=this;var f = document.createElement('form'); f.setStyle('display','none'); "+
|
1443
|
+
"a.getParentNode().appendChild(f); f.setMethod('POST'); f.setAction(a.getHref());" +
|
1444
|
+
"var m = document.createElement('input'); m.setType('hidden'); "+
|
1445
|
+
"m.setName('_method'); m.setValue('delete'); f.appendChild(m);"+
|
1446
|
+
"f.submit();return false;\">#{@label}</a>", @u.link_to(@label,@url, :method=>:delete))
|
1447
|
+
end
|
1448
|
+
|
1449
|
+
def test_link_to_with_confirm_and_method
|
1450
|
+
assert_dom_equal( "<a href=\"#{@url}\" onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@default_style});"+
|
1451
|
+
"var a=this;dlg.onconfirm = function() { " +
|
1452
|
+
"var f = document.createElement('form'); f.setStyle('display','none'); "+
|
1453
|
+
"a.getParentNode().appendChild(f); f.setMethod('POST'); f.setAction(a.getHref());" +
|
1454
|
+
"var m = document.createElement('input'); m.setType('hidden'); "+
|
1455
|
+
"m.setName('_method'); m.setValue('delete'); f.appendChild(m);"+
|
1456
|
+
"f.submit(); };return false;\">#{@label}</a>", @u.link_to(@label,@url, :confirm=>@prompt, :method=>:delete) )
|
1457
|
+
end
|
1458
|
+
def test_link_to_with_confirm_and_method_for_non_canvas_page
|
1459
|
+
assert_dom_equal( "<a href=\"#{@url}\" onclick=\"if (confirm(\'#{@prompt}\')) { var f = document.createElement('form'); f.style.display = 'none'; "+
|
1460
|
+
"this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); "+
|
1461
|
+
"m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); "+
|
1462
|
+
"f.appendChild(m);f.submit(); };return false;\">#{@label}</a>",
|
1463
|
+
@non_canvas_u.link_to(@label,@url, :confirm=>@prompt, :method=>:delete) )
|
1464
|
+
end
|
1465
|
+
|
1466
|
+
def test_button_to
|
1467
|
+
assert_equal "<form method=\"post\" action=\"#{@url}\" class=\"button-to\"><div>" +
|
1468
|
+
"<input type=\"submit\" value=\"#{@label}\" /></div></form>", @u.button_to(@label,@url)
|
1469
|
+
end
|
1470
|
+
|
1471
|
+
def test_button_to_with_confirm
|
1472
|
+
assert_equal "<form method=\"post\" action=\"#{@url}\" class=\"button-to\"><div>" +
|
1473
|
+
"<input onclick=\"var dlg = new Dialog().showChoice(\'#{@default_title}\',\'#{@prompt}\',\'#{@default_okay}\',\'#{@default_cancel}\').setStyle(#{@default_style});"+
|
1474
|
+
"var a=this;dlg.onconfirm = function() { "+
|
1475
|
+
"a.getForm().submit(); };return false;\" type=\"submit\" value=\"#{@label}\" /></div></form>",
|
1476
|
+
@u.button_to(@label,@url, :confirm=>@prompt)
|
1477
|
+
end
|
1478
|
+
def test_button_to_with_confirm_for_non_canvas_page
|
1479
|
+
assert_equal "<form method=\"post\" action=\"#{@url}\" class=\"button-to\"><div>"+
|
1480
|
+
"<input onclick=\"return confirm(\'#{@prompt}\');\" type=\"submit\" value=\"#{@label}\" /></div></form>",
|
1481
|
+
@non_canvas_u.button_to(@label,@url, :confirm=>@prompt)
|
1482
|
+
end
|
1483
|
+
|
1484
|
+
def test_link_to_unless_with_true
|
1485
|
+
assert_equal @label, @u.link_to_unless(true,@label,@url)
|
1486
|
+
end
|
1487
|
+
def test_link_to_unless_with_false
|
1488
|
+
assert_equal @u.link_to(@label,@url), @u.link_to_unless(false,@label,@url)
|
1489
|
+
end
|
1490
|
+
|
1491
|
+
def test_link_to_if_with_true
|
1492
|
+
assert_equal @u.link_to(@label,@url), @u.link_to_if(true,@label,@url)
|
1493
|
+
end
|
1494
|
+
def test_link_to_if_with_false
|
1495
|
+
assert_equal @label, @u.link_to_if(false,@label,@url)
|
1496
|
+
end
|
1497
|
+
|
1498
|
+
end
|
1499
|
+
|
1500
|
+
class RailsRequestFormatTest < Test::Unit::TestCase
|
1501
|
+
class FacebookController < NoisyController
|
1502
|
+
def index
|
1503
|
+
respond_to do |format|
|
1504
|
+
format.html { render :text => 'html' }
|
1505
|
+
format.fbml { render :text => 'fbml' }
|
1506
|
+
format.fbjs { render :text => 'fbjs' }
|
1507
|
+
end
|
1508
|
+
end
|
1509
|
+
end
|
1510
|
+
|
1511
|
+
def setup
|
1512
|
+
Facebooker.apply_configuration({
|
1513
|
+
'api_key' => '1234567',
|
1514
|
+
'canvas_page_name' => 'facebook_app_name',
|
1515
|
+
'secret_key' => '7654321' })
|
1516
|
+
@controller = FacebookController.new
|
1517
|
+
@request = ActionController::TestRequest.new
|
1518
|
+
@response = ActionController::TestResponse.new
|
1519
|
+
@controller.stubs(:verify_signature).returns(true)
|
1520
|
+
end
|
1521
|
+
|
1522
|
+
def test_responds_to_html_without_canvas
|
1523
|
+
get :index
|
1524
|
+
assert_equal 'html', @response.body
|
1525
|
+
end
|
1526
|
+
|
1527
|
+
def test_responds_to_fbml_in_canvas
|
1528
|
+
get :index, facebook_params(:fb_sig_in_canvas => '1')
|
1529
|
+
assert_equal 'fbml', @response.body
|
1530
|
+
end
|
1531
|
+
|
1532
|
+
def test_responds_to_fbjs_when_is_ajax
|
1533
|
+
get :index, facebook_params(:fb_sig_is_ajax => '1')
|
1534
|
+
assert_equal 'fbjs', @response.body
|
1535
|
+
end
|
1536
|
+
|
1537
|
+
def test_responds_to_html_when_iframe
|
1538
|
+
get :index, facebook_params(:fb_sig_in_iframe => '1')
|
1539
|
+
assert_equal 'html', @response.body
|
1540
|
+
end
|
1541
|
+
|
1542
|
+
end
|
1543
|
+
|