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.
- data/Manifest.txt +27 -16
- data/Rakefile +1 -1
- data/generators/facebook/templates/public/javascripts/facebooker.js +1 -8
- data/init.rb +3 -1
- data/lib/facebooker.rb +2 -1
- data/lib/facebooker/adapters/facebook_adapter.rb +4 -0
- data/lib/facebooker/mock/service.rb +50 -0
- data/lib/facebooker/mock/session.rb +18 -0
- data/lib/facebooker/model.rb +2 -2
- data/lib/facebooker/models/applicationrestrictions.rb +10 -0
- data/lib/facebooker/models/user.rb +33 -1
- data/lib/facebooker/models/video.rb +9 -0
- data/lib/facebooker/parser.rb +8 -1
- data/lib/facebooker/rails/controller.rb +15 -3
- data/lib/facebooker/rails/cucumber.rb +30 -0
- data/lib/facebooker/rails/cucumber/world.rb +46 -0
- data/lib/facebooker/rails/helpers.rb +203 -122
- data/lib/facebooker/rails/helpers/fb_connect.rb +25 -3
- data/lib/facebooker/rails/integration_session.rb +40 -0
- data/lib/facebooker/rails/publisher.rb +15 -2
- data/lib/facebooker/rails/test_helpers.rb +11 -26
- data/lib/facebooker/service.rb +6 -3
- data/lib/facebooker/session.rb +19 -1
- data/lib/tasks/tunnel.rake +2 -2
- data/test/{adapters_test.rb → facebooker/adapters_test.rb} +2 -4
- data/test/{facebook_admin_test.rb → facebooker/admin_test.rb} +2 -2
- data/test/{batch_request_test.rb → facebooker/batch_request_test.rb} +3 -2
- data/test/{facebook_data_test.rb → facebooker/data_test.rb} +2 -2
- data/test/{logging_test.rb → facebooker/logging_test.rb} +3 -3
- data/test/{model_test.rb → facebooker/model_test.rb} +2 -4
- data/test/{event_test.rb → facebooker/models/event_test.rb} +2 -2
- data/test/{user_test.rb → facebooker/models/user_test.rb} +10 -5
- data/test/{publisher_test.rb → facebooker/rails/publisher_test.rb} +12 -18
- data/test/{rails_integration_test.rb → facebooker/rails_integration_test.rb} +126 -115
- data/test/{facebook_cache_test.rb → facebooker/server_cache_test.rb} +1 -1
- data/test/{session_test.rb → facebooker/session_test.rb} +3 -2
- data/test/facebooker_test.rb +19 -1
- data/test/{http_multipart_post_test.rb → net/http_multipart_post_test.rb} +2 -4
- data/test/rails_test_helper.rb +11 -0
- data/test/test_helper.rb +2 -2
- metadata +28 -17
- 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
|
-
|
38
|
-
|
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
|
-
|
316
|
-
|
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
|
-
|
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
|
38
|
-
|
39
|
-
|
40
|
-
params.merge(:fb_sig =>
|
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
|
-
|
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(
|
71
|
-
|
72
|
-
|
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
|
data/lib/facebooker/service.rb
CHANGED
@@ -58,12 +58,15 @@ module Facebooker
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def post_file(params)
|
61
|
-
|
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
|
-
|
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
|
data/lib/facebooker/session.rb
CHANGED
@@ -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
|
|
data/lib/tasks/tunnel.rake
CHANGED
@@ -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
|
-
|
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
|
-
|
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__) + '
|
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__) + '
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
2
|
|
3
|
-
class
|
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__) + '
|
2
|
-
|
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__) + '
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
2
|
|
3
|
-
class
|
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__) + '
|
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__) + '
|
2
|
-
require 'rubygems'
|
3
|
-
require 'flexmock/test_unit'
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
4
2
|
|
5
|
-
class
|
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__) + '
|
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__) + '
|
2
|
-
require '
|
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
|
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__) + '
|
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
|
-
|
414
|
-
|
415
|
-
assert_equal(
|
416
|
-
|
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__) + '
|
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
|
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
|
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,
|
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,
|
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
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
330
|
-
|
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,
|
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,
|
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,
|
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
|
350
|
-
get :index,
|
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
|
-
|
353
|
-
|
354
|
-
|
355
|
-
get :index,
|
356
|
-
|
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,
|
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(
|
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,
|
367
|
-
assert_equal(
|
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(
|
372
|
-
session.secure_with!("
|
373
|
-
get :index,
|
374
|
-
assert_equal(
|
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(
|
379
|
-
session.secure_with!("
|
380
|
-
get :index,
|
381
|
-
assert_equal(
|
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(
|
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,
|
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 =
|
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 =
|
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
|
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
|
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,
|
441
|
-
|
442
|
-
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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
|
-
|
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,
|
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,
|
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,
|
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,
|
1118
|
+
post :pass, facebook_params
|
1138
1119
|
assert_response :success
|
1139
|
-
post :fail,
|
1120
|
+
post :fail, facebook_params
|
1140
1121
|
assert_response :error
|
1141
1122
|
Facebooker.facebooker_config.stubs(:pretty_errors).returns(true)
|
1142
|
-
post :pass,
|
1123
|
+
post :pass, facebook_params
|
1143
1124
|
assert_response :success
|
1144
|
-
post :fail,
|
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
|
+
|