facebooker-lite 1.0.67

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/.autotest +15 -0
  2. data/CHANGELOG.rdoc +24 -0
  3. data/COPYING.rdoc +19 -0
  4. data/Manifest.txt +114 -0
  5. data/README.rdoc +120 -0
  6. data/Rakefile +94 -0
  7. data/TODO.rdoc +4 -0
  8. data/facebooker.gemspec +42 -0
  9. data/generators/xd_receiver/templates/xd_receiver.html +10 -0
  10. data/generators/xd_receiver/templates/xd_receiver_ssl.html +10 -0
  11. data/generators/xd_receiver/xd_receiver_generator.rb +10 -0
  12. data/init.rb +25 -0
  13. data/install.rb +12 -0
  14. data/lib/facebooker.rb +261 -0
  15. data/lib/facebooker/adapters/adapter_base.rb +91 -0
  16. data/lib/facebooker/adapters/bebo_adapter.rb +77 -0
  17. data/lib/facebooker/adapters/facebook_adapter.rb +60 -0
  18. data/lib/facebooker/admin.rb +42 -0
  19. data/lib/facebooker/application.rb +37 -0
  20. data/lib/facebooker/attachment.rb +51 -0
  21. data/lib/facebooker/batch_request.rb +45 -0
  22. data/lib/facebooker/data.rb +57 -0
  23. data/lib/facebooker/feed.rb +78 -0
  24. data/lib/facebooker/logging.rb +44 -0
  25. data/lib/facebooker/mobile.rb +20 -0
  26. data/lib/facebooker/mock/service.rb +50 -0
  27. data/lib/facebooker/mock/session.rb +18 -0
  28. data/lib/facebooker/model.rb +139 -0
  29. data/lib/facebooker/models/affiliation.rb +10 -0
  30. data/lib/facebooker/models/album.rb +11 -0
  31. data/lib/facebooker/models/applicationproperties.rb +39 -0
  32. data/lib/facebooker/models/applicationrestrictions.rb +10 -0
  33. data/lib/facebooker/models/comment.rb +9 -0
  34. data/lib/facebooker/models/cookie.rb +10 -0
  35. data/lib/facebooker/models/education_info.rb +11 -0
  36. data/lib/facebooker/models/event.rb +28 -0
  37. data/lib/facebooker/models/family_relative_info.rb +7 -0
  38. data/lib/facebooker/models/friend_list.rb +16 -0
  39. data/lib/facebooker/models/group.rb +36 -0
  40. data/lib/facebooker/models/info_item.rb +10 -0
  41. data/lib/facebooker/models/info_section.rb +10 -0
  42. data/lib/facebooker/models/location.rb +8 -0
  43. data/lib/facebooker/models/message_thread.rb +89 -0
  44. data/lib/facebooker/models/notifications.rb +17 -0
  45. data/lib/facebooker/models/page.rb +46 -0
  46. data/lib/facebooker/models/photo.rb +19 -0
  47. data/lib/facebooker/models/tag.rb +12 -0
  48. data/lib/facebooker/models/user.rb +751 -0
  49. data/lib/facebooker/models/video.rb +9 -0
  50. data/lib/facebooker/models/work_info.rb +10 -0
  51. data/lib/facebooker/parser.rb +970 -0
  52. data/lib/facebooker/rails/backwards_compatible_param_checks.rb +31 -0
  53. data/lib/facebooker/rails/controller.rb +353 -0
  54. data/lib/facebooker/rails/extensions/action_controller.rb +47 -0
  55. data/lib/facebooker/rails/extensions/rack_setup.rb +16 -0
  56. data/lib/facebooker/rails/extensions/routing.rb +15 -0
  57. data/lib/facebooker/rails/facebook_pretty_errors.rb +22 -0
  58. data/lib/facebooker/rails/facebook_request_fix.rb +28 -0
  59. data/lib/facebooker/rails/facebook_request_fix_2-3.rb +31 -0
  60. data/lib/facebooker/rails/facebook_session_handling.rb +68 -0
  61. data/lib/facebooker/rails/facebook_url_rewriting.rb +60 -0
  62. data/lib/facebooker/rails/helpers/fb_connect.rb +75 -0
  63. data/lib/facebooker/rails/integration_session.rb +38 -0
  64. data/lib/facebooker/rails/profile_publisher_extensions.rb +42 -0
  65. data/lib/facebooker/rails/publisher.rb +608 -0
  66. data/lib/facebooker/rails/routing.rb +49 -0
  67. data/lib/facebooker/rails/test_helpers.rb +68 -0
  68. data/lib/facebooker/rails/utilities.rb +22 -0
  69. data/lib/facebooker/server_cache.rb +24 -0
  70. data/lib/facebooker/service.rb +103 -0
  71. data/lib/facebooker/service/base_service.rb +19 -0
  72. data/lib/facebooker/service/curl_service.rb +44 -0
  73. data/lib/facebooker/service/net_http_service.rb +12 -0
  74. data/lib/facebooker/service/typhoeus_multi_service.rb +27 -0
  75. data/lib/facebooker/service/typhoeus_service.rb +17 -0
  76. data/lib/facebooker/session.rb +786 -0
  77. data/lib/facebooker/stream_post.rb +19 -0
  78. data/lib/facebooker/version.rb +9 -0
  79. data/lib/net/http_multipart_post.rb +123 -0
  80. data/lib/rack/facebook.rb +89 -0
  81. data/lib/rack/facebook_session.rb +21 -0
  82. data/lib/tasks/facebooker.rake +19 -0
  83. data/lib/tasks/facebooker.rb +2 -0
  84. data/lib/tasks/tunnel.rake +46 -0
  85. data/rails/init.rb +1 -0
  86. data/setup.rb +1585 -0
  87. data/templates/layout.erb +24 -0
  88. data/test/facebooker/adapters_test.rb +191 -0
  89. data/test/facebooker/admin_test.rb +102 -0
  90. data/test/facebooker/application_test.rb +110 -0
  91. data/test/facebooker/attachment_test.rb +72 -0
  92. data/test/facebooker/batch_request_test.rb +83 -0
  93. data/test/facebooker/data_test.rb +86 -0
  94. data/test/facebooker/logging_test.rb +43 -0
  95. data/test/facebooker/mobile_test.rb +45 -0
  96. data/test/facebooker/model_test.rb +133 -0
  97. data/test/facebooker/models/event_test.rb +15 -0
  98. data/test/facebooker/models/page_test.rb +56 -0
  99. data/test/facebooker/models/photo_test.rb +16 -0
  100. data/test/facebooker/models/user_test.rb +1074 -0
  101. data/test/facebooker/rails/facebook_request_fix_2-3_test.rb +25 -0
  102. data/test/facebooker/rails/facebook_url_rewriting_test.rb +76 -0
  103. data/test/facebooker/rails/integration_session_test.rb +13 -0
  104. data/test/facebooker/rails/publisher_test.rb +538 -0
  105. data/test/facebooker/rails_integration_test.rb +1543 -0
  106. data/test/facebooker/server_cache_test.rb +44 -0
  107. data/test/facebooker/service_test.rb +58 -0
  108. data/test/facebooker/session_test.rb +883 -0
  109. data/test/facebooker_test.rb +1263 -0
  110. data/test/fixtures/multipart_post_body_with_only_parameters.txt +33 -0
  111. data/test/fixtures/multipart_post_body_with_single_file.txt +38 -0
  112. data/test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt +38 -0
  113. data/test/net/http_multipart_post_test.rb +52 -0
  114. data/test/rack/facebook_session_test.rb +34 -0
  115. data/test/rack/facebook_test.rb +73 -0
  116. data/test/rails_test_helper.rb +36 -0
  117. data/test/test_helper.rb +74 -0
  118. metadata +278 -0
@@ -0,0 +1,25 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../rails_test_helper')
2
+ require 'facebooker/rails/facebook_request_fix_2-3' if Rails.version >= '2.3'
3
+ class Facebooker::Rails::FacebookRequestFix23Test < Test::Unit::TestCase
4
+
5
+ def setup
6
+ ENV['FACEBOOK_API_KEY'] = '1234567'
7
+ ENV['FACEBOOK_SECRET_KEY'] = '7654321'
8
+ if Rails.version < '2.3'
9
+ @request = ActionController::TestRequest.new({"fb_sig_is_ajax"=>"1"}, {}, nil)
10
+
11
+ else
12
+ @request = ActionController::TestRequest.new
13
+ @request.query_parameters[:fb_sig_is_ajax] = "1"
14
+ end
15
+ end
16
+
17
+ def test_xhr_when_is_ajax
18
+ assert @request.xhr?
19
+ end
20
+
21
+ def test_xml_http_request_when_is_ajax
22
+ assert @request.xml_http_request?
23
+ end
24
+
25
+ end
@@ -0,0 +1,76 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../rails_test_helper')
2
+
3
+ class Facebooker::Rails::FacebookUrlRewritingTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @request = ActionController::TestRequest.new
7
+ @params = {}
8
+ @rewriter = ActionController::UrlRewriter.new(@request, @params)
9
+ end
10
+
11
+ def test_one_or_true_on_string_1
12
+ assert @rewriter.one_or_true( "1" )
13
+ end
14
+
15
+ def test_one_or_true_on_string_0
16
+ assert !@rewriter.one_or_true( "0" )
17
+ end
18
+
19
+ def test_one_or_true_on_integer_1
20
+ assert @rewriter.one_or_true( 1 )
21
+ end
22
+
23
+ def test_one_or_true_on_float_1
24
+ assert @rewriter.one_or_true( 1.0 )
25
+ end
26
+
27
+ def test_one_or_true_on_true
28
+ assert @rewriter.one_or_true( true )
29
+ end
30
+
31
+ def test_one_or_true_on_false
32
+ assert !@rewriter.one_or_true( false )
33
+ end
34
+
35
+ def test_one_or_true_on_nil
36
+ assert !@rewriter.one_or_true( nil )
37
+ end
38
+
39
+
40
+ def test_zero_or_false_on_blank
41
+ assert @rewriter.zero_or_false( "" )
42
+ end
43
+
44
+ def test_zero_or_false_on_integer_0
45
+ assert @rewriter.zero_or_false( 0 )
46
+ end
47
+
48
+ def test_zero_or_false_on_float_0
49
+ assert @rewriter.zero_or_false( 0.0 )
50
+ end
51
+
52
+ def test_zero_or_false_on_string_0
53
+ assert @rewriter.zero_or_false( "0" )
54
+ end
55
+
56
+ def test_zero_or_false_on_false
57
+ assert @rewriter.zero_or_false( false )
58
+ end
59
+
60
+ def test_zero_or_false_on_nil
61
+ assert @rewriter.zero_or_false( nil )
62
+ end
63
+
64
+ def test_zero_or_false_on_string_1
65
+ assert !@rewriter.zero_or_false( "1" )
66
+ end
67
+
68
+ def test_zero_or_false_on_numeric_1
69
+ assert !@rewriter.zero_or_false( 1 )
70
+ end
71
+
72
+ def test_zero_or_false_on_true
73
+ assert !@rewriter.zero_or_false( true )
74
+ end
75
+
76
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../rails_test_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../../../lib/facebooker/rails/integration_session')
3
+
4
+ class Facebooker::Rails::IntegrationSessionTest < Test::Unit::TestCase
5
+
6
+ def test_include_api_key_in_default_request_params
7
+ ENV['FACEBOOK_API_KEY'] = 'a key'
8
+ integration_session = Facebooker::Rails::IntegrationSession.new
9
+ integration_session.reset!
10
+ assert_equal 'a key', integration_session.default_request_params[ :fb_sig_api_key ]
11
+ end
12
+
13
+ end
@@ -0,0 +1,538 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../rails_test_helper')
2
+
3
+ module SymbolHelper
4
+ def symbol_helper_loaded
5
+ true
6
+ end
7
+ end
8
+
9
+ module ModuleHelper
10
+ def module_helper_loaded
11
+ true
12
+ end
13
+ end
14
+
15
+ ::RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
16
+
17
+ class TestPublisher < Facebooker::Rails::Publisher
18
+
19
+ helper :symbol
20
+ helper ModuleHelper
21
+
22
+ def action(f)
23
+ send_as :action
24
+ from f
25
+ title "Action Title"
26
+ end
27
+
28
+ def templatized_action(f)
29
+ send_as :templatized_action
30
+ from f
31
+ title_template "Templatized Action Title"
32
+ end
33
+
34
+ def story(to)
35
+ send_as :story
36
+ recipients to
37
+ title 'Story Title'
38
+ end
39
+
40
+ def notification(to,f)
41
+ send_as :notification
42
+ recipients to
43
+ from f
44
+ fbml "Not"
45
+ end
46
+
47
+ def email(to,f)
48
+ send_as :email
49
+ recipients to
50
+ from f
51
+ title "Email"
52
+ fbml 'text'
53
+ text fbml
54
+ end
55
+
56
+ def render_notification(to,f)
57
+ send_as :notification
58
+ recipients to
59
+ from f
60
+ fbml render(:inline=>"<%=module_helper_loaded%>")
61
+ end
62
+
63
+
64
+ def profile_update(to,f)
65
+ send_as :profile
66
+ recipients to
67
+ profile "profile"
68
+ profile_action "profile_action"
69
+ mobile_profile "mobile_profile"
70
+
71
+ end
72
+
73
+ def profile_update_with_profile_main(to,f)
74
+ send_as :profile
75
+ recipients to
76
+ from f
77
+ profile "profile"
78
+ profile_action "profile_action"
79
+ mobile_profile "mobile_profile"
80
+ profile_main "profile_main"
81
+ end
82
+
83
+ def ref_update(user)
84
+ send_as :ref
85
+ fbml "fbml"
86
+ handle "handle"
87
+ end
88
+
89
+ def user_action_template
90
+ one_line_story_template "{*actor*} did stuff with {*friend*}"
91
+ short_story_template "{*actor*} has a title {*friend*}", render(:inline=>"This is a test render")
92
+ full_story_template "{*actor*} did a lot","This is the full body",:img=>{:some_params=>true}
93
+ end
94
+
95
+ def simple_user_action_template
96
+ one_line_story_template "{*actor*} did stuff with {*friend*}"
97
+ end
98
+
99
+ def user_action_with_action_links_template
100
+ one_line_story_template "{*actor*} did stuff with {*friend*}"
101
+ short_story_template "{*actor*} has a title {*friend*}", render(:inline=>"This is a test render")
102
+ full_story_template "{*actor*} did a lot","This is the full body",:img=>{:some_params=>true}
103
+ action_links action_link("Source","HREF")
104
+ end
105
+
106
+ def user_action(user)
107
+ send_as :user_action
108
+ from user
109
+ data :friend=>"Mike"
110
+ end
111
+
112
+ def user_action_with_template_id(user)
113
+ send_as :user_action
114
+ from user
115
+ data :friend=>"Mike"
116
+ template_id 4
117
+ end
118
+ def user_action_with_story_size(user)
119
+ send_as :user_action
120
+ from user
121
+ story_size ONE_LINE
122
+ story_size FULL
123
+ story_size SHORT
124
+ data :friend=>"Mike"
125
+ end
126
+ def user_action_no_data(user)
127
+ send_as :user_action
128
+ from user
129
+ end
130
+
131
+ def no_send_as(to)
132
+ recipients to
133
+ end
134
+
135
+ def invalid_send_as(to)
136
+ send_as :fake
137
+ recipients to
138
+ end
139
+
140
+ def publish_post_to_own_stream(user)
141
+ send_as :publish_stream
142
+ from user
143
+ target user
144
+ attachment({:name => "Facebooker", :href => "http://www.exampple.com"})
145
+ message "Posting post to own stream"
146
+ action_links([{:text => "Action Link", :href => "http://www.example.com/action_link"}])
147
+ end
148
+
149
+ def publish_post_to_friends_stream(from, to)
150
+ send_as :publish_stream
151
+ from from
152
+ target to
153
+ attachment({:name => "Facebooker", :href => "http://www.exampple.com"})
154
+ message "Posting post to friends stream"
155
+ action_links([{:text => "Action Link", :href => "http://www.example.com/action_link"}])
156
+ end
157
+ end
158
+
159
+ class Facebooker::Rails::Publisher::FacebookTemplateTest < Test::Unit::TestCase
160
+ FacebookTemplate = Facebooker::Rails::Publisher::FacebookTemplate
161
+
162
+ def setup
163
+ super
164
+ ENV['FACEBOOK_API_KEY'] = '1234567'
165
+ @template = mock("facebook template")
166
+ FacebookTemplate.stubs(:register).returns(@template)
167
+ FacebookTemplate.clear_cache!
168
+ end
169
+
170
+ def test_find_or_register_calls_find_cached
171
+ FacebookTemplate.expects(:find_cached).with(TestPublisher,"simple_user_action").returns(@template)
172
+ assert_equal FacebookTemplate.for_class_and_method(TestPublisher,"simple_user_action"),@template
173
+ end
174
+
175
+ def test_find_cached_should_use_cached_if_it_exists
176
+ FacebookTemplate.cache(TestPublisher,"simple_user_action",@template)
177
+ assert_equal FacebookTemplate.find_cached(TestPublisher,"simple_user_action"), @template
178
+
179
+ end
180
+
181
+ def test_find_cached_should_call_find_in_db_if_not_in_cache
182
+ FacebookTemplate.expects(:find_in_db).with(TestPublisher,"simple_user_action").returns(@template)
183
+ assert_equal FacebookTemplate.find_cached(TestPublisher,"simple_user_action"), @template
184
+ end
185
+
186
+ def test_find_in_db_should_run_find
187
+ FacebookTemplate.expects(:find_by_template_name).with("1234567: TestPublisher::simple_user_action").returns(@template)
188
+ @template.stubs(:template_changed?).returns(false)
189
+ assert_equal FacebookTemplate.find_in_db(TestPublisher,"simple_user_action"), @template
190
+ end
191
+
192
+ def test_find_in_db_should_register_if_not_found
193
+ FacebookTemplate.expects(:find_by_template_name).with("1234567: TestPublisher::simple_user_action").returns(nil)
194
+ FacebookTemplate.expects(:register).with(TestPublisher,"simple_user_action").returns(@template)
195
+ FacebookTemplate.find_cached(TestPublisher,"simple_user_action")
196
+
197
+ end
198
+
199
+ def test_find_in_db_should_check_for_change_if_found
200
+ FacebookTemplate.stubs(:find_by_template_name).returns(@template)
201
+ FacebookTemplate.stubs(:hashed_content).returns("MY CONTENT")
202
+ @template.expects(:template_changed?).with("MY CONTENT").returns(false)
203
+ FacebookTemplate.find_in_db(TestPublisher,"simple_user_action")
204
+ end
205
+
206
+ def test_find_in_db_should_re_register_if_changed
207
+ FacebookTemplate.stubs(:find_by_template_name).with("1234567: TestPublisher::simple_user_action").returns(@template)
208
+ FacebookTemplate.stubs(:hashed_content).returns("MY CONTENT")
209
+ @template.stubs(:template_changed?).returns(true)
210
+ @template.stubs(:destroy)
211
+ FacebookTemplate.expects(:register).with(TestPublisher,"simple_user_action").returns(@template)
212
+ FacebookTemplate.find_in_db(TestPublisher,"simple_user_action")
213
+ end
214
+
215
+ end
216
+
217
+ class Facebooker::Rails::Publisher::PublisherTest < Test::Unit::TestCase
218
+ FacebookTemplate = Facebooker::Rails::Publisher::FacebookTemplate
219
+
220
+ def setup
221
+ super
222
+
223
+ ENV['FACEBOOK_API_KEY'] = '1234567'
224
+ ENV['FACEBOOK_SECRET_KEY'] = '7654321'
225
+
226
+ @user = Facebooker::User.new
227
+ @user.id=4
228
+ @session = "session"
229
+ @user.stubs(:session).returns(@session)
230
+ end
231
+
232
+ def teardown
233
+ super
234
+ end
235
+
236
+ def test_respond_to
237
+ assert TestPublisher.respond_to?(:create_action)
238
+ assert TestPublisher.respond_to?(:deliver_action)
239
+ assert TestPublisher.respond_to?(:register_action)
240
+ end
241
+
242
+ def test_create_action
243
+ action=TestPublisher.create_action(@user)
244
+ assert_equal Facebooker::Feed::Action,action.class
245
+ assert_equal "Action Title",action.title
246
+ end
247
+
248
+ def test_deliver_action
249
+ @user.expects(:publish_action)
250
+ TestPublisher.deliver_action(@user)
251
+ end
252
+
253
+ def test_create_story
254
+ action=TestPublisher.create_story(@user)
255
+ assert_equal Facebooker::Feed::Story,action.class
256
+ assert_equal "Story Title",action.title
257
+ end
258
+
259
+ def test_deliver_story
260
+ @user.expects(:publish_story)
261
+ TestPublisher.deliver_story(@user)
262
+ end
263
+
264
+ def test_create_notification
265
+ notification=TestPublisher.create_notification(12451752,@user)
266
+ assert_equal Facebooker::Rails::Publisher::Notification,notification.class
267
+ assert_equal "Not",notification.fbml
268
+ end
269
+
270
+ def test_deliver_notification
271
+ @session.expects(:send_notification)
272
+ TestPublisher.deliver_notification("12451752",@user)
273
+ end
274
+
275
+ def test_create_email
276
+ email=TestPublisher.create_email("12451752",@user)
277
+ assert_equal Facebooker::Rails::Publisher::Email,email.class
278
+ assert_equal "Email",email.title
279
+ assert_equal "text",email.text
280
+ assert_equal "text",email.fbml
281
+ end
282
+
283
+ def test_deliver_email
284
+ @session.expects(:send_email)
285
+ TestPublisher.deliver_email("12451752",@user)
286
+ end
287
+
288
+ def test_create_templatized_action
289
+ ta=TestPublisher.create_templatized_action(@user)
290
+ assert_equal Facebooker::Feed::TemplatizedAction,ta.class
291
+ assert_equal "Templatized Action Title",ta.title_template
292
+
293
+ end
294
+
295
+
296
+
297
+ def test_deliver_templatized_action
298
+ @user.expects(:publish_action)
299
+ TestPublisher.deliver_templatized_action(@user)
300
+ end
301
+ def test_create_profile_update
302
+ p=TestPublisher.create_profile_update(@user,@user)
303
+ assert_equal Facebooker::Rails::Publisher::Profile,p.class
304
+ assert_equal "profile",p.profile
305
+ assert_equal "profile_action",p.profile_action
306
+ assert_equal "mobile_profile",p.mobile_profile
307
+ end
308
+ def test_create_profile_update_with_profile_main
309
+ p=TestPublisher.create_profile_update_with_profile_main(@user,@user)
310
+ assert_equal Facebooker::Rails::Publisher::Profile,p.class
311
+ assert_equal "profile",p.profile
312
+ assert_equal "profile_action",p.profile_action
313
+ assert_equal "mobile_profile",p.mobile_profile
314
+ assert_equal "profile_main",p.profile_main
315
+ end
316
+
317
+
318
+ def test_deliver_profile
319
+ Facebooker::User.stubs(:new).returns(@user)
320
+ @user.expects(:set_profile_fbml).with('profile', 'mobile_profile', 'profile_action',nil)
321
+ TestPublisher.deliver_profile_update(@user,@user)
322
+ end
323
+
324
+ def test_deliver_profile_with_main
325
+ Facebooker::User.stubs(:new).returns(@user)
326
+ @user.expects(:set_profile_fbml).with('profile', 'mobile_profile', 'profile_action','profile_main')
327
+ TestPublisher.deliver_profile_update_with_profile_main(@user,@user)
328
+ end
329
+
330
+
331
+ def test_create_ref_update
332
+ p=TestPublisher.create_ref_update(@user)
333
+ assert_equal Facebooker::Rails::Publisher::Ref,p.class
334
+ assert_equal "fbml",p.fbml
335
+ assert_equal "handle",p.handle
336
+ end
337
+
338
+ def test_deliver_ref_update
339
+ Facebooker::Session.stubs(:create).returns(@session)
340
+ @server_cache="server_cache"
341
+ @session.expects(:server_cache).returns(@server_cache)
342
+ @server_cache.expects(:set_ref_handle).with("handle","fbml")
343
+ TestPublisher.deliver_ref_update(@user)
344
+ end
345
+
346
+ def test_register_user_action
347
+ Facebooker::Rails::Publisher::FacebookTemplate.expects(:register)
348
+ TestPublisher.register_user_action
349
+ end
350
+
351
+ def test_register_should_deactivate_template_bundle_if_exists
352
+ @template = mock
353
+ @template.stubs(:bundle_id).returns(999)
354
+ @template.stubs(:bundle_id=)
355
+ @template.stubs(:save!)
356
+ @session = mock
357
+ @session.stubs(:register_template_bundle).returns(1000)
358
+ Facebooker::Session.stubs(:create).returns(@session)
359
+ Facebooker::Rails::Publisher::FacebookTemplate.stubs(:find_or_initialize_by_template_name).returns(@template)
360
+ @template.expects(:deactivate)
361
+ FacebookTemplate.register(TestPublisher, "simple_user_action")
362
+ end
363
+
364
+ def test_register_user_action_with_action_links
365
+ ActionController::Base.append_view_path("./test/../../app/views")
366
+ Facebooker::Rails::Publisher::FacebookTemplate.expects(:register)
367
+ TestPublisher.register_user_action_with_action_links
368
+ end
369
+
370
+ def test_create_user_action
371
+ @from_user = Facebooker::User.new
372
+ @session = Facebooker::Session.new("","")
373
+ @from_user.stubs(:session).returns(@session)
374
+ Facebooker::Rails::Publisher::FacebookTemplate.expects(:bundle_id_for_class_and_method).
375
+ with(TestPublisher,'user_action').
376
+ returns(20309041537)
377
+ ua = TestPublisher.create_user_action(@from_user)
378
+ assert_equal "user_action", ua.template_name
379
+ end
380
+ def test_create_user_action_with_template_id
381
+ @from_user = Facebooker::User.new
382
+ @session = Facebooker::Session.new("","")
383
+ @from_user.stubs(:session).returns(@session)
384
+ Facebooker::Rails::Publisher::FacebookTemplate.expects(:bundle_id_for_class_and_method).
385
+ with(TestPublisher,'user_action').never
386
+ ua = TestPublisher.create_user_action_with_template_id(@from_user)
387
+ assert_equal 4,ua.template_id
388
+ end
389
+
390
+ def test_publisher_user_action
391
+ @from_user = Facebooker::User.new
392
+ @session = Facebooker::Session.new("","")
393
+ @from_user.stubs(:session).returns(@session)
394
+ @session.expects(:publish_user_action).with(20309041537,{:friend=>"Mike"},nil,nil,nil)
395
+
396
+ Facebooker::Rails::Publisher::FacebookTemplate.expects(:bundle_id_for_class_and_method).
397
+ with(TestPublisher, 'user_action').
398
+ returns(20309041537)
399
+ # pseudo_template = Struct.new(:bundle_id, :content_hash).new(20309041537, '')
400
+ # pseudo_template.expects(:matches_content?).returns(true)
401
+ # Facebooker::Rails::Publisher::FacebookTemplate.expects(:for).returns(pseudo_template)
402
+ TestPublisher.deliver_user_action(@from_user)
403
+ end
404
+
405
+ def test_publish_user_action_with_story_size
406
+ @from_user = Facebooker::User.new
407
+ @session = Facebooker::Session.new("","")
408
+ @from_user.stubs(:session).returns(@session)
409
+ @session.expects(:publish_user_action).with(20309041537,{:friend=>"Mike"},nil,nil,2)
410
+
411
+ Facebooker::Rails::Publisher::FacebookTemplate.expects(:bundle_id_for_class_and_method).
412
+ with(TestPublisher, 'user_action_with_story_size').
413
+ returns(20309041537)
414
+ TestPublisher.deliver_user_action_with_story_size(@from_user)
415
+
416
+ end
417
+
418
+ def test_publishing_user_data_no_action_gives_nil_hash
419
+ @from_user = Facebooker::User.new
420
+ @session = Facebooker::Session.new("","")
421
+ @from_user.stubs(:session).returns(@session)
422
+ @session.expects(:publish_user_action).with(20309041537,{},nil,nil,nil)
423
+
424
+ Facebooker::Rails::Publisher::FacebookTemplate.stubs(:bundle_id_for_class_and_method).returns(20309041537)
425
+ TestPublisher.deliver_user_action_no_data(@from_user)
426
+ end
427
+ def test_no_sends_as_raises
428
+ assert_raises(Facebooker::Rails::Publisher::UnspecifiedBodyType) {
429
+ TestPublisher.deliver_no_send_as(@user)
430
+ }
431
+ end
432
+
433
+ def test_invalid_send_as_raises
434
+ assert_raises(Facebooker::Rails::Publisher::UnknownBodyType) {
435
+ TestPublisher.deliver_invalid_send_as(@user)
436
+ }
437
+ end
438
+
439
+ def test_publish_post_to_own_stream
440
+ @user = Facebooker::User.new
441
+ @user.expects(:publish_to).with(@user, has_entry(:attachment=>instance_of(Hash)))
442
+
443
+ TestPublisher.deliver_publish_post_to_own_stream(@user)
444
+ end
445
+
446
+ def test_publish_stream_sets_action_links
447
+ @user = Facebooker::User.new
448
+ stream_post = TestPublisher.create_publish_post_to_own_stream(@user)
449
+ assert_equal [{:text => "Action Link", :href => "http://www.example.com/action_link"}],stream_post.action_links
450
+ end
451
+
452
+ def test_publish_stream_sets_target
453
+ @user = Facebooker::User.new
454
+ stream_post = TestPublisher.create_publish_post_to_own_stream(@user)
455
+ assert_equal @user,stream_post.target
456
+
457
+ end
458
+
459
+ def test_publish_post_to_friends_stream
460
+ @from_user = Facebooker::User.new
461
+ @to_user = Facebooker::User.new
462
+ @from_user.expects(:publish_to).with(@to_user, has_entry(:action_links=>instance_of(Array)))
463
+
464
+ TestPublisher.deliver_publish_post_to_friends_stream(@from_user, @to_user)
465
+ end
466
+
467
+ def test_keeps_class_method_missing
468
+ assert_raises(NoMethodError) {
469
+ TestPublisher.fake
470
+ }
471
+ end
472
+ def test_keeps_instance_method_missing
473
+ assert_raises(NoMethodError) {
474
+ TestPublisher.new.fake
475
+ }
476
+ end
477
+
478
+ def test_image_urls
479
+ Facebooker.expects(:facebook_path_prefix).returns("/mike")
480
+ string_image = TestPublisher.new.image('image.png', 'raw_string')
481
+ assert_equal('/images/image.png',string_image.src)
482
+ assert_equal('raw_string',string_image.href)
483
+ route_image = TestPublisher.new.image('image.png', {:controller => :pokes, :action => :do, :id => 1})
484
+ assert_equal('http://apps.facebook.com/mike/pokes/do/1',route_image.href)
485
+ end
486
+
487
+ def test_image_holder_equality
488
+ assert_equal TestPublisher::ImageHolder.new('image.png', 'raw_string'), TestPublisher::ImageHolder.new('image.png', 'raw_string')
489
+ end
490
+
491
+ def test_image_to_json_puts_src_first
492
+ string_image = TestPublisher.new.image('image.png', 'raw_string')
493
+ assert_equal "{\"src\":\"/images/image.png\", \"href\":\"raw_string\"}",string_image.to_json
494
+ end
495
+ def test_action_link
496
+ assert_equal({:text=>"text", :href=>"href"}, TestPublisher.new.action_link("text","href"))
497
+ end
498
+
499
+ def test_default_url_options
500
+ Facebooker.expects(:facebook_path_prefix).returns("/mike")
501
+ assert_equal({:host=>"apps.facebook.com/mike"},TestPublisher.new.default_url_options)
502
+ end
503
+
504
+ def test_recipients
505
+ tp=TestPublisher.new
506
+ tp.recipients "a"
507
+ assert_equal("a",tp.recipients)
508
+ end
509
+
510
+ def test_symbol_helper
511
+ assert TestPublisher.new.symbol_helper_loaded
512
+ end
513
+ def test_module_helper
514
+ assert TestPublisher.new.module_helper_loaded
515
+ end
516
+
517
+ def test_with_render
518
+ #normally Rails would do this for us
519
+ silence_warnings do
520
+ if ActionController::Base.respond_to?(:append_view_path)
521
+ ActionController::Base.append_view_path("./test/../../app/views")
522
+ end
523
+ notification=TestPublisher.create_render_notification(12451752,@user)
524
+ assert_equal "true",notification.fbml
525
+ end
526
+ end
527
+
528
+ def test_notification_as_announcement
529
+ #normally Rails would do this for us
530
+ silence_warnings do
531
+ if ActionController::Base.respond_to?(:append_view_path)
532
+ ActionController::Base.append_view_path("./test/../../app/views")
533
+ end
534
+ notification=TestPublisher.create_render_notification(12451752,nil)
535
+ assert_equal "true",notification.fbml
536
+ end
537
+ end
538
+ end