taweili-facebooker 1.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. data/.autotest +15 -0
  2. data/CHANGELOG.rdoc +24 -0
  3. data/COPYING.rdoc +19 -0
  4. data/Manifest.txt +133 -0
  5. data/README.rdoc +104 -0
  6. data/Rakefile +85 -0
  7. data/TODO.rdoc +4 -0
  8. data/examples/desktop_login.rb +14 -0
  9. data/facebooker.gemspec +38 -0
  10. data/generators/facebook/facebook_generator.rb +14 -0
  11. data/generators/facebook/templates/config/facebooker.yml +49 -0
  12. data/generators/facebook/templates/public/javascripts/facebooker.js +83 -0
  13. data/generators/facebook_controller/USAGE +33 -0
  14. data/generators/facebook_controller/facebook_controller_generator.rb +40 -0
  15. data/generators/facebook_controller/templates/controller.rb +7 -0
  16. data/generators/facebook_controller/templates/functional_test.rb +11 -0
  17. data/generators/facebook_controller/templates/helper.rb +2 -0
  18. data/generators/facebook_controller/templates/view.fbml.erb +2 -0
  19. data/generators/facebook_controller/templates/view.html.erb +2 -0
  20. data/generators/facebook_publisher/facebook_publisher_generator.rb +14 -0
  21. data/generators/facebook_publisher/templates/create_facebook_templates.rb +15 -0
  22. data/generators/facebook_publisher/templates/publisher.rb +3 -0
  23. data/generators/facebook_scaffold/USAGE +27 -0
  24. data/generators/facebook_scaffold/facebook_scaffold_generator.rb +118 -0
  25. data/generators/facebook_scaffold/templates/controller.rb +93 -0
  26. data/generators/facebook_scaffold/templates/facebook_style.css +2579 -0
  27. data/generators/facebook_scaffold/templates/functional_test.rb +89 -0
  28. data/generators/facebook_scaffold/templates/helper.rb +2 -0
  29. data/generators/facebook_scaffold/templates/layout.fbml.erb +6 -0
  30. data/generators/facebook_scaffold/templates/layout.html.erb +17 -0
  31. data/generators/facebook_scaffold/templates/style.css +74 -0
  32. data/generators/facebook_scaffold/templates/view_edit.fbml.erb +13 -0
  33. data/generators/facebook_scaffold/templates/view_edit.html.erb +18 -0
  34. data/generators/facebook_scaffold/templates/view_index.fbml.erb +24 -0
  35. data/generators/facebook_scaffold/templates/view_index.html.erb +24 -0
  36. data/generators/facebook_scaffold/templates/view_new.fbml.erb +12 -0
  37. data/generators/facebook_scaffold/templates/view_new.html.erb +17 -0
  38. data/generators/facebook_scaffold/templates/view_show.fbml.erb +10 -0
  39. data/generators/facebook_scaffold/templates/view_show.html.erb +10 -0
  40. data/generators/publisher/publisher_generator.rb +14 -0
  41. data/generators/xd_receiver/templates/xd_receiver.html +10 -0
  42. data/generators/xd_receiver/xd_receiver_generator.rb +10 -0
  43. data/init.rb +25 -0
  44. data/install.rb +12 -0
  45. data/lib/facebooker/adapters/adapter_base.rb +91 -0
  46. data/lib/facebooker/adapters/bebo_adapter.rb +77 -0
  47. data/lib/facebooker/adapters/facebook_adapter.rb +52 -0
  48. data/lib/facebooker/admin.rb +42 -0
  49. data/lib/facebooker/batch_request.rb +45 -0
  50. data/lib/facebooker/data.rb +57 -0
  51. data/lib/facebooker/feed.rb +78 -0
  52. data/lib/facebooker/logging.rb +44 -0
  53. data/lib/facebooker/mobile.rb +20 -0
  54. data/lib/facebooker/mock/service.rb +50 -0
  55. data/lib/facebooker/mock/session.rb +18 -0
  56. data/lib/facebooker/model.rb +139 -0
  57. data/lib/facebooker/models/affiliation.rb +10 -0
  58. data/lib/facebooker/models/album.rb +11 -0
  59. data/lib/facebooker/models/applicationproperties.rb +39 -0
  60. data/lib/facebooker/models/applicationrestrictions.rb +10 -0
  61. data/lib/facebooker/models/cookie.rb +10 -0
  62. data/lib/facebooker/models/education_info.rb +11 -0
  63. data/lib/facebooker/models/event.rb +28 -0
  64. data/lib/facebooker/models/friend_list.rb +16 -0
  65. data/lib/facebooker/models/group.rb +36 -0
  66. data/lib/facebooker/models/info_item.rb +10 -0
  67. data/lib/facebooker/models/info_section.rb +10 -0
  68. data/lib/facebooker/models/location.rb +8 -0
  69. data/lib/facebooker/models/notifications.rb +17 -0
  70. data/lib/facebooker/models/page.rb +28 -0
  71. data/lib/facebooker/models/photo.rb +19 -0
  72. data/lib/facebooker/models/tag.rb +12 -0
  73. data/lib/facebooker/models/user.rb +497 -0
  74. data/lib/facebooker/models/video.rb +9 -0
  75. data/lib/facebooker/models/work_info.rb +10 -0
  76. data/lib/facebooker/parser.rb +650 -0
  77. data/lib/facebooker/rails/backwards_compatible_param_checks.rb +31 -0
  78. data/lib/facebooker/rails/controller.rb +337 -0
  79. data/lib/facebooker/rails/cucumber/world.rb +46 -0
  80. data/lib/facebooker/rails/cucumber.rb +28 -0
  81. data/lib/facebooker/rails/extensions/action_controller.rb +48 -0
  82. data/lib/facebooker/rails/extensions/rack_setup.rb +6 -0
  83. data/lib/facebooker/rails/extensions/routing.rb +15 -0
  84. data/lib/facebooker/rails/facebook_form_builder.rb +112 -0
  85. data/lib/facebooker/rails/facebook_pretty_errors.rb +22 -0
  86. data/lib/facebooker/rails/facebook_request_fix.rb +30 -0
  87. data/lib/facebooker/rails/facebook_request_fix_2-3.rb +31 -0
  88. data/lib/facebooker/rails/facebook_session_handling.rb +68 -0
  89. data/lib/facebooker/rails/facebook_url_helper.rb +192 -0
  90. data/lib/facebooker/rails/facebook_url_rewriting.rb +60 -0
  91. data/lib/facebooker/rails/helpers/fb_connect.rb +118 -0
  92. data/lib/facebooker/rails/helpers.rb +780 -0
  93. data/lib/facebooker/rails/integration_session.rb +38 -0
  94. data/lib/facebooker/rails/profile_publisher_extensions.rb +42 -0
  95. data/lib/facebooker/rails/publisher.rb +554 -0
  96. data/lib/facebooker/rails/routing.rb +49 -0
  97. data/lib/facebooker/rails/test_helpers.rb +68 -0
  98. data/lib/facebooker/rails/utilities.rb +22 -0
  99. data/lib/facebooker/server_cache.rb +24 -0
  100. data/lib/facebooker/service.rb +102 -0
  101. data/lib/facebooker/session.rb +606 -0
  102. data/lib/facebooker/version.rb +9 -0
  103. data/lib/facebooker.rb +180 -0
  104. data/lib/net/http_multipart_post.rb +123 -0
  105. data/lib/rack/facebook.rb +77 -0
  106. data/lib/tasks/facebooker.rake +18 -0
  107. data/lib/tasks/tunnel.rake +46 -0
  108. data/rails/init.rb +1 -0
  109. data/setup.rb +1585 -0
  110. data/templates/layout.erb +24 -0
  111. data/test/facebooker/adapters_test.rb +96 -0
  112. data/test/facebooker/admin_test.rb +102 -0
  113. data/test/facebooker/batch_request_test.rb +83 -0
  114. data/test/facebooker/data_test.rb +86 -0
  115. data/test/facebooker/logging_test.rb +43 -0
  116. data/test/facebooker/mobile_test.rb +45 -0
  117. data/test/facebooker/model_test.rb +133 -0
  118. data/test/facebooker/models/event_test.rb +15 -0
  119. data/test/facebooker/models/photo_test.rb +16 -0
  120. data/test/facebooker/models/user_test.rb +343 -0
  121. data/test/facebooker/rails/facebook_request_fix_2-3_test.rb +24 -0
  122. data/test/facebooker/rails/facebook_url_rewriting_test.rb +39 -0
  123. data/test/facebooker/rails/publisher_test.rb +481 -0
  124. data/test/facebooker/rails_integration_test.rb +1398 -0
  125. data/test/facebooker/server_cache_test.rb +44 -0
  126. data/test/facebooker/session_test.rb +614 -0
  127. data/test/facebooker_test.rb +951 -0
  128. data/test/fixtures/multipart_post_body_with_only_parameters.txt +33 -0
  129. data/test/fixtures/multipart_post_body_with_single_file.txt +38 -0
  130. data/test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt +38 -0
  131. data/test/net/http_multipart_post_test.rb +52 -0
  132. data/test/rack/facebook_test.rb +61 -0
  133. data/test/rails_test_helper.rb +27 -0
  134. data/test/test_helper.rb +74 -0
  135. metadata +232 -0
@@ -0,0 +1,343 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
+ require 'active_support'
3
+
4
+ class Facebooker::UserTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @session = Facebooker::Session.create('apikey', 'secretkey')
8
+ @user = Facebooker::User.new(1234, @session)
9
+ @other_user = Facebooker::User.new(4321, @session)
10
+ ENV['FACEBOOK_CANVAS_PATH'] ='facebook_app_name'
11
+ ENV['FACEBOOK_API_KEY'] = '1234567'
12
+ ENV['FACEBOOK_SECRET_KEY'] = '7654321'
13
+
14
+ @user.friends = [@other_user]
15
+ end
16
+
17
+ def test_has_permission
18
+ expect_http_posts_with_responses(has_app_permission_response_xml)
19
+ assert @user.has_permission?("status_update")
20
+ end
21
+
22
+ def test_can_ask_user_if_he_or_she_is_friends_with_another_user
23
+ assert(@user.friends_with?(@other_user))
24
+ end
25
+
26
+ def test_can_ask_user_if_he_or_she_is_friends_with_another_user_by_user_id
27
+ assert(@user.friends_with?(@other_user.id))
28
+ end
29
+
30
+ def test_does_not_query_facebook_for_uid
31
+ @session.expects(:post).never
32
+ assert_equal 1234, Facebooker::User.new(1234, @session).uid
33
+ end
34
+
35
+ def test_uid_is_always_an_integer
36
+ assert_equal 1234, Facebooker::User.new(:uid => "1234").uid
37
+ assert_equal 1234, Facebooker::User.new(:id => "1234").uid
38
+
39
+ assert_equal 1234, Facebooker::User.new(:uid => "1234").id
40
+ assert_equal 1234, Facebooker::User.new(:id => "1234").id
41
+
42
+ assert_equal 1234, Facebooker::User.new(:uid => "1234").facebook_id
43
+ assert_equal 1234, Facebooker::User.new(:id => "1234").facebook_id
44
+ end
45
+
46
+ def test_cast_to_friend_list_id_with_nil
47
+ assert_nil @user.cast_to_friend_list_id(nil)
48
+ end
49
+ def test_cast_to_friend_list_id_with_integer
50
+ assert_equal 14,@user.cast_to_friend_list_id(14)
51
+ end
52
+ def test_cast_to_friend_list_id_with_string
53
+ @user.expects(:friend_lists).returns([Facebooker::FriendList.new(:flid=>199,:name=>"Work")])
54
+ assert_equal 199,@user.cast_to_friend_list_id("Work")
55
+ end
56
+ def test_cast_to_friend_list_id_with_friend_list
57
+ assert_equal 199,@user.cast_to_friend_list_id(Facebooker::FriendList.new(:flid=>199,:name=>"Work"))
58
+ end
59
+
60
+ def test_cast_to_friend_list_id_with_invalid_string_raises
61
+ @user.expects(:friend_lists).returns([Facebooker::FriendList.new(:flid=>1,:name=>"Not Picked")])
62
+ assert_nil @user.cast_to_friend_list_id("Something")
63
+ fail("No exception raised, Expected Facebooker::Session::InvalidFriendList")
64
+ rescue Facebooker::Session::InvalidFriendList
65
+ nil
66
+ end
67
+
68
+ def test_can_create_from_current_session
69
+ Facebooker::Session.expects(:current).returns("current")
70
+ user=Facebooker::User.new(1)
71
+ assert_equal("current",user.session)
72
+ end
73
+
74
+ def test_raises_when_no_session_bound
75
+ assert_raises(Facebooker::Model::UnboundSessionException) { Facebooker::User.new(1, nil).populate }
76
+ end
77
+
78
+ def test_can_set_mobile_fbml
79
+ @user.expects(:set_profile_fbml).with(nil,"test",nil,nil)
80
+ @user.mobile_fbml="test"
81
+ end
82
+ def test_can_set_profile_action
83
+ @user.expects(:set_profile_fbml).with(nil,nil,"test",nil)
84
+ @user.profile_action="test"
85
+ end
86
+ def test_can_set_profile_fbml
87
+ @user.expects(:set_profile_fbml).with("test",nil,nil,nil)
88
+ @user.profile_fbml="test"
89
+ end
90
+
91
+ def test_can_set_profile_main
92
+ @user.expects(:set_profile_fbml).with(nil,nil,nil,"test")
93
+ @user.profile_main="test"
94
+ end
95
+
96
+ def test_can_call_set_profile_fbml
97
+ @session.expects(:post).with('facebook.profile.setFBML', {:uid=>1234,:profile=>"profile",:profile_action=>"action",:mobile_profile=>"mobile"},false)
98
+ @user.set_profile_fbml("profile","mobile","action")
99
+ end
100
+
101
+ def test_can_call_set_profile_fbml_with_profile_main
102
+ @session.expects(:post).with('facebook.profile.setFBML', {:uid=>1234,:profile=>"profile",:profile_action=>"action",:mobile_profile=>"mobile", :profile_main => 'profile_main'},false)
103
+ @user.set_profile_fbml("profile","mobile","action",'profile_main')
104
+ end
105
+
106
+ def test_can_get_profile_photos
107
+ @user.expects(:profile_photos)
108
+ @user.profile_photos
109
+ end
110
+
111
+ def test_can_set_cookie
112
+ @user.expects(:set_cookie).with('name', 'value')
113
+ @user.set_cookie('name', 'value')
114
+ end
115
+
116
+ def test_can_get_cookies
117
+ @user.expects(:get_cookies).with('name')
118
+ @user.get_cookies('name')
119
+ end
120
+
121
+ def test_get_profile_photos
122
+ @user = Facebooker::User.new(548871286, @session)
123
+ expect_http_posts_with_responses(example_profile_photos_get_xml)
124
+ photos = @user.profile_photos
125
+ assert_equal "2357384227378429949", photos.first.aid
126
+ end
127
+
128
+ def test_publish_to
129
+ @user = Facebooker::User.new(548871286, @session)
130
+ expect_http_posts_with_responses(example_profile_publish_to_get_xml)
131
+ @user.publish_to(@other_user, :message => 'i love you man')
132
+ end
133
+
134
+ def test_can_send_email
135
+ @user.expects(:send_email).with("subject", "body text")
136
+ @user.send_email("subject", "body text")
137
+
138
+ @user.expects(:send_email).with("subject", nil, "body fbml")
139
+ @user.send_email("subject", nil, "body fbml")
140
+ end
141
+
142
+ def test_doesnt_post_to_facebook_when_assigning_status
143
+ @session.expects(:post).never
144
+ @user.status="my status"
145
+ end
146
+ def test_can_set_status_with_string
147
+ @session.expects(:post).with('facebook.users.setStatus', {:status=>"my status",:status_includes_verb=>1, :uid => @user.uid}, false)
148
+ @user.set_status("my status")
149
+ end
150
+
151
+ def test_get_events
152
+ @user = Facebooker::User.new(9507801, @session)
153
+ expect_http_posts_with_responses(example_events_get_xml)
154
+ events = @user.events
155
+ assert_equal 29511517904, events.first.eid
156
+ end
157
+
158
+ def test_events_caching_honors_params
159
+ @user = Facebooker::User.new(9507801, @session)
160
+ @session.expects(:post).returns([{:eid=>1}])
161
+ assert_equal 1,@user.events.first.eid
162
+ @session.expects(:post).returns([{:eid=>2}])
163
+ assert_equal 2,@user.events(:start_time=>1.day.ago).first.eid
164
+ @session.expects(:post).never
165
+ assert_equal 1,@user.events.first.eid
166
+ end
167
+
168
+
169
+ def test_to_s
170
+ assert_equal("1234",@user.to_s)
171
+ end
172
+
173
+ def test_equality_with_same_id
174
+ assert_equal @user, @user.dup
175
+ assert_equal @user, Facebooker::User.new(:id => @user.id)
176
+ end
177
+
178
+ def test_not_equal_to_differnt_class
179
+ assert_not_equal @user, flexmock(:id => @user.id)
180
+ end
181
+
182
+ def test_hash_email
183
+ assert_equal "4228600737_c96da02bba97aedfd26136e980ae3761", Facebooker::User.hash_email("mary@example.com")
184
+ end
185
+ def test_hash_email_not_normalized
186
+ assert_equal "4228600737_c96da02bba97aedfd26136e980ae3761", Facebooker::User.hash_email(" MaRy@example.com ")
187
+ end
188
+
189
+ def test_register_with_array
190
+ expect_http_posts_with_responses(register_response_xml)
191
+ assert_equal ["4228600737_c96da02bba97aedfd26136e980ae3761"],Facebooker::User.register([{:email=>"mary@example.com",:account_id=>1}])
192
+ end
193
+
194
+ def test_unregister_with_array
195
+ expect_http_posts_with_responses(unregister_response_xml)
196
+ assert_equal ["4228600737_c96da02bba97aedfd26136e980ae3761"],Facebooker::User.unregister(["4228600737_c96da02bba97aedfd26136e980ae3761"])
197
+ end
198
+
199
+ def test_unregister_emails_with_array
200
+ expect_http_posts_with_responses(unregister_response_xml)
201
+ assert_equal ["mary@example.com"],Facebooker::User.unregister_emails(["mary@example.com"])
202
+ end
203
+
204
+ def test_register_with_array_raises_if_not_all_success
205
+ expect_http_posts_with_responses(register_response_xml)
206
+ assert_equal ["4228600737_c96da02bba97aedfd26136e980ae3761"],Facebooker::User.register([{:email=>"mary@example.com",:account_id=>1},{:email=>"mike@example.com",:account_id=>2}])
207
+ fail "Should have raised Facebooker::Session::UserRegistrationFailed"
208
+ rescue Facebooker::Session::UserRegistrationFailed => e
209
+ assert_equal({:email=>"mike@example.com",:account_id=>2},e.failed_users.first)
210
+ end
211
+
212
+ def test_unregister_with_array_raises_if_not_all_success
213
+ expect_http_posts_with_responses(unregister_response_xml)
214
+ assert_equal ["4228600737_c96da02bba97aedfd26136e980ae3761"],Facebooker::User.unregister(["4228600737_c96da02bba97aedfd26136e980ae3761","3587916587_791214eb452bf4de30e957d65a0234d4"])
215
+ fail "Should have raised Facebooker::Session::UserUnRegistrationFailed"
216
+ rescue Facebooker::Session::UserUnRegistrationFailed => e
217
+ assert_equal("3587916587_791214eb452bf4de30e957d65a0234d4",e.failed_users.first)
218
+ end
219
+
220
+ def test_unregister_emails_with_array_raises_if_not_all_success
221
+ expect_http_posts_with_responses(unregister_response_xml)
222
+ assert_equal ["mary@example.com"],Facebooker::User.unregister_emails(["mary@example.com","mike@example.com"])
223
+ fail "Should have raised Facebooker::Session::UserUnRegistrationFailed"
224
+ rescue Facebooker::Session::UserUnRegistrationFailed => e
225
+ assert_equal("mike@example.com",e.failed_users.first)
226
+ end
227
+
228
+
229
+ def test_get_locale
230
+ @user = Facebooker::User.new(9507801, @session)
231
+ expect_http_posts_with_responses(example_users_get_info_xml)
232
+ assert_equal "en_US", @user.locale
233
+ end
234
+
235
+ def test_get_profile_url
236
+ @user = Facebooker::User.new(8055, @session)
237
+ expect_http_posts_with_responses(example_users_get_info_xml)
238
+ assert_equal "http://www.facebook.com/profile.php?id=8055", @user.profile_url
239
+ end
240
+
241
+ private
242
+ def example_profile_photos_get_xml
243
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
244
+ <photos_get_response xmlns=\"http://api.facebook.com/1.0/\"
245
+ xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
246
+ xsi:schemaLocation=\"http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd\" list=\"true\">
247
+ <photo>
248
+ <pid>34585991612804</pid>
249
+ <aid>2357384227378429949</aid>
250
+ <owner>1240077</owner>
251
+ <src>http://ip002.facebook.com/v11/135/18/8055/s1240077_30043524_2020.jpg</src>
252
+ <src_big>http://ip002.facebook.com/v11/135/18/8055/n1240077_30043524_2020.jpg</src_big>
253
+ <src_small>http://ip002.facebook.com/v11/135/18/8055/t1240077_30043524_2020.jpg</src_small>
254
+ <link>http://www.facebook.com/photo.php?pid=30043524&id=8055</link>
255
+ <caption>From The Deathmatch (Trailer) (1999)</caption>
256
+ <created>1132553361</created>
257
+ </photo>
258
+ <photo>
259
+ <pid>34585991612805</pid>
260
+ <aid>2357384227378429949</aid>
261
+ <owner>1240077</owner>
262
+ <src>http://ip002.facebook.com/v11/135/18/8055/s1240077_30043525_2184.jpg</src>
263
+ <src_big>http://ip002.facebook.com/v11/135/18/8055/n1240077_30043525_2184.jpg</src_big>
264
+ <src_small>http://ip002.facebook.com/v11/135/18/8055/t1240077_30043525_2184.jpg</src_small>
265
+ <link>http://www.facebook.com/photo.php?pid=30043525&id=8055</link>
266
+ <caption>Mexico City, back cover of the CYHS Student Underground 1999.</caption>
267
+ <created>1132553362</created>
268
+ </photo>
269
+ </photos_get_response>"
270
+ end
271
+
272
+ def example_events_get_xml
273
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
274
+ <events_get_response xmlns=\"http://api.facebook.com/1.0/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd\" list=\"true\">
275
+ <event>
276
+ <eid>29511517904</eid>
277
+ <name>PUMA SALE</name>
278
+ <tagline/>
279
+ <nid>0</nid>
280
+ <pic>http://profile.ak.facebook.com/object3/370/66/s29511517904_6952.jpg</pic>
281
+ <pic_big>http://profile.ak.facebook.com/object3/370/66/n29511517904_6952.jpg</pic_big>
282
+ <pic_small>http://profile.ak.facebook.com/object3/370/66/t29511517904_6952.jpg</pic_small>
283
+ <host>PUMA</host>
284
+ <description>PUMA SALE</description>
285
+ <event_type>Education</event_type>
286
+ <event_subtype>Study Group</event_subtype>
287
+ <start_time>1212166800</start_time>
288
+ <end_time>1212364800</end_time>
289
+ <creator>1234261165</creator>
290
+ <update_time>1209768148</update_time>
291
+ <location>PUMA LOT</location>
292
+ <venue>
293
+ <street>5 LYBERTY WAY</street>
294
+ <city>Westford</city>
295
+ <state>Massachusetts</state>
296
+ <country>United States</country>
297
+ <latitude>42.5792</latitude>
298
+ <longitude>-71.4383</longitude>
299
+ </venue>
300
+ </event>
301
+ </events_get_response>"
302
+ end
303
+
304
+ def example_users_get_info_xml
305
+ <<-XML
306
+ <?xml version="1.0" encoding="UTF-8"?> <users_getInfo_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true"> <user> <uid>8055</uid> <about_me>This field perpetuates the glorification of the ego. Also, it has a character limit.</about_me> <activities>Here: facebook, etc. There: Glee Club, a capella, teaching.</activities> <affiliations list="true"> <affiliation> <nid>50453093</nid> <name>Facebook Developers</name> <type>work</type> <status/> <year/> </affiliation> </affiliations> <birthday>November 3</birthday> <books>The Brothers K, GEB, Ken Wilber, Zen and the Art, Fitzgerald, The Emporer's New Mind, The Wonderful Story of Henry Sugar</books> <current_location> <city>Palo Alto</city> <state>CA</state> <country>United States</country> <zip>94303</zip> </current_location> <education_history list="true"> <education_info> <name>Harvard</name> <year>2003</year> <concentrations list="true"> <concentration>Applied Mathematics</concentration> <concentration>Computer Science</concentration> </concentrations> </education_info> </education_history> <first_name>Dave</first_name> <hometown_location> <city>York</city> <state>PA</state> <country>United States</country> </hometown_location> <hs_info> <hs1_name>Central York High School</hs1_name> <hs2_name/> <grad_year>1999</grad_year> <hs1_id>21846</hs1_id> <hs2_id>0</hs2_id> </hs_info> <is_app_user>1</is_app_user> <has_added_app>1</has_added_app> <interests>coffee, computers, the funny, architecture, code breaking,snowboarding, philosophy, soccer, talking to strangers</interests> <last_name>Fetterman</last_name> <locale>en_US</locale> <meeting_for list="true"> <seeking>Friendship</seeking> </meeting_for> <meeting_sex list="true"> <sex>female</sex> </meeting_sex> <movies>Tommy Boy, Billy Madison, Fight Club, Dirty Work, Meet the Parents, My Blue Heaven, Office Space </movies> <music>New Found Glory, Daft Punk, Weezer, The Crystal Method, Rage, the KLF, Green Day, Live, Coldplay, Panic at the Disco, Family Force 5</music> <name>Dave Fetterman</name> <notes_count>0</notes_count> <pic>http://photos-055.facebook.com/ip007/profile3/1271/65/s8055_39735.jpg</pic> <pic_big>http://photos-055.facebook.com/ip007/profile3/1271/65/n8055_39735.jpg</pic_big> <pic_small>http://photos-055.facebook.com/ip007/profile3/1271/65/t8055_39735.jpg</pic_small> <pic_square>http://photos-055.facebook.com/ip007/profile3/1271/65/q8055_39735.jpg</pic_square> <political>Moderate</political> <profile_update_time>1170414620</profile_update_time> <profile_url>http://www.facebook.com/profile.php?id=8055</profile_url> <quotes/> <relationship_status>In a Relationship</relationship_status> <religion/> <sex>male</sex> <significant_other_id xsi:nil="true"/> <status> <message>Fast Company, November issue, page 84</message> <time>1193075616</time> </status> <timezone>-8</timezone> <tv>cf. Bob Trahan</tv> <wall_count>121</wall_count> <work_history list="true"> <work_info> <location> <city>Palo Alto</city> <state>CA</state> <country>United States</country> </location> <company_name>Facebook</company_name> <position>Software Engineer</position> <description>Tech Lead, Facebook Platform</description> <start_date>2006-01</start_date> <end_date/> </work_info> </work_history> </user> </users_getInfo_response>
307
+ XML
308
+ end
309
+
310
+ def register_response_xml
311
+ <<-XML
312
+ <?xml version="1.0" encoding="UTF-8"?>
313
+ <connect_registerUsers_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/facebook.xsd" list="true">
314
+ <connect_registerUsers_response_elt>4228600737_c96da02bba97aedfd26136e980ae3761</connect_registerUsers_response_elt>
315
+ </connect_registerUsers_response>
316
+ XML
317
+ end
318
+
319
+ def unregister_response_xml
320
+ <<-XML
321
+ <?xml version="1.0" encoding="UTF-8"?>
322
+ <connect_unregisterUsers_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/facebook.xsd" list="true">
323
+ <connect_unregisterUsers_response_elt>4228600737_c96da02bba97aedfd26136e980ae3761</connect_unregisterUsers_response_elt>
324
+ </connect_unregisterUsers_response>
325
+ XML
326
+ end
327
+
328
+ def has_app_permission_response_xml
329
+ <<-XML
330
+ <?xml version="1.0" encoding="UTF-8"?>
331
+ <users_hasAppPermission_response xmlns="http://api.facebook.com/1.0/"
332
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
333
+ xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">1</users_hasAppPermission_response>
334
+ XML
335
+ end
336
+
337
+ def example_profile_publish_to_get_xml
338
+ <<-eoxml
339
+ <?xml version="1.0" encoding="UTF-8"?>
340
+ <stream_publish_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">703826862_78463536862</stream_publish_response>
341
+ eoxml
342
+ end
343
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../rails_test_helper')
2
+
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
+ else
11
+ @request = ActionController::TestRequest.new
12
+ @request.query_parameters[:fb_sig_is_ajax] = "1"
13
+ end
14
+ end
15
+
16
+ def test_xhr_when_is_ajax
17
+ assert @request.xhr?
18
+ end
19
+
20
+ def test_xml_http_request_when_is_ajax
21
+ assert @request.xml_http_request?
22
+ end
23
+
24
+ end
@@ -0,0 +1,39 @@
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
+ end