mmangino-facebooker 1.0.15 → 1.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/Manifest.txt +27 -16
  2. data/Rakefile +1 -1
  3. data/generators/facebook/templates/public/javascripts/facebooker.js +1 -8
  4. data/init.rb +3 -1
  5. data/lib/facebooker.rb +2 -1
  6. data/lib/facebooker/adapters/facebook_adapter.rb +4 -0
  7. data/lib/facebooker/mock/service.rb +50 -0
  8. data/lib/facebooker/mock/session.rb +18 -0
  9. data/lib/facebooker/model.rb +2 -2
  10. data/lib/facebooker/models/applicationrestrictions.rb +10 -0
  11. data/lib/facebooker/models/user.rb +33 -1
  12. data/lib/facebooker/models/video.rb +9 -0
  13. data/lib/facebooker/parser.rb +8 -1
  14. data/lib/facebooker/rails/controller.rb +15 -3
  15. data/lib/facebooker/rails/cucumber.rb +30 -0
  16. data/lib/facebooker/rails/cucumber/world.rb +46 -0
  17. data/lib/facebooker/rails/helpers.rb +203 -122
  18. data/lib/facebooker/rails/helpers/fb_connect.rb +25 -3
  19. data/lib/facebooker/rails/integration_session.rb +40 -0
  20. data/lib/facebooker/rails/publisher.rb +15 -2
  21. data/lib/facebooker/rails/test_helpers.rb +11 -26
  22. data/lib/facebooker/service.rb +6 -3
  23. data/lib/facebooker/session.rb +19 -1
  24. data/lib/tasks/tunnel.rake +2 -2
  25. data/test/{adapters_test.rb → facebooker/adapters_test.rb} +2 -4
  26. data/test/{facebook_admin_test.rb → facebooker/admin_test.rb} +2 -2
  27. data/test/{batch_request_test.rb → facebooker/batch_request_test.rb} +3 -2
  28. data/test/{facebook_data_test.rb → facebooker/data_test.rb} +2 -2
  29. data/test/{logging_test.rb → facebooker/logging_test.rb} +3 -3
  30. data/test/{model_test.rb → facebooker/model_test.rb} +2 -4
  31. data/test/{event_test.rb → facebooker/models/event_test.rb} +2 -2
  32. data/test/{user_test.rb → facebooker/models/user_test.rb} +10 -5
  33. data/test/{publisher_test.rb → facebooker/rails/publisher_test.rb} +12 -18
  34. data/test/{rails_integration_test.rb → facebooker/rails_integration_test.rb} +126 -115
  35. data/test/{facebook_cache_test.rb → facebooker/server_cache_test.rb} +1 -1
  36. data/test/{session_test.rb → facebooker/session_test.rb} +3 -2
  37. data/test/facebooker_test.rb +19 -1
  38. data/test/{http_multipart_post_test.rb → net/http_multipart_post_test.rb} +2 -4
  39. data/test/rails_test_helper.rb +11 -0
  40. data/test/test_helper.rb +2 -2
  41. metadata +28 -17
  42. data/lib/facebooker/rails/facebook_asset_path.rb +0 -18
@@ -33,9 +33,31 @@ module Facebooker
33
33
  javascript_tag init_string
34
34
  end
35
35
  end
36
-
37
- def fb_login_button(callback=nil)
38
- content_tag("fb:login-button",nil,(callback.nil? ? {} : {:onlogin=>callback}))
36
+
37
+ # Render an <fb:login-button> element
38
+ #
39
+ # ==== Examples
40
+ #
41
+ # <%= fb_login_button%>
42
+ # => <fb:login-button></fb:login-button>
43
+ #
44
+ # Specifying a javascript callback
45
+ #
46
+ # <%= fb_login_button 'update_something();'%>
47
+ # => <fb:login-button onlogin='update_something();'></fb:login-button>
48
+ #
49
+ # Adding options <em>See:</em> http://wiki.developers.facebook.com/index.php/Fb:login-button
50
+ #
51
+ # <%= fb_login_button 'update_something();', :size => :small, :background => :dark%>
52
+ # => <fb:login-button background='dark' onlogin='update_something();' size='small'></fb:login-button>
53
+ #
54
+ def fb_login_button(*args)
55
+
56
+ callback = args.first
57
+ options = args.second || {}
58
+ options.merge!(:onlogin=>callback)if callback
59
+
60
+ content_tag("fb:login-button",nil, options)
39
61
  end
40
62
  def fb_login_and_redirect(url)
41
63
  js = update_page do |page|
@@ -0,0 +1,40 @@
1
+ require 'action_controller/integration'
2
+
3
+ class Facebooker::Rails::IntegrationSession < ActionController::Integration::Session
4
+ include Facebooker::Rails::TestHelpers
5
+ attr_accessor :default_request_params, :canvas
6
+
7
+ def process(method, path, parameters = nil, headers = nil)
8
+ if canvas
9
+ parameters = facebook_params(@default_request_params.merge(parameters || {}))
10
+ end
11
+ super method, path, parameters, headers
12
+ end
13
+
14
+ def reset!
15
+ self.default_request_params = {:fb_sig_in_canvas => '1'}.with_indifferent_access
16
+ self.canvas = true
17
+ super
18
+ end
19
+
20
+ def get_with_canvas(path, parameters = nil, headers = nil)
21
+ if canvas
22
+ post path, (parameters || {}).merge('fb_sig_request_method' => 'GET'), headers
23
+ else
24
+ get_without_canvas path, parameters, headers
25
+ end
26
+ end
27
+ alias_method_chain :get, :canvas
28
+
29
+ %w(put delete).each do |method|
30
+ define_method "#{method}_with_canvas" do |*args|
31
+ if canvas
32
+ path, parameters, headers = *args
33
+ post path, (parameters || {}).merge('_method' => method.upcase), headers
34
+ else
35
+ send "#{method}_without_canvas", *args
36
+ end
37
+ end
38
+ alias_method_chain method, :canvas
39
+ end
40
+ end
@@ -312,10 +312,23 @@ module Facebooker
312
312
  end
313
313
  end
314
314
 
315
- def image(src,target)
316
- {:src=>image_path(src),:href=> target.respond_to?(:to_str) ? target : url_for(target)}
315
+ # work around the fact that facebook cares about the order of the keys in the hash
316
+ class ImageHolder
317
+ attr_accessor :src,:href
318
+ def initialize(src,href)
319
+ self.src=src
320
+ self.href=href
321
+ end
322
+
323
+ def to_json
324
+ "{\"src\":#{src.to_json}, \"href\":#{href.to_json}}"
325
+ end
317
326
  end
318
327
 
328
+ def image(src,target)
329
+ ImageHolder.new(image_path(src),target.respond_to?(:to_str) ? target : url_for(target))
330
+ end
331
+
319
332
  def action_link(text,target)
320
333
  {:text=>text, :href=>target}
321
334
  end
@@ -22,25 +22,22 @@ module Facebooker
22
22
  def facebook_put(path,params={})
23
23
  facebook_verb(:put,path,params)
24
24
  end
25
+
25
26
  def facebook_delete(path,params={})
26
27
  facebook_verb(:delete,path,params)
27
28
  end
28
29
 
29
30
  def facebook_verb(verb,path, params={})
30
- params = default_facebook_parameters.update(params)
31
- params.merge!(:fb_sig => generate_signature(facebook_params(params).stringify_keys))
32
-
33
- params = params.update(:canvas => true).update(params)
34
- send verb, path, params
31
+ send verb, path, facebook_params(params).reverse_merge(:canvas => true)
35
32
  end
36
33
 
37
- def facebook_parameters(overrides=nil)
38
- overrides ||= {}
39
- params = default_facebook_parameters.merge(overrides)
40
- params.merge(:fb_sig => generate_signature(params.stringify_keys))
34
+ def facebook_params(params = {})
35
+ params = default_facebook_parameters.with_indifferent_access.merge(params || {})
36
+ sig = generate_signature params
37
+ params.merge(:fb_sig => sig)
41
38
  end
42
39
 
43
- private
40
+ private
44
41
 
45
42
  def default_facebook_parameters
46
43
  {
@@ -53,28 +50,16 @@ module Facebooker
53
50
  }
54
51
  end
55
52
 
56
- def facebook_params(params)
57
- params.inject({}) do |fb_params, pair|
58
- unless pair.first.to_s.match(/^fb_sig_/).nil?
59
- fb_params[pair.first] = pair.last
60
- end
61
- fb_params
62
- end
63
- end
64
-
65
53
  def facebook_redirect_url
66
54
  match = @response.body.match(/<fb:redirect url="([^"]+)"/)
67
55
  match.nil? ? nil : match.captures[0]
68
56
  end
69
57
 
70
- def generate_signature(facebook_params)
71
- facebook_sig_params = facebook_params.inject({}) do |collection, pair|
72
- collection[pair.first.sub(/^fb_sig_/, '')] = pair.last
73
- collection
58
+ def generate_signature(params)
59
+ facebook_params = params.select { |param,_| param =~ /^fb_sig_/ }.map do |param, value|
60
+ [param.sub(/^fb_sig_/, ''), value].join('=')
74
61
  end
75
-
76
- raw_string = facebook_sig_params.map{ |*args| args.join('=') }.sort.join
77
- Digest::MD5.hexdigest([raw_string, Facebooker::Session.secret_key].join)
62
+ Digest::MD5.hexdigest([facebook_params.sort.join, Facebooker::Session.secret_key].join)
78
63
  end
79
64
 
80
65
  end
@@ -58,12 +58,15 @@ module Facebooker
58
58
  end
59
59
 
60
60
  def post_file(params)
61
- Parser.parse(params[:method], post_multipart_form(url, params))
61
+ service_url = url(params.delete(:base))
62
+ result = post_multipart_form(service_url, params)
63
+ Parser.parse(params[:method], result)
62
64
  end
63
65
 
64
66
  private
65
- def url
66
- URI.parse('http://'+ @api_base + @api_path)
67
+ def url(base = nil)
68
+ base ||= @api_base
69
+ URI.parse('http://'+ base + @api_path)
67
70
  end
68
71
 
69
72
  # Net::HTTP::MultipartPostFile
@@ -94,6 +94,19 @@ module Facebooker
94
94
  "#{Facebooker.install_url_base(@api_key)}#{install_url_optional_parameters(options)}"
95
95
  end
96
96
 
97
+ # The url to get user to approve extended permissions
98
+ # http://wiki.developers.facebook.com/index.php/Extended_permission
99
+ #
100
+ # permissions:
101
+ # * email
102
+ # * offline_access
103
+ # * status_update
104
+ # * photo_upload
105
+ # * video_upload
106
+ # * create_listing
107
+ # * create_event
108
+ # * rsvp_event
109
+ # * sms
97
110
  def permission_url(permission,options={})
98
111
  options = default_login_url_options.merge(options)
99
112
  "http://#{Facebooker.www_server_base_url}/authorize.php?api_key=#{@api_key}&v=1.0&ext_perm=#{permission}#{install_url_optional_parameters(options)}"
@@ -176,6 +189,10 @@ module Facebooker
176
189
  user
177
190
  when 'photo'
178
191
  Photo.from_hash(hash)
192
+ when 'page'
193
+ Page.from_hash(hash)
194
+ when 'page_admin'
195
+ Page.from_hash(hash)
179
196
  when 'event_member'
180
197
  Event::Attendance.from_hash(hash)
181
198
  else
@@ -492,10 +509,11 @@ module Facebooker
492
509
  end
493
510
 
494
511
  def post_file(method, params = {})
512
+ base = params.delete(:base)
495
513
  Logging.log_fb_api(method, params) do
496
514
  add_facebook_params(params, method)
497
515
  @session_key && params[:session_key] ||= @session_key
498
- service.post_file(params.merge(:sig => signature_for(params.reject{|key, value| key.nil?})))
516
+ service.post_file(params.merge(:base => base, :sig => signature_for(params.reject{|key, value| key.nil?})))
499
517
  end
500
518
  end
501
519
 
@@ -7,13 +7,13 @@ namespace :facebooker do
7
7
  desc "Create a reverse ssh tunnel from a public server to a private development server."
8
8
  task :start => [ :environment, :config ] do
9
9
  puts @notification
10
- exec @ssh_command
10
+ system @ssh_command
11
11
  end
12
12
 
13
13
  desc "Create a reverse ssh tunnel in the background. Requires ssh keys to be setup."
14
14
  task :background_start => [ :environment, :config ] do
15
15
  puts @notification
16
- exec "#{@ssh_command} > /dev/null 2>&1 &"
16
+ system "#{@ssh_command} > /dev/null 2>&1 &"
17
17
  end
18
18
 
19
19
  # Adapted from Evan Weaver: http://blog.evanweaver.com/articles/2007/07/13/developing-a-facebook-app-locally/
@@ -1,8 +1,6 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require 'facebooker'
3
- class SessionTest < Test::Unit::TestCase
4
-
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
5
2
 
3
+ class Facebooker::SessionTest < Test::Unit::TestCase
6
4
  def setup
7
5
  ENV['FACEBOOK_API_KEY'] = '1234567'
8
6
  ENV['FACEBOOK_SECRET_KEY'] = '7654321'
@@ -1,6 +1,6 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
2
 
3
- class FacebookAdminTest < Test::Unit::TestCase
3
+ class Facebooker::AdminTest < Test::Unit::TestCase
4
4
  def setup
5
5
  @session = Facebooker::Session.create('apikey', 'secretkey')
6
6
  Facebooker.use_curl=false
@@ -1,5 +1,6 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- class BatchRequestTest < Test::Unit::TestCase
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class Facebooker::BatchRequestTest < Test::Unit::TestCase
3
4
 
4
5
  def setup
5
6
  @proc_called=false
@@ -1,6 +1,6 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
2
 
3
- class FacebookDataTest < Test::Unit::TestCase
3
+ class Facebooker::DataTest < Test::Unit::TestCase
4
4
  def setup
5
5
  @session = Facebooker::Session.create('apikey', 'secretkey')
6
6
  #make sure we use net::http since that's what the tests expect
@@ -1,7 +1,7 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+ require 'logger'
2
3
 
3
-
4
- class LoggingTest < Test::Unit::TestCase
4
+ class Facebooker::LoggingTest < Test::Unit::TestCase
5
5
  def setup
6
6
  super
7
7
  Facebooker.logger = Logger.new(STDERR)
@@ -1,8 +1,6 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require 'rubygems'
3
- require 'flexmock/test_unit'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
4
2
 
5
- class TestFacebooker < Test::Unit::TestCase
3
+ class Facebooker::ModelTest < Test::Unit::TestCase
6
4
 
7
5
  class ComplexThing
8
6
  include Facebooker::Model
@@ -1,6 +1,6 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
2
 
3
- class EventTest< Test::Unit::TestCase
3
+ class Facebooker::EventTest < Test::Unit::TestCase
4
4
  def test_attendance_will_query_for_event_when_asked_for_full_event_object
5
5
  session = flexmock("a session object")
6
6
  eid = 123
@@ -1,8 +1,7 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require 'rubygems'
3
- require 'flexmock/test_unit'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
+ require 'active_support'
4
3
 
5
- class UserTest < Test::Unit::TestCase
4
+ class Facebooker::UserTest < Test::Unit::TestCase
6
5
 
7
6
  def setup
8
7
  @session = Facebooker::Session.create('apikey', 'secretkey')
@@ -165,8 +164,13 @@ class UserTest < Test::Unit::TestCase
165
164
  assert_equal("1234",@user.to_s)
166
165
  end
167
166
 
168
- def test_equality
167
+ def test_equality_with_same_id
169
168
  assert_equal @user, @user.dup
169
+ assert_equal @user, Facebooker::User.new(:id => @user.id)
170
+ end
171
+
172
+ def test_not_equal_to_differnt_class
173
+ assert_not_equal @user, flexmock(:id => @user.id)
170
174
  end
171
175
 
172
176
  def test_hash_email
@@ -287,4 +291,5 @@ class UserTest < Test::Unit::TestCase
287
291
  xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">1</users_hasAppPermission_response>
288
292
  XML
289
293
  end
294
+
290
295
  end
@@ -1,15 +1,4 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require 'rubygems'
3
- require 'flexmock/test_unit'
4
- require 'action_controller'
5
- require 'action_controller/test_process'
6
- require 'active_record'
7
- require File.dirname(__FILE__)+'/../init'
8
- require 'facebooker/rails/controller'
9
- require 'facebooker/rails/helpers/fb_connect'
10
- require 'facebooker/rails/helpers'
11
- require 'facebooker/rails/publisher'
12
-
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../rails_test_helper')
13
2
 
14
3
  module SymbolHelper
15
4
  def symbol_helper_loaded
@@ -143,7 +132,7 @@ class TestPublisher < Facebooker::Rails::Publisher
143
132
 
144
133
  end
145
134
 
146
- class FacebookTemplateTest < Test::Unit::TestCase
135
+ class Facebooker::Rails::Publisher::FacebookTemplateTest < Test::Unit::TestCase
147
136
  FacebookTemplate = Facebooker::Rails::Publisher::FacebookTemplate
148
137
 
149
138
  def setup
@@ -207,7 +196,7 @@ class FacebookTemplateTest < Test::Unit::TestCase
207
196
  end
208
197
  end
209
198
 
210
- class PublisherTest < Test::Unit::TestCase
199
+ class Facebooker::Rails::Publisher::PublisherTest < Test::Unit::TestCase
211
200
  FacebookTemplate = Facebooker::Rails::Publisher::FacebookTemplate
212
201
 
213
202
  def setup
@@ -410,12 +399,17 @@ class PublisherTest < Test::Unit::TestCase
410
399
 
411
400
  def test_image_urls
412
401
  Facebooker.expects(:facebook_path_prefix).returns("/mike")
413
- assert_equal({:src => '/images/image.png', :href => 'raw_string' },
414
- TestPublisher.new.image('image.png', 'raw_string'))
415
- assert_equal({:src => '/images/image.png', :href => 'http://apps.facebook.com/mike/pokes/do/1' },
416
- TestPublisher.new.image('image.png', {:controller => :pokes, :action => :do, :id => 1}))
402
+ string_image = TestPublisher.new.image('image.png', 'raw_string')
403
+ assert_equal('/images/image.png',string_image.src)
404
+ assert_equal('raw_string',string_image.href)
405
+ route_image = TestPublisher.new.image('image.png', {:controller => :pokes, :action => :do, :id => 1})
406
+ assert_equal('http://apps.facebook.com/mike/pokes/do/1',route_image.href)
417
407
  end
418
408
 
409
+ def test_image_to_json_puts_src_first
410
+ string_image = TestPublisher.new.image('image.png', 'raw_string')
411
+ assert_equal "{\"src\":\"/images/image.png\", \"href\":\"raw_string\"}",string_image.to_json
412
+ end
419
413
  def test_action_link
420
414
  assert_equal({:text=>"text", :href=>"href"}, TestPublisher.new.action_link("text","href"))
421
415
  end
@@ -1,14 +1,5 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../rails_test_helper')
2
2
  begin
3
- require 'action_controller'
4
- require 'action_controller/test_process'
5
- require 'facebooker/rails/controller'
6
- require 'facebooker/rails/helpers/fb_connect'
7
- require 'facebooker/rails/helpers'
8
- require 'facebooker/rails/facebook_form_builder'
9
- require File.dirname(__FILE__)+'/../init'
10
- require 'mocha'
11
-
12
3
  ActionController::Routing::Routes.draw do |map|
13
4
  map.connect '', :controller=>"facebook",:conditions=>{:canvas=>true}
14
5
  map.connect '', :controller=>"plain_old_rails"
@@ -41,6 +32,7 @@ begin
41
32
  ensure_authenticated_to_facebook
42
33
  before_filter :ensure_has_status_update
43
34
  before_filter :ensure_has_photo_upload
35
+ before_filter :ensure_has_video_upload
44
36
  before_filter :ensure_has_create_listing
45
37
  def index
46
38
  render :text => 'score!'
@@ -144,6 +136,11 @@ begin
144
136
  end
145
137
  end
146
138
 
139
+ class Test::Unit::TestCase
140
+ include Facebooker::Rails::TestHelpers
141
+ end
142
+
143
+
147
144
  # you can't use asset_recognize, because it can't pass parameters in to the requests
148
145
  class UrlRecognitionTests < Test::Unit::TestCase
149
146
  def test_detects_in_canvas
@@ -195,36 +192,28 @@ begin
195
192
  end
196
193
 
197
194
  def test_url_for_links_to_callback_if_canvas_is_false_and_in_canvas
198
- get :link_test, example_rails_params
195
+ get :link_test
199
196
  assert_match /test.host/,@response.body
200
197
  end
201
198
 
202
199
  def test_named_route_doesnt_include_canvas_path_when_not_in_canvas
203
- get :named_route_test, example_rails_params
200
+ get :named_route_test
204
201
  assert_equal "http://test.host/comments",@response.body
205
202
  end
206
203
  def test_named_route_includes_canvas_path_when_in_canvas
207
- get :named_route_test, example_rails_params_including_fb
204
+ get :named_route_test, facebook_params
208
205
  assert_equal "http://apps.facebook.com/facebook_app_name/comments",@response.body
209
206
  end
210
207
 
211
208
  def test_named_route_doesnt_include_canvas_path_when_in_canvas_with_canvas_equals_false
212
- get :canvas_false_test, example_rails_params_including_fb
209
+ get :canvas_false_test, facebook_params
213
210
  assert_equal "http://test.host/comments",@response.body
214
211
  end
215
212
  def test_named_route_does_include_canvas_path_when_not_in_canvas_with_canvas_equals_true
216
- get :canvas_true_test, example_rails_params
213
+ get :canvas_true_test
217
214
  assert_equal "http://apps.facebook.com/facebook_app_name/comments",@response.body
218
215
  end
219
216
 
220
- private
221
- def example_rails_params
222
- { "action"=>"index", "controller"=>"plain_old_rails_controller" }
223
- end
224
- def example_rails_params_including_fb(options={})
225
- {"fb_sig_time"=>"1186588275.5988", "fb_sig"=>"8d9e9dd2cb0742a5a2bfe35563134585", "action"=>"index", "fb_sig_in_canvas"=>"1", "fb_sig_session_key"=>"c452b5d5d60cbd0a0da82021-744961110", "controller"=>"controller_which_requires_facebook_authentication", "fb_sig_expires"=>"0", "fb_sig_friends"=>"417358,702720,1001170,1530839,3300204,3501584,6217936,9627766,9700907,22701786,33902768,38914148,67400422,135301144,157200364,500103523,500104930,500870819,502149612,502664898,502694695,502852293,502985816,503254091,504510130,504611551,505421674,509229747,511075237,512548373,512830487,517893818,517961878,518890403,523589362,523826914,525812984,531555098,535310228,539339781,541137089,549405288,552706617,564393355,564481279,567640762,568091401,570201702,571469972,573863097,574415114,575543081,578129427,578520568,582262836,582561201,586550659,591631962,592318318,596269347,596663221,597405464,599764847,602995438,606661367,609761260,610544224,620049417,626087078,628803637,632686250,641422291,646763898,649678032,649925863,653288975,654395451,659079771,661794253,665861872,668960554,672481514,675399151,678427115,685772348,686821151,687686894,688506532,689275123,695551670,710631572,710766439,712406081,715741469,718976395,719246649,722747311,725327717,725683968,725831016,727580320,734151780,734595181,737944528,748881410,752244947,763868412,768578853,776596978,789728437,873695441", "fb_sig_added"=>"0", "fb_sig_api_key"=>"b6c9c857ac543ca806f4d3187cd05e09", "fb_sig_user"=>"744961110", "fb_sig_profile_update_time"=>"1180712453"}.merge(options)
226
- end
227
-
228
217
  end
229
218
 
230
219
  class RailsIntegrationTestForExtendedPermissions < Test::Unit::TestCase
@@ -238,32 +227,32 @@ class RailsIntegrationTestForExtendedPermissions < Test::Unit::TestCase
238
227
  end
239
228
 
240
229
  def test_redirects_without_set_status
241
- post :index,example_rails_params_including_fb
230
+ post :index, facebook_params
242
231
  assert_response :success
243
232
  assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=status_update\" />", @response.body)
244
233
  end
245
234
  def test_redirects_without_photo_upload
246
- post :index,example_rails_params_including_fb.merge(:fb_sig_ext_perms=>"status_update")
235
+ post :index, facebook_params(:fb_sig_ext_perms=>"status_update")
247
236
  assert_response :success
248
237
  assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=photo_upload\" />", @response.body)
249
238
  end
239
+ def test_redirects_without_video_upload
240
+ post :index, facebook_params(:fb_sig_ext_perms=>"status_update,photo_upload")
241
+ assert_response :success
242
+ assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=video_upload\" />", @response.body)
243
+ end
250
244
  def test_redirects_without_create_listing
251
- post :index,example_rails_params_including_fb.merge(:fb_sig_ext_perms=>"status_update,photo_upload")
245
+ post :index, facebook_params(:fb_sig_ext_perms=>"status_update,photo_upload,video_upload")
252
246
  assert_response :success
253
247
  assert_equal("<fb:redirect url=\"http://www.facebook.com/authorize.php?api_key=1234567&v=1.0&ext_perm=create_listing\" />", @response.body)
254
248
  end
255
249
 
256
250
  def test_renders_with_permission
257
- post :index,example_rails_params_including_fb.merge(:fb_sig_ext_perms=>"status_update,photo_upload,create_listing")
251
+ post :index, facebook_params(:fb_sig_ext_perms=>"status_update,photo_upload,create_listing,video_upload")
258
252
  assert_response :success
259
253
  assert_equal("score!", @response.body)
260
254
 
261
255
  end
262
- private
263
- def example_rails_params_including_fb
264
- {"fb_sig_time"=>"1186588275.5988", "fb_sig"=>"7371a6400329b229f800a5ecafe03b0a", "action"=>"index", "fb_sig_in_canvas"=>"1", "fb_sig_session_key"=>"c452b5d5d60cbd0a0da82021-744961110", "controller"=>"controller_which_requires_facebook_authentication", "fb_sig_expires"=>"0", "fb_sig_friends"=>"417358,702720,1001170,1530839,3300204,3501584,6217936,9627766,9700907,22701786,33902768,38914148,67400422,135301144,157200364,500103523,500104930,500870819,502149612,502664898,502694695,502852293,502985816,503254091,504510130,504611551,505421674,509229747,511075237,512548373,512830487,517893818,517961878,518890403,523589362,523826914,525812984,531555098,535310228,539339781,541137089,549405288,552706617,564393355,564481279,567640762,568091401,570201702,571469972,573863097,574415114,575543081,578129427,578520568,582262836,582561201,586550659,591631962,592318318,596269347,596663221,597405464,599764847,602995438,606661367,609761260,610544224,620049417,626087078,628803637,632686250,641422291,646763898,649678032,649925863,653288975,654395451,659079771,661794253,665861872,668960554,672481514,675399151,678427115,685772348,686821151,687686894,688506532,689275123,695551670,710631572,710766439,712406081,715741469,718976395,719246649,722747311,725327717,725683968,725831016,727580320,734151780,734595181,737944528,748881410,752244947,763868412,768578853,776596978,789728437,873695441", "fb_sig_added"=>"0", "fb_sig_api_key"=>"b6c9c857ac543ca806f4d3187cd05e09", "fb_sig_user"=>"744961110", "fb_sig_profile_update_time"=>"1180712453"}
265
- end
266
-
267
256
  end
268
257
 
269
258
  class RailsIntegrationTestForApplicationInstallation < Test::Unit::TestCase
@@ -283,21 +272,16 @@ class RailsIntegrationTestForApplicationInstallation < Test::Unit::TestCase
283
272
  end
284
273
 
285
274
  def test_if_controller_requires_application_installation_authenticated_requests_without_installation_will_redirect_to_install_page
286
- get :index, example_rails_params_including_fb
275
+ get :index, facebook_params(:fb_sig_added => nil)
287
276
  assert_response :success
288
277
  assert_equal("<fb:redirect url=\"http://www.facebook.com/install.php?api_key=1234567&v=1.0\" />", @response.body)
289
278
  end
290
279
 
291
280
  def test_if_controller_requires_application_installation_authenticated_requests_with_installation_will_render
292
- get :index, example_rails_params_including_fb.merge('fb_sig_added' => "1")
281
+ get :index, facebook_params('fb_sig_added' => "1")
293
282
  assert_response :success
294
283
  assert_equal("installed!", @response.body)
295
284
  end
296
-
297
- private
298
- def example_rails_params_including_fb
299
- {"fb_sig_time"=>"1186588275.5988", "fb_sig"=>"7371a6400329b229f800a5ecafe03b0a", "action"=>"index", "fb_sig_in_canvas"=>"1", "fb_sig_session_key"=>"c452b5d5d60cbd0a0da82021-744961110", "controller"=>"controller_which_requires_facebook_authentication", "fb_sig_expires"=>"0", "fb_sig_friends"=>"417358,702720,1001170,1530839,3300204,3501584,6217936,9627766,9700907,22701786,33902768,38914148,67400422,135301144,157200364,500103523,500104930,500870819,502149612,502664898,502694695,502852293,502985816,503254091,504510130,504611551,505421674,509229747,511075237,512548373,512830487,517893818,517961878,518890403,523589362,523826914,525812984,531555098,535310228,539339781,541137089,549405288,552706617,564393355,564481279,567640762,568091401,570201702,571469972,573863097,574415114,575543081,578129427,578520568,582262836,582561201,586550659,591631962,592318318,596269347,596663221,597405464,599764847,602995438,606661367,609761260,610544224,620049417,626087078,628803637,632686250,641422291,646763898,649678032,649925863,653288975,654395451,659079771,661794253,665861872,668960554,672481514,675399151,678427115,685772348,686821151,687686894,688506532,689275123,695551670,710631572,710766439,712406081,715741469,718976395,719246649,722747311,725327717,725683968,725831016,727580320,734151780,734595181,737944528,748881410,752244947,763868412,768578853,776596978,789728437,873695441", "fb_sig_added"=>"0", "fb_sig_api_key"=>"b6c9c857ac543ca806f4d3187cd05e09", "fb_sig_user"=>"744961110", "fb_sig_profile_update_time"=>"1180712453"}
300
- end
301
285
  end
302
286
 
303
287
  class RailsIntegrationTest < Test::Unit::TestCase
@@ -315,7 +299,7 @@ class RailsIntegrationTest < Test::Unit::TestCase
315
299
  end
316
300
 
317
301
  def test_named_route_includes_new_canvas_path_when_in_new_canvas
318
- get :named_route_test, example_rails_params_including_fb.merge("fb_sig_in_new_facebook"=>"1")
302
+ get :named_route_test, facebook_params("fb_sig_in_new_facebook"=>"1")
319
303
  assert_equal "http://apps.facebook.com/root/comments",@response.body
320
304
  end
321
305
 
@@ -326,67 +310,66 @@ class RailsIntegrationTest < Test::Unit::TestCase
326
310
  end
327
311
 
328
312
  def test_facebook_params_are_parsed_into_a_separate_hash
329
- get :index, example_rails_params_including_fb
330
- facebook_params = @controller.facebook_params
331
- assert_equal([8, 8], [facebook_params['time'].day, facebook_params['time'].mon])
313
+ get :index, facebook_params(:fb_sig_user => '9')
314
+ assert_not_nil @controller.facebook_params['time']
332
315
  end
333
316
 
334
317
  def test_facebook_params_convert_in_canvas_to_boolean
335
- get :index, example_rails_params_including_fb
318
+ get :index, facebook_params
336
319
  assert_equal(true, @controller.facebook_params['in_canvas'])
337
320
  end
338
321
 
339
322
  def test_facebook_params_convert_added_to_boolean_false
340
- get :index, example_rails_params_including_fb
323
+ get :index, facebook_params(:fb_sig_added => '0')
341
324
  assert_equal(false, @controller.facebook_params['added'])
342
325
  end
343
326
 
344
327
  def test_facebook_params_convert_added_to_boolean_true
345
- get :index, example_rails_params_including_fb.merge('fb_sig_added' => "1")
328
+ get :index, facebook_params('fb_sig_added' => "1")
346
329
  assert_equal(true, @controller.facebook_params['added'])
347
330
  end
348
331
 
349
- def test_facebook_params_convert_expirey_into_time_or_nil
350
- get :index, example_rails_params_including_fb
332
+ def test_facebook_params_convert_expirey_into_nil
333
+ get :index, facebook_params(:fb_sig_expires => '0')
351
334
  assert_nil(@controller.facebook_params['expires'])
352
- modified_params = example_rails_params_including_fb
353
- modified_params['fb_sig_expires'] = modified_params['fb_sig_time']
354
- setup # reset session and cached params
355
- get :index, modified_params
356
- assert_equal([8, 8], [@controller.facebook_params['time'].day, @controller.facebook_params['time'].mon])
335
+ end
336
+
337
+ def test_facebook_params_convert_expirey_into_time
338
+ get :index, facebook_params(:fb_sig_expires => 5.minutes.from_now.to_f)
339
+ assert_instance_of Time, @controller.facebook_params['expires']
357
340
  end
358
341
 
359
342
  def test_facebook_params_convert_friend_list_to_parsed_array_of_friend_ids
360
- get :index, example_rails_params_including_fb
343
+ get :index, facebook_params(:fb_sig_friends => '1,2,3,4,5')
361
344
  assert_kind_of(Array, @controller.facebook_params['friends'])
362
- assert_equal(111, @controller.facebook_params['friends'].size)
345
+ assert_equal(5, @controller.facebook_params['friends'].size)
363
346
  end
364
347
 
365
348
  def test_session_can_be_resecured_from_facebook_params
366
- get :index, example_rails_params_including_fb
367
- assert_equal(744961110, @controller.facebook_session.user.id)
349
+ get :index, facebook_params(:fb_sig_user => 10)
350
+ assert_equal(10, @controller.facebook_session.user.id)
368
351
  end
369
352
 
370
353
  def test_existing_secured_session_is_used_if_available
371
- session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY'])
372
- session.secure_with!("c452b5d5d60cbd0a0da82021-744961110", "1111111", Time.now.to_i + 60)
373
- get :index, example_rails_params_including_fb, {:facebook_session => session}
374
- assert_equal(1111111, @controller.facebook_session.user.id)
354
+ session = Facebooker::Session.create(Facebooker::Session.api_key, Facebooker::Session.secret_key)
355
+ session.secure_with!("session_key", "111", Time.now.to_i + 60)
356
+ get :index, facebook_params(:fb_sig_session_key => 'session_key', :fb_sig_user => '987'), {:facebook_session => session}
357
+ assert_equal(111, @controller.facebook_session.user.id)
375
358
  end
376
359
 
377
360
  def test_facebook_params_used_if_existing_secured_session_key_does_not_match
378
- session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY'])
379
- session.secure_with!("a session key", "1111111", Time.now.to_i + 60)
380
- get :index, example_rails_params_including_fb, {:facebook_session => session}
381
- assert_equal(744961110, @controller.facebook_session.user.id)
361
+ session = Facebooker::Session.create(Facebooker::Session.api_key, Facebooker::Session.secret_key)
362
+ session.secure_with!("different session key", "111", Time.now.to_i + 60)
363
+ get :index, facebook_params(:fb_sig_session_key => '', :fb_sig_user => '123'), {:facebook_session => session}
364
+ assert_equal(123, @controller.facebook_session.user.id)
382
365
  end
383
366
 
384
367
  def test_existing_secured_session_is_NOT_used_if_available_and_facebook_params_session_key_is_nil_and_in_canvas
385
- session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY'])
368
+ session = Facebooker::Session.create(Facebooker::Session.api_key, Facebooker::Session.secret_key)
369
+ session.secure_with!("session_key", "111", Time.now.to_i + 60)
386
370
  session.secure_with!("a session key", "1111111", Time.now.to_i + 60)
387
- get :index, example_rails_params_including_fb.merge("fb_sig_session_key" => ''), {:facebook_session => session}
388
-
389
- assert_equal(744961110, @controller.facebook_session.user.id)
371
+ get :index, facebook_params(:fb_sig_session_key => '', :fb_sig_user => '987'), {:facebook_session => session}
372
+ assert_equal(987, @controller.facebook_session.user.id)
390
373
  end
391
374
 
392
375
  def test_existing_secured_session_IS_used_if_available_and_facebook_params_session_key_is_nil_and_NOT_in_canvas
@@ -400,7 +383,7 @@ class RailsIntegrationTest < Test::Unit::TestCase
400
383
 
401
384
  def test_session_can_be_secured_with_auth_token
402
385
  auth_token = 'ohaiauthtokenhere111'
403
- modified_params = example_rails_params_including_fb
386
+ modified_params = facebook_params
404
387
  modified_params.delete('fb_sig_session_key')
405
388
  modified_params['auth_token'] = auth_token
406
389
  session_mock = flexmock(session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY']))
@@ -412,7 +395,7 @@ class RailsIntegrationTest < Test::Unit::TestCase
412
395
 
413
396
  def test_session_secured_with_auth_token_if_cookies_expired
414
397
  auth_token = 'ohaiauthtokenhere111'
415
- modified_params = example_rails_params_including_fb
398
+ modified_params = facebook_params
416
399
  modified_params.delete('fb_sig_session_key')
417
400
  modified_params['auth_token'] = auth_token
418
401
  session_mock = flexmock(session = Facebooker::Session.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY']))
@@ -426,91 +409,90 @@ class RailsIntegrationTest < Test::Unit::TestCase
426
409
 
427
410
  def test_session_can_be_secured_with_cookies
428
411
  setup_fb_connect_cookies
429
- get :index, example_rails_params_for_fb_connect
412
+ get :index
430
413
  assert_equal(77777, @controller.facebook_session.user.id)
431
414
  end
432
415
 
433
416
  def test_session_does_NOT_secure_with_expired_cookies
434
417
  setup_fb_connect_cookies(expired_cookie_hash_for_auth)
435
- get :index, example_rails_params_for_fb_connect
418
+ get :index
436
419
  assert_nil(@controller.facebook_session)
437
420
  end
438
421
 
439
422
  def test_user_friends_can_be_populated_from_facebook_params_if_available
440
- get :index, example_rails_params_including_fb
441
- assert_not_nil(friends = @controller.facebook_session.user.friends)
442
- assert_equal(111, friends.size)
423
+ get :index, facebook_params(:fb_sig_friends => '1,2,3,4')
424
+ friends = @controller.facebook_session.user.friends
425
+ assert_not_nil(friends)
426
+ assert_equal(4, friends.size)
443
427
  end
444
428
 
445
429
  def test_fbml_redirect_tag_handles_hash_parameters_correctly
446
- get :index, example_rails_params_including_fb
430
+ get :index, facebook_params
447
431
  assert_equal "<fb:redirect url=\"http://apps.facebook.com/root/require_auth\" />", @controller.send(:fbml_redirect_tag, :action => :index,:canvas=>true)
448
432
  end
449
433
 
450
434
  def test_redirect_to_renders_fbml_redirect_tag_if_request_is_for_a_facebook_canvas
451
- get :index, example_rails_params_including_fb_for_user_not_logged_into_application
435
+ get :index, facebook_params(:fb_sig_user => nil)
452
436
  assert_response :success
453
437
  assert_equal("<fb:redirect url=\"http://www.facebook.com/login.php?api_key=1234567&v=1.0\" />", @response.body)
454
438
  end
455
439
 
456
440
  def test_url_for_links_to_canvas_if_canvas_is_true_and_not_in_canvas
457
- get :link_test,example_rails_params_including_fb.merge(:fb_sig_in_canvas=>0,:canvas=>true)
441
+ get :link_test, facebook_params(:fb_sig_in_canvas=>0,:canvas=>true)
458
442
  assert_match /apps.facebook.com/,@response.body
459
443
  end
460
444
 
461
445
  def test_includes_relative_url_root_when_linked_to_canvas
462
- get :link_test,example_rails_params_including_fb.merge(:fb_sig_in_canvas=>0,:canvas=>true)
446
+ get :link_test,facebook_params(:fb_sig_in_canvas=>0,:canvas=>true)
463
447
  assert_match /root/,@response.body
464
448
  end
465
449
 
466
450
  def test_url_for_links_to_callback_if_canvas_is_false_and_in_canvas
467
- get :link_test,example_rails_params_including_fb.merge(:fb_sig_in_canvas=>0,:canvas=>false)
451
+ get :link_test,facebook_params(:fb_sig_in_canvas=>0,:canvas=>false)
468
452
  assert_match /test.host/,@response.body
469
453
  end
470
454
 
471
455
  def test_url_for_doesnt_include_url_root_when_not_linked_to_canvas
472
- get :link_test,example_rails_params_including_fb.merge(:fb_sig_in_canvas=>0,:canvas=>false)
456
+ get :link_test,facebook_params(:fb_sig_in_canvas=>0,:canvas=>false)
473
457
  assert !@response.body.match(/root/)
474
458
  end
475
459
 
476
460
  def test_url_for_links_to_canvas_if_canvas_is_not_set
477
- get :link_test,example_rails_params_including_fb
461
+ get :link_test,facebook_params
478
462
  assert_match /apps.facebook.com/,@response.body
479
463
  end
480
464
 
481
465
  def test_image_tag
482
- get :image_test, example_rails_params_including_fb
466
+ get :image_test, facebook_params
483
467
  assert_equal "<img alt=\"Image\" src=\"http://root.example.com/images/image.png\" />",@response.body
484
468
  end
485
469
 
486
470
  def test_wants_interface_is_available_and_detects_method
487
- get :publisher_test, example_rails_params_including_fb.merge(:method=>"publisher_getInterface")
471
+ get :publisher_test, facebook_params(:method=>"publisher_getInterface")
488
472
  assert_equal "interface",@response.body
489
473
  end
490
474
  def test_wants_interface_is_available_and_detects_not_interface
491
- get :publisher_test, example_rails_params_including_fb.merge(:method=>"publisher_getFeedStory")
475
+ get :publisher_test, facebook_params(:method=>"publisher_getFeedStory")
492
476
  assert_equal "not interface",@response.body
493
477
  end
494
478
 
495
479
  def test_publisher_test_error
496
- get :publisher_test_error, example_rails_params_including_fb
480
+ get :publisher_test_error, facebook_params
497
481
  assert_equal JSON.parse("{\"errorCode\": 1, \"errorTitle\": \"Title\", \"errorMessage\": \"Body\"}"), JSON.parse(@response.body)
498
482
  end
499
483
 
500
484
  def test_publisher_test_interface
501
- get :publisher_test_interface, example_rails_params_including_fb
485
+ get :publisher_test_interface, facebook_params
502
486
  assert_equal JSON.parse("{\"method\": \"publisher_getInterface\", \"content\": {\"fbml\": \"This is a test\", \"publishEnabled\": false, \"commentEnabled\": true}}"), JSON.parse(@response.body)
503
487
  end
504
488
 
505
489
  def test_publisher_test_reponse
506
- get :publisher_test_response, example_rails_params_including_fb
490
+ get :publisher_test_response, facebook_params
507
491
  assert_equal JSON.parse("{\"method\": \"publisher_getFeedStory\", \"content\": {\"feed\": {\"template_data\": {\"params\": true}, \"template_id\": 1234}}}"), JSON.parse(@response.body)
508
492
 
509
493
  end
510
494
 
511
- def example_rails_params_for_fb_connect
512
- {"action"=>"index", "controller"=>"controller_which_requires_facebook_authentication"}
513
- end
495
+ private
514
496
 
515
497
  def expired_cookie_hash_for_auth
516
498
  {"_ss" => "not_used", "_session_key"=> "whatever", "_user"=>"77777", "_expires"=>"#{1.day.ago.to_i}"}
@@ -520,13 +502,6 @@ class RailsIntegrationTest < Test::Unit::TestCase
520
502
  {"_ss" => "not_used", "_session_key"=> "whatever", "_user"=>"77777", "_expires"=>"#{1.day.from_now.to_i}"}
521
503
  end
522
504
 
523
- def example_rails_params_including_fb_for_user_not_logged_into_application
524
- {"fb_sig_time"=>"1186588275.5988", "fb_sig"=>"7371a6400329b229f800a5ecafe03b0a", "action"=>"index", "fb_sig_in_canvas"=>"1", "controller"=>"controller_which_requires_facebook_authentication", "fb_sig_added"=>"0", "fb_sig_api_key"=>"b6c9c857ac543ca806f4d3187cd05e09"}
525
- end
526
-
527
- def example_rails_params_including_fb
528
- {"fb_sig_time"=>"1186588275.5988", "fb_sig"=>"7371a6400329b229f800a5ecafe03b0a", "action"=>"index", "fb_sig_in_canvas"=>"1", "fb_sig_session_key"=>"c452b5d5d60cbd0a0da82021-744961110", "controller"=>"controller_which_requires_facebook_authentication", "fb_sig_expires"=>"0", "fb_sig_friends"=>"417358,702720,1001170,1530839,3300204,3501584,6217936,9627766,9700907,22701786,33902768,38914148,67400422,135301144,157200364,500103523,500104930,500870819,502149612,502664898,502694695,502852293,502985816,503254091,504510130,504611551,505421674,509229747,511075237,512548373,512830487,517893818,517961878,518890403,523589362,523826914,525812984,531555098,535310228,539339781,541137089,549405288,552706617,564393355,564481279,567640762,568091401,570201702,571469972,573863097,574415114,575543081,578129427,578520568,582262836,582561201,586550659,591631962,592318318,596269347,596663221,597405464,599764847,602995438,606661367,609761260,610544224,620049417,626087078,628803637,632686250,641422291,646763898,649678032,649925863,653288975,654395451,659079771,661794253,665861872,668960554,672481514,675399151,678427115,685772348,686821151,687686894,688506532,689275123,695551670,710631572,710766439,712406081,715741469,718976395,719246649,722747311,725327717,725683968,725831016,727580320,734151780,734595181,737944528,748881410,752244947,763868412,768578853,776596978,789728437,873695441", "fb_sig_added"=>"0", "fb_sig_api_key"=>"b6c9c857ac543ca806f4d3187cd05e09", "fb_sig_user"=>"744961110", "fb_sig_profile_update_time"=>"1180712453"}
529
- end
530
505
  end
531
506
 
532
507
 
@@ -543,7 +518,7 @@ class RailsSignatureTest < Test::Unit::TestCase
543
518
 
544
519
  def test_should_raise_too_old_for_replayed_session
545
520
  begin
546
- get :fb_params_test,example_rails_params_including_fb
521
+ get :fb_params_test, facebook_params('fb_sig_time' => Time.now.to_i - 49.hours)
547
522
  fail "No SignatureTooOld raised"
548
523
  rescue Facebooker::Session::SignatureTooOld=>e
549
524
  end
@@ -551,7 +526,7 @@ class RailsSignatureTest < Test::Unit::TestCase
551
526
 
552
527
  def test_should_raise_on_bad_sig
553
528
  begin
554
- get :fb_params_test,example_rails_params_including_fb("fb_sig"=>'incorrect')
529
+ get :fb_params_test, facebook_params.merge('fb_sig' => 'incorrect')
555
530
  fail "No IncorrectSignature raised"
556
531
  rescue Facebooker::Session::IncorrectSignature=>e
557
532
  end
@@ -559,14 +534,10 @@ class RailsSignatureTest < Test::Unit::TestCase
559
534
 
560
535
  def test_valid_signature
561
536
  @controller.expects(:earliest_valid_session).returns(Time.at(1186588275.5988)-1)
562
- get :fb_params_test,example_rails_params_including_fb
537
+ get :fb_params_test, facebook_params
563
538
 
564
539
  end
565
540
 
566
- def example_rails_params_including_fb(options={})
567
- {"fb_sig_time"=>"1186588275.5988", "fb_sig"=>"8d9e9dd2cb0742a5a2bfe35563134585", "action"=>"index", "fb_sig_in_canvas"=>"1", "fb_sig_session_key"=>"c452b5d5d60cbd0a0da82021-744961110", "controller"=>"controller_which_requires_facebook_authentication", "fb_sig_expires"=>"0", "fb_sig_friends"=>"417358,702720,1001170,1530839,3300204,3501584,6217936,9627766,9700907,22701786,33902768,38914148,67400422,135301144,157200364,500103523,500104930,500870819,502149612,502664898,502694695,502852293,502985816,503254091,504510130,504611551,505421674,509229747,511075237,512548373,512830487,517893818,517961878,518890403,523589362,523826914,525812984,531555098,535310228,539339781,541137089,549405288,552706617,564393355,564481279,567640762,568091401,570201702,571469972,573863097,574415114,575543081,578129427,578520568,582262836,582561201,586550659,591631962,592318318,596269347,596663221,597405464,599764847,602995438,606661367,609761260,610544224,620049417,626087078,628803637,632686250,641422291,646763898,649678032,649925863,653288975,654395451,659079771,661794253,665861872,668960554,672481514,675399151,678427115,685772348,686821151,687686894,688506532,689275123,695551670,710631572,710766439,712406081,715741469,718976395,719246649,722747311,725327717,725683968,725831016,727580320,734151780,734595181,737944528,748881410,752244947,763868412,768578853,776596978,789728437,873695441", "fb_sig_added"=>"0", "fb_sig_api_key"=>"b6c9c857ac543ca806f4d3187cd05e09", "fb_sig_user"=>"744961110", "fb_sig_profile_update_time"=>"1180712453"}.merge(options)
568
- end
569
-
570
541
  end
571
542
  class RailsHelperTest < Test::Unit::TestCase
572
543
  class HelperClass
@@ -1040,6 +1011,16 @@ class RailsHelperTest < Test::Unit::TestCase
1040
1011
  user=flexmock("user", :facebook_id => "5678")
1041
1012
  assert_equal '<fb:user-status linked="false" uid="5678"></fb:user-status>',@h.fb_user_status(user,false)
1042
1013
  end
1014
+
1015
+ def test_fb_time
1016
+ time = Time.now
1017
+ 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)
1018
+ end
1019
+
1020
+ def test_fb_time_defaults
1021
+ time = Time.now
1022
+ assert_equal %Q{<fb:time t="#{time.to_i}" />}, @h.fb_time(time)
1023
+ end
1043
1024
  end
1044
1025
  class TestModel
1045
1026
  attr_accessor :name,:facebook_id
@@ -1134,21 +1115,16 @@ class RailsPrettyErrorsTest < Test::Unit::TestCase
1134
1115
 
1135
1116
  def test_pretty_errors
1136
1117
  Facebooker.facebooker_config.stubs(:pretty_errors).returns(false)
1137
- post :pass, example_rails_params_including_fb
1118
+ post :pass, facebook_params
1138
1119
  assert_response :success
1139
- post :fail, example_rails_params_including_fb
1120
+ post :fail, facebook_params
1140
1121
  assert_response :error
1141
1122
  Facebooker.facebooker_config.stubs(:pretty_errors).returns(true)
1142
- post :pass, example_rails_params_including_fb
1123
+ post :pass, facebook_params
1143
1124
  assert_response :success
1144
- post :fail, example_rails_params_including_fb
1125
+ post :fail, facebook_params
1145
1126
  assert_response :error
1146
1127
  end
1147
- private
1148
- def example_rails_params_including_fb
1149
- {"fb_sig_time"=>"1186588275.5988", "fb_sig"=>"7371a6400329b229f800a5ecafe03b0a", "action"=>"index", "fb_sig_in_canvas"=>"1", "fb_sig_session_key"=>"c452b5d5d60cbd0a0da82021-744961110", "controller"=>"controller_which_requires_facebook_authentication", "fb_sig_expires"=>"0", "fb_sig_friends"=>"417358,702720,1001170,1530839,3300204,3501584,6217936,9627766,9700907,22701786,33902768,38914148,67400422,135301144,157200364,500103523,500104930,500870819,502149612,502664898,502694695,502852293,502985816,503254091,504510130,504611551,505421674,509229747,511075237,512548373,512830487,517893818,517961878,518890403,523589362,523826914,525812984,531555098,535310228,539339781,541137089,549405288,552706617,564393355,564481279,567640762,568091401,570201702,571469972,573863097,574415114,575543081,578129427,578520568,582262836,582561201,586550659,591631962,592318318,596269347,596663221,597405464,599764847,602995438,606661367,609761260,610544224,620049417,626087078,628803637,632686250,641422291,646763898,649678032,649925863,653288975,654395451,659079771,661794253,665861872,668960554,672481514,675399151,678427115,685772348,686821151,687686894,688506532,689275123,695551670,710631572,710766439,712406081,715741469,718976395,719246649,722747311,725327717,725683968,725831016,727580320,734151780,734595181,737944528,748881410,752244947,763868412,768578853,776596978,789728437,873695441", "fb_sig_added"=>"0", "fb_sig_api_key"=>"b6c9c857ac543ca806f4d3187cd05e09", "fb_sig_user"=>"744961110", "fb_sig_profile_update_time"=>"1180712453"}
1150
- end
1151
-
1152
1128
  end
1153
1129
 
1154
1130
  class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
@@ -1293,7 +1269,42 @@ class RailsUrlHelperExtensionsTest < Test::Unit::TestCase
1293
1269
 
1294
1270
  end
1295
1271
 
1272
+ class RailsRequestFormatTest < Test::Unit::TestCase
1273
+ class FacebookController < NoisyController
1274
+ def index
1275
+ respond_to do |format|
1276
+ format.html { render :text => 'html' }
1277
+ format.fbml { render :text => 'fbml' }
1278
+ format.fbjs { render :text => 'fbjs' }
1279
+ end
1280
+ end
1281
+ end
1282
+
1283
+ def setup
1284
+ @controller = FacebookController.new
1285
+ @request = ActionController::TestRequest.new
1286
+ @response = ActionController::TestResponse.new
1287
+ @controller.stubs(:verify_signature).returns(true)
1288
+ end
1289
+
1290
+ def test_responds_to_html_without_canvas
1291
+ get :index
1292
+ assert_equal 'html', @response.body
1293
+ end
1294
+
1295
+ def test_responds_to_fbml_in_canvas
1296
+ get :index, facebook_params(:fb_sig_in_canvas => '1')
1297
+ assert_equal 'fbml', @response.body
1298
+ end
1299
+
1300
+ def test_responds_to_fbjs_when_is_ajax
1301
+ get :index, facebook_params(:fb_sig_is_ajax => '1')
1302
+ assert_equal 'fbjs', @response.body
1303
+ end
1304
+
1305
+ end
1296
1306
 
1297
1307
  # rescue LoadError
1298
1308
  # $stderr.puts "Couldn't find action controller. That's OK. We'll skip it."
1299
1309
  end
1310
+