rfacebook 0.9.7 → 0.9.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README +12 -3
- data/lib/facebook_desktop_session.rb +77 -116
- data/lib/facebook_session.rb +282 -334
- data/lib/facebook_web_session.rb +28 -103
- data/lib/facepricot.rb +20 -22
- data/lib/rfacebook.rb +2 -0
- data/{lib/rfacebook_on_rails/view_extensions.rb → test/facebook_desktop_session_test.rb} +23 -39
- data/test/facebook_session_test_methods.rb +106 -0
- data/test/facebook_web_session_test.rb +48 -0
- data/test/test_helper.rb +216 -0
- metadata +55 -60
- data/lib/facebook_rails_controller_extensions.rb +0 -10
- data/lib/rfacebook_on_rails/controller_extensions.rb +0 -543
- data/lib/rfacebook_on_rails/model_extensions.rb +0 -203
- data/lib/rfacebook_on_rails/plugin/Rakefile.rb +0 -1
- data/lib/rfacebook_on_rails/plugin/init.rb +0 -139
- data/lib/rfacebook_on_rails/plugin/install.rb +0 -1
- data/lib/rfacebook_on_rails/plugin/rake.rb +0 -141
- data/lib/rfacebook_on_rails/plugin/uninstall.rb +0 -1
- data/lib/rfacebook_on_rails/session_extensions.rb +0 -202
- data/lib/rfacebook_on_rails/status_manager.rb +0 -309
- data/lib/rfacebook_on_rails/templates/debug_panel.rhtml +0 -220
- data/lib/rfacebook_on_rails/templates/exception_backtrace.rhtml +0 -97
data/lib/facebook_web_session.rb
CHANGED
@@ -32,22 +32,14 @@ require "facebook_session"
|
|
32
32
|
module RFacebook
|
33
33
|
|
34
34
|
class FacebookWebSession < FacebookSession
|
35
|
-
|
36
|
-
|
37
|
-
################################################################################################
|
38
|
-
# :section: URL Accessors
|
39
|
-
################################################################################################
|
40
|
-
|
41
|
-
# Function: get_login_url
|
42
|
-
# Gets the authentication URL
|
35
|
+
|
36
|
+
# Gets the authentication URL for this application
|
43
37
|
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
# options.hidecheckbox - boolean, whether to show the "infinite session" option checkbox
|
38
|
+
# options.next:: the page to redirect to after login
|
39
|
+
# options.popup:: boolean, whether or not to use the popup style (defaults to false)
|
40
|
+
# options.skipcookie:: boolean, whether to force new Facebook login (defaults to false)
|
41
|
+
# options.hidecheckbox:: boolean, whether to show the "infinite session" option checkbox
|
49
42
|
def get_login_url(options={})
|
50
|
-
|
51
43
|
# handle options
|
52
44
|
nextPage = options[:next] ||= nil
|
53
45
|
popup = (options[:popup] == nil) ? false : true
|
@@ -65,17 +57,13 @@ module RFacebook
|
|
65
57
|
optionalCanvas = (canvas == true) ? "&canvas=true" : ""
|
66
58
|
|
67
59
|
# build and return URL
|
68
|
-
return "http://#{
|
69
|
-
|
60
|
+
return "http://#{WWW_HOST}#{WWW_PATH_LOGIN}?v=1.0&api_key=#{@api_key}#{optionalPopup}#{optionalNext}#{optionalSkipCookie}#{optionalHideCheckbox}#{optionalFrame}#{optionalCanvas}"
|
70
61
|
end
|
71
62
|
|
72
|
-
#
|
73
|
-
# Gets the installation URL for this application
|
63
|
+
# Gets the installation URL for this application
|
74
64
|
#
|
75
|
-
#
|
76
|
-
# options.next - the page to redirect to after installation
|
65
|
+
# options.next:: the page to redirect to after installation
|
77
66
|
def get_install_url(options={})
|
78
|
-
|
79
67
|
# handle options
|
80
68
|
nextPage = options[:next] ||= nil
|
81
69
|
|
@@ -83,36 +71,25 @@ module RFacebook
|
|
83
71
|
optionalNext = (nextPage == nil) ? "" : "&next=#{CGI.escape(nextPage.to_s)}"
|
84
72
|
|
85
73
|
# build and return URL
|
86
|
-
return "http://#{
|
87
|
-
|
74
|
+
return "http://#{WWW_HOST}#{WWW_PATH_INSTALL}?api_key=#{@api_key}#{optionalNext}"
|
88
75
|
end
|
89
|
-
|
90
|
-
|
91
|
-
################################################################################################
|
92
|
-
# :section: Session Activation
|
93
|
-
################################################################################################
|
94
|
-
|
95
|
-
# Function: activate_with_token
|
96
|
-
# Gets the session information available after current user logs in.
|
76
|
+
|
77
|
+
# Gets the session information available after current user logs in.
|
97
78
|
#
|
98
|
-
#
|
99
|
-
# auth_token - string token passed back by the callback URL
|
79
|
+
# auth_token:: string token passed back by the callback URL
|
100
80
|
def activate_with_token(auth_token)
|
101
|
-
result =
|
102
|
-
|
81
|
+
result = remote_call("auth.getSession", {:auth_token => auth_token})
|
82
|
+
unless result.nil?
|
103
83
|
@session_user_id = result.at("uid").inner_html
|
104
84
|
@session_key = result.at("session_key").inner_html
|
105
85
|
@session_expires = result.at("expires").inner_html
|
106
86
|
end
|
107
87
|
end
|
108
88
|
|
109
|
-
#
|
110
|
-
# Sets the session key directly (for example, if you have an infinite session key)
|
89
|
+
# Sets the session key directly (for example, if you have an infinite session)
|
111
90
|
#
|
112
|
-
#
|
113
|
-
# key - the session key to use
|
91
|
+
# key:: the session key to use
|
114
92
|
def activate_with_previous_session(key, uid=nil, expires=nil)
|
115
|
-
|
116
93
|
# set the expiration
|
117
94
|
@session_expires = expires
|
118
95
|
|
@@ -123,75 +100,23 @@ module RFacebook
|
|
123
100
|
if uid
|
124
101
|
@session_user_id = uid
|
125
102
|
else
|
126
|
-
result =
|
103
|
+
result = remote_call("users.getLoggedInUser")
|
127
104
|
@session_user_id = result.at("users_getLoggedInUser_response").inner_html
|
128
105
|
end
|
129
|
-
|
130
|
-
end
|
131
|
-
|
132
|
-
################################################################################################
|
133
|
-
################################################################################################
|
134
|
-
# :section: Canvas Signature Validation
|
135
|
-
################################################################################################
|
136
|
-
|
137
|
-
# Function: get_fb_sig_params
|
138
|
-
# Returns the fb_sig params from Hash that has all request params. Hash is empty if the
|
139
|
-
# signature was invalid.
|
140
|
-
#
|
141
|
-
# Parameters:
|
142
|
-
# originalParams - a Hash that contains the fb_sig_* params (i.e. Rails params)
|
143
|
-
#
|
144
|
-
def get_fb_sig_params(originalParams)
|
145
|
-
|
146
|
-
# setup
|
147
|
-
timeout = 48*3600
|
148
|
-
prefix = "fb_sig_"
|
149
|
-
|
150
|
-
# get the params prefixed by "fb_sig_" (and remove the prefix)
|
151
|
-
sigParams = {}
|
152
|
-
originalParams.each do |k,v|
|
153
|
-
oldLen = k.length
|
154
|
-
newK = k.sub(prefix, "")
|
155
|
-
if oldLen != newK.length
|
156
|
-
sigParams[newK] = v
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
# handle invalidation
|
161
|
-
if (timeout and (sigParams["time"].nil? or (Time.now.to_i - sigParams["time"].to_i > timeout.to_i)))
|
162
|
-
# invalidate if the timeout has been reached
|
163
|
-
#log_debug "** RFACEBOOK(GEM) - fbparams is empty because the signature was timed out"
|
164
|
-
sigParams = {}
|
165
|
-
end
|
166
|
-
|
167
|
-
# check that the signatures match
|
168
|
-
expectedSig = originalParams["fb_sig"]
|
169
|
-
if !(sigParams and expectedSig and generate_signature(sigParams, @api_secret) == expectedSig)
|
170
|
-
# didn't match, empty out the params
|
171
|
-
#log_debug "** RFACEBOOK(GEM) - fbparams is empty because the signature did not match"
|
172
|
-
sigParams = {}
|
173
|
-
end
|
174
|
-
|
175
|
-
return sigParams
|
176
|
-
|
177
106
|
end
|
178
107
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
################################################################################################
|
183
|
-
|
184
|
-
# Function: is_activated?
|
185
|
-
# Returns true when we have activated ourselves somehow
|
186
|
-
def is_activated?
|
187
|
-
return (@session_key != nil)
|
108
|
+
# returns true if this session is completely ready to be used and make API calls
|
109
|
+
def ready?
|
110
|
+
return (@session_key != nil and !expired?)
|
188
111
|
end
|
189
112
|
|
190
|
-
#
|
191
|
-
#
|
192
|
-
#
|
193
|
-
|
194
|
-
|
113
|
+
# Used for signing a set of parameters in the way that Facebook
|
114
|
+
# specifies: <http://developers.facebook.com/documentation.php?v=1.0&doc=auth>
|
115
|
+
#
|
116
|
+
# params:: a Hash containing the parameters to sign
|
117
|
+
def signature(params)
|
118
|
+
# always sign the parameters with the API secret
|
119
|
+
return signature_helper(params, @api_secret)
|
195
120
|
end
|
196
121
|
|
197
122
|
end
|
data/lib/facepricot.rb
CHANGED
@@ -27,40 +27,38 @@
|
|
27
27
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
28
|
#
|
29
29
|
|
30
|
+
|
31
|
+
# FIXME: work out the kinks of Facepricot, including moving to JSON support rather than XML, and renaming to something less inane (like FacebookResponse)
|
32
|
+
# NOTE: Facepricot will likely be deprecated in version 1.0
|
33
|
+
|
30
34
|
require "hpricot"
|
31
35
|
|
32
36
|
module RFacebook
|
33
37
|
|
34
38
|
module FacepricotChaining
|
35
|
-
|
36
|
-
def make_facepricot_chain(key, doc)
|
37
39
|
|
40
|
+
private
|
41
|
+
|
42
|
+
def make_facepricot_chain(key, doc) # :nodoc:
|
43
|
+
|
38
44
|
if matches = /(.*)_list/.match(key)
|
39
45
|
listKey = matches[1]
|
40
46
|
end
|
41
|
-
|
42
|
-
result = nil
|
43
47
|
|
44
|
-
|
45
|
-
if listKey
|
46
|
-
result = doc.search("/#{listKey}")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
if !result
|
51
|
-
result = doc.at("/#{key}")
|
52
|
-
end
|
48
|
+
results = nil
|
53
49
|
|
54
|
-
if
|
55
|
-
|
50
|
+
if listKey
|
51
|
+
result = doc.search("/#{listKey}")
|
52
|
+
if result.empty?
|
56
53
|
result = doc.search("//#{listKey}")
|
54
|
+
end
|
55
|
+
else
|
56
|
+
result = doc.at("/#{key}")
|
57
|
+
if !result
|
58
|
+
result = doc.at("//#{key}")
|
57
59
|
end
|
58
60
|
end
|
59
|
-
|
60
|
-
if !result
|
61
|
-
result = doc.at("//#{key}")
|
62
|
-
end
|
63
|
-
|
61
|
+
|
64
62
|
if result
|
65
63
|
if result.is_a?(Array)
|
66
64
|
return result.map{|r| FacepricotChain.new(r)}
|
@@ -113,11 +111,11 @@ module RFacebook
|
|
113
111
|
end
|
114
112
|
|
115
113
|
end
|
116
|
-
|
114
|
+
|
117
115
|
class FacepricotChain < String
|
118
116
|
|
119
117
|
include FacepricotChaining
|
120
|
-
|
118
|
+
|
121
119
|
def initialize(hpricotDoc)
|
122
120
|
super(hpricotDoc.inner_html.gsub("&", "&"))
|
123
121
|
@doc = hpricotDoc
|
data/lib/rfacebook.rb
ADDED
@@ -27,44 +27,28 @@
|
|
27
27
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
28
|
#
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
module ViewExtensions
|
33
|
-
|
34
|
-
def in_facebook_canvas?
|
35
|
-
@controller.in_facebook_canvas?
|
36
|
-
end
|
37
|
-
|
38
|
-
def in_facebook_frame?
|
39
|
-
@controller.in_facebook_frame?
|
40
|
-
end
|
41
|
-
|
42
|
-
def in_mock_ajax?
|
43
|
-
@controller.in_mock_ajax?
|
44
|
-
end
|
45
|
-
|
46
|
-
def fbparams
|
47
|
-
@controller.fbparams
|
48
|
-
end
|
49
|
-
|
50
|
-
def fbsession
|
51
|
-
@controller.fbsession
|
52
|
-
end
|
53
|
-
|
54
|
-
def image_path(*params)
|
55
|
-
path = super(*params)
|
56
|
-
if ((in_facebook_canvas? or in_mock_ajax?) and !(/(\w+)(\:\/\/)([\w0-9\.]+)([\:0-9]*)(.*)/.match(path)))
|
57
|
-
path = "#{request.protocol}#{request.host_with_port}#{path}"
|
58
|
-
end
|
59
|
-
return path
|
60
|
-
end
|
30
|
+
require File.dirname(__FILE__) + '/test_helper'
|
31
|
+
require File.dirname(__FILE__) + '/facebook_session_test_methods'
|
61
32
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
# TODO: override form_for to do <fb:editor> for Canvas pages, perhaps with an option to suppress such behavior
|
67
|
-
|
68
|
-
end
|
33
|
+
class RFacebook::FacebookDesktopSession
|
34
|
+
def test_initialize(*params)
|
35
|
+
initialize(*params)
|
69
36
|
end
|
70
|
-
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class FacebookDesktopSessionTest < Test::Unit::TestCase
|
40
|
+
|
41
|
+
include FacebookSessionTestMethods
|
42
|
+
|
43
|
+
def setup
|
44
|
+
# setting up a desktop session means that we need to allow the initialize method to 'access' the API for a createToken request
|
45
|
+
@fbsession = RFacebook::FacebookDesktopSession.allocate
|
46
|
+
@fbsession.expects(:post_request).returns(RFacebook::Dummy::AUTH_CREATETOKEN_RESPONSE)
|
47
|
+
@fbsession.test_initialize(RFacebook::Dummy::API_KEY, RFacebook::Dummy::API_SECRET)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_return_login_url
|
51
|
+
assert_equal "http://www.facebook.com/login.php?v=1.0&api_key=#{RFacebook::Dummy::API_KEY}&auth_token=3e4a22bb2f5ed75114b0fc9995ea85f1&popup=true", @fbsession.get_login_url
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# Copyright (c) 2007, Matt Pizzimenti (www.livelearncode.com)
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
# Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
# are permitted provided that the following conditions are met:
|
6
|
+
#
|
7
|
+
# Redistributions of source code must retain the above copyright notice,
|
8
|
+
# this list of conditions and the following disclaimer.
|
9
|
+
#
|
10
|
+
# Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
# this list of conditions and the following disclaimer in the documentation
|
12
|
+
# and/or other materials provided with the distribution.
|
13
|
+
#
|
14
|
+
# Neither the name of the original author nor the names of contributors
|
15
|
+
# may be used to endorse or promote products derived from this software
|
16
|
+
# without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
21
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
22
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
#
|
29
|
+
|
30
|
+
module FacebookSessionTestMethods
|
31
|
+
|
32
|
+
def force_to_be_activated(fbsession)
|
33
|
+
fbsession.stubs(:ready?).returns(true)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_method_missing_dispatches_to_facebook_api
|
37
|
+
fbsession = @fbsession.dup
|
38
|
+
force_to_be_activated(fbsession)
|
39
|
+
fbsession.expects(:remote_call).returns("mocked")
|
40
|
+
assert_equal "mocked", fbsession.friends_get
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_remote_error_causes_fbsession_to_raise_errors
|
44
|
+
fbsession = @fbsession.dup
|
45
|
+
force_to_be_activated(fbsession)
|
46
|
+
fbsession.expects(:post_request).returns(RFacebook::Dummy::ERROR_RESPONSE)
|
47
|
+
assert_raise(RFacebook::FacebookSession::RemoteStandardError){fbsession.friends_get}
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_nomethod_error_raises_ruby_equivalent
|
51
|
+
fbsession = @fbsession.dup
|
52
|
+
force_to_be_activated(fbsession)
|
53
|
+
fbsession.expects(:post_request).returns(RFacebook::Dummy::ERROR_RESPONSE_3)
|
54
|
+
assert_raise(NoMethodError){fbsession.friends_get}
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_badargument_error_raises_ruby_equivalent
|
58
|
+
fbsession = @fbsession.dup
|
59
|
+
force_to_be_activated(fbsession)
|
60
|
+
fbsession.expects(:post_request).returns(RFacebook::Dummy::ERROR_RESPONSE_100)
|
61
|
+
assert_raise(ArgumentError){fbsession.friends_get}
|
62
|
+
fbsession.expects(:post_request).returns(RFacebook::Dummy::ERROR_RESPONSE_606)
|
63
|
+
assert_raise(ArgumentError){fbsession.friends_get}
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_expiration_error_raises_error_and_sets_expired_flag
|
67
|
+
fbsession = @fbsession.dup
|
68
|
+
force_to_be_activated(fbsession)
|
69
|
+
fbsession.expects(:post_request).returns(RFacebook::Dummy::ERROR_RESPONSE_102)
|
70
|
+
assert_raise(RFacebook::FacebookSession::ExpiredSessionStandardError){fbsession.friends_get}
|
71
|
+
assert fbsession.expired?
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_facepricot_response_to_group_getMembers
|
75
|
+
fbsession = @fbsession.dup
|
76
|
+
force_to_be_activated(fbsession)
|
77
|
+
fbsession.expects(:post_request).returns(RFacebook::Dummy::GROUP_GETMEMBERS_RESPONSE)
|
78
|
+
memberInfo = fbsession.group_getMembers
|
79
|
+
assert memberInfo
|
80
|
+
assert_equal 4, memberInfo.members.uid_list.size
|
81
|
+
assert_equal 1, memberInfo.admins.uid_list.size
|
82
|
+
assert memberInfo.officers
|
83
|
+
assert memberInfo.not_replied
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_api_call_to_users_getLoggedInUser
|
87
|
+
fbsession = @fbsession.dup
|
88
|
+
force_to_be_activated(fbsession)
|
89
|
+
fbsession.expects(:post_request).returns(RFacebook::Dummy::USERS_GETLOGGEDINUSER_RESPONSE)
|
90
|
+
assert_equal "1234567", fbsession.users_getLoggedInUser
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_api_call_to_users_getInfo
|
94
|
+
fbsession = @fbsession.dup
|
95
|
+
force_to_be_activated(fbsession)
|
96
|
+
fbsession.expects(:post_request).returns(RFacebook::Dummy::USERS_GETINFO_RESPONSE)
|
97
|
+
userInfo = fbsession.users_getInfo
|
98
|
+
assert userInfo
|
99
|
+
assert_equal "94303", userInfo.current_location.get(:zip)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_should_raise_not_activated
|
103
|
+
assert_raise(RFacebook::FacebookSession::NotActivatedStandardError){@fbsession.friends_get}
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Copyright (c) 2007, Matt Pizzimenti (www.livelearncode.com)
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
# Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
# are permitted provided that the following conditions are met:
|
6
|
+
#
|
7
|
+
# Redistributions of source code must retain the above copyright notice,
|
8
|
+
# this list of conditions and the following disclaimer.
|
9
|
+
#
|
10
|
+
# Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
# this list of conditions and the following disclaimer in the documentation
|
12
|
+
# and/or other materials provided with the distribution.
|
13
|
+
#
|
14
|
+
# Neither the name of the original author nor the names of contributors
|
15
|
+
# may be used to endorse or promote products derived from this software
|
16
|
+
# without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
21
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
22
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
#
|
29
|
+
|
30
|
+
require File.dirname(__FILE__) + '/facebook_session_test_methods'
|
31
|
+
|
32
|
+
class FacebookWebSessionTest < Test::Unit::TestCase
|
33
|
+
|
34
|
+
include FacebookSessionTestMethods
|
35
|
+
|
36
|
+
def setup
|
37
|
+
@fbsession = RFacebook::FacebookWebSession.new(RFacebook::Dummy::API_KEY, RFacebook::Dummy::API_SECRET)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_should_return_install_url
|
41
|
+
assert_equal "http://www.facebook.com/install.php?api_key=#{RFacebook::Dummy::API_KEY}", @fbsession.get_install_url
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_return_login_url
|
45
|
+
assert_equal "http://www.facebook.com/login.php?v=1.0&api_key=#{RFacebook::Dummy::API_KEY}", @fbsession.get_login_url
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|