facebooker-lite 1.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +15 -0
- data/CHANGELOG.rdoc +24 -0
- data/COPYING.rdoc +19 -0
- data/Manifest.txt +114 -0
- data/README.rdoc +120 -0
- data/Rakefile +94 -0
- data/TODO.rdoc +4 -0
- data/facebooker.gemspec +42 -0
- data/generators/xd_receiver/templates/xd_receiver.html +10 -0
- data/generators/xd_receiver/templates/xd_receiver_ssl.html +10 -0
- data/generators/xd_receiver/xd_receiver_generator.rb +10 -0
- data/init.rb +25 -0
- data/install.rb +12 -0
- data/lib/facebooker.rb +261 -0
- data/lib/facebooker/adapters/adapter_base.rb +91 -0
- data/lib/facebooker/adapters/bebo_adapter.rb +77 -0
- data/lib/facebooker/adapters/facebook_adapter.rb +60 -0
- data/lib/facebooker/admin.rb +42 -0
- data/lib/facebooker/application.rb +37 -0
- data/lib/facebooker/attachment.rb +51 -0
- data/lib/facebooker/batch_request.rb +45 -0
- data/lib/facebooker/data.rb +57 -0
- data/lib/facebooker/feed.rb +78 -0
- data/lib/facebooker/logging.rb +44 -0
- data/lib/facebooker/mobile.rb +20 -0
- data/lib/facebooker/mock/service.rb +50 -0
- data/lib/facebooker/mock/session.rb +18 -0
- data/lib/facebooker/model.rb +139 -0
- data/lib/facebooker/models/affiliation.rb +10 -0
- data/lib/facebooker/models/album.rb +11 -0
- data/lib/facebooker/models/applicationproperties.rb +39 -0
- data/lib/facebooker/models/applicationrestrictions.rb +10 -0
- data/lib/facebooker/models/comment.rb +9 -0
- data/lib/facebooker/models/cookie.rb +10 -0
- data/lib/facebooker/models/education_info.rb +11 -0
- data/lib/facebooker/models/event.rb +28 -0
- data/lib/facebooker/models/family_relative_info.rb +7 -0
- data/lib/facebooker/models/friend_list.rb +16 -0
- data/lib/facebooker/models/group.rb +36 -0
- data/lib/facebooker/models/info_item.rb +10 -0
- data/lib/facebooker/models/info_section.rb +10 -0
- data/lib/facebooker/models/location.rb +8 -0
- data/lib/facebooker/models/message_thread.rb +89 -0
- data/lib/facebooker/models/notifications.rb +17 -0
- data/lib/facebooker/models/page.rb +46 -0
- data/lib/facebooker/models/photo.rb +19 -0
- data/lib/facebooker/models/tag.rb +12 -0
- data/lib/facebooker/models/user.rb +751 -0
- data/lib/facebooker/models/video.rb +9 -0
- data/lib/facebooker/models/work_info.rb +10 -0
- data/lib/facebooker/parser.rb +970 -0
- data/lib/facebooker/rails/backwards_compatible_param_checks.rb +31 -0
- data/lib/facebooker/rails/controller.rb +353 -0
- data/lib/facebooker/rails/extensions/action_controller.rb +47 -0
- data/lib/facebooker/rails/extensions/rack_setup.rb +16 -0
- data/lib/facebooker/rails/extensions/routing.rb +15 -0
- data/lib/facebooker/rails/facebook_pretty_errors.rb +22 -0
- data/lib/facebooker/rails/facebook_request_fix.rb +28 -0
- data/lib/facebooker/rails/facebook_request_fix_2-3.rb +31 -0
- data/lib/facebooker/rails/facebook_session_handling.rb +68 -0
- data/lib/facebooker/rails/facebook_url_rewriting.rb +60 -0
- data/lib/facebooker/rails/helpers/fb_connect.rb +75 -0
- data/lib/facebooker/rails/integration_session.rb +38 -0
- data/lib/facebooker/rails/profile_publisher_extensions.rb +42 -0
- data/lib/facebooker/rails/publisher.rb +608 -0
- data/lib/facebooker/rails/routing.rb +49 -0
- data/lib/facebooker/rails/test_helpers.rb +68 -0
- data/lib/facebooker/rails/utilities.rb +22 -0
- data/lib/facebooker/server_cache.rb +24 -0
- data/lib/facebooker/service.rb +103 -0
- data/lib/facebooker/service/base_service.rb +19 -0
- data/lib/facebooker/service/curl_service.rb +44 -0
- data/lib/facebooker/service/net_http_service.rb +12 -0
- data/lib/facebooker/service/typhoeus_multi_service.rb +27 -0
- data/lib/facebooker/service/typhoeus_service.rb +17 -0
- data/lib/facebooker/session.rb +786 -0
- data/lib/facebooker/stream_post.rb +19 -0
- data/lib/facebooker/version.rb +9 -0
- data/lib/net/http_multipart_post.rb +123 -0
- data/lib/rack/facebook.rb +89 -0
- data/lib/rack/facebook_session.rb +21 -0
- data/lib/tasks/facebooker.rake +19 -0
- data/lib/tasks/facebooker.rb +2 -0
- data/lib/tasks/tunnel.rake +46 -0
- data/rails/init.rb +1 -0
- data/setup.rb +1585 -0
- data/templates/layout.erb +24 -0
- data/test/facebooker/adapters_test.rb +191 -0
- data/test/facebooker/admin_test.rb +102 -0
- data/test/facebooker/application_test.rb +110 -0
- data/test/facebooker/attachment_test.rb +72 -0
- data/test/facebooker/batch_request_test.rb +83 -0
- data/test/facebooker/data_test.rb +86 -0
- data/test/facebooker/logging_test.rb +43 -0
- data/test/facebooker/mobile_test.rb +45 -0
- data/test/facebooker/model_test.rb +133 -0
- data/test/facebooker/models/event_test.rb +15 -0
- data/test/facebooker/models/page_test.rb +56 -0
- data/test/facebooker/models/photo_test.rb +16 -0
- data/test/facebooker/models/user_test.rb +1074 -0
- data/test/facebooker/rails/facebook_request_fix_2-3_test.rb +25 -0
- data/test/facebooker/rails/facebook_url_rewriting_test.rb +76 -0
- data/test/facebooker/rails/integration_session_test.rb +13 -0
- data/test/facebooker/rails/publisher_test.rb +538 -0
- data/test/facebooker/rails_integration_test.rb +1543 -0
- data/test/facebooker/server_cache_test.rb +44 -0
- data/test/facebooker/service_test.rb +58 -0
- data/test/facebooker/session_test.rb +883 -0
- data/test/facebooker_test.rb +1263 -0
- data/test/fixtures/multipart_post_body_with_only_parameters.txt +33 -0
- data/test/fixtures/multipart_post_body_with_single_file.txt +38 -0
- data/test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt +38 -0
- data/test/net/http_multipart_post_test.rb +52 -0
- data/test/rack/facebook_session_test.rb +34 -0
- data/test/rack/facebook_test.rb +73 -0
- data/test/rails_test_helper.rb +36 -0
- data/test/test_helper.rb +74 -0
- metadata +278 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<fb:fbml>
|
|
2
|
+
<style>
|
|
3
|
+
body { background-color: #fff; color: #333; }
|
|
4
|
+
|
|
5
|
+
body, p, ol, ul, td {
|
|
6
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
|
7
|
+
font-size: 13px;
|
|
8
|
+
line-height: 18px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
pre {
|
|
12
|
+
background-color: #eee;
|
|
13
|
+
padding: 10px;
|
|
14
|
+
font-size: 11px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
a { color: #000; }
|
|
18
|
+
a:visited { color: #666; }
|
|
19
|
+
a:hover { color: #fff; background-color:#000; }
|
|
20
|
+
</style>
|
|
21
|
+
|
|
22
|
+
<%= @contents %>
|
|
23
|
+
|
|
24
|
+
</fb:fbml>
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
|
+
|
|
3
|
+
class Facebooker::AdaptersTest < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
ENV['FACEBOOK_API_KEY'] = '1234567'
|
|
6
|
+
ENV['FACEBOOK_SECRET_KEY'] = '7654321'
|
|
7
|
+
@current_adapter = Facebooker.current_adapter
|
|
8
|
+
Facebooker.current_adapter = nil
|
|
9
|
+
@bebo_api_key = "bebo_api_key"; @bebo_secret_key = "bebo_secret_key"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def teardown
|
|
13
|
+
flexmock_close
|
|
14
|
+
Facebooker.current_adapter = @current_adapter
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_load_default_adapter
|
|
18
|
+
session = Facebooker::CanvasSession.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY'])
|
|
19
|
+
assert_equal(ENV['FACEBOOK_API_KEY'], Facebooker::Session.api_key)
|
|
20
|
+
assert( Facebooker::FacebookAdapter === Facebooker.current_adapter)
|
|
21
|
+
|
|
22
|
+
ENV['FACEBOOK_API_KEY'] = nil
|
|
23
|
+
ENV['FACEBOOK_SECRET_KEY'] = nil
|
|
24
|
+
Facebooker.current_adapter = nil
|
|
25
|
+
Facebooker::AdapterBase.stubs(:facebooker_config).returns({"api_key" => "facebook_key", "secret_key" => "facebook_secret" })
|
|
26
|
+
assert( Facebooker::FacebookAdapter === Facebooker.current_adapter)
|
|
27
|
+
assert_equal("facebook_key", Facebooker::Session.api_key)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_load_bebo_adapter
|
|
31
|
+
|
|
32
|
+
load_bebo_adapter
|
|
33
|
+
assert_equal(@bebo_api_key, Facebooker::Session.api_key)
|
|
34
|
+
assert_equal(@bebo_secret_key, Facebooker::Session.secret_key)
|
|
35
|
+
assert(Facebooker::BeboAdapter === Facebooker.current_adapter, " Bebo adapter not loaded correctly.")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def load_bebo_adapter
|
|
39
|
+
@bebo_api_key = "bebo_api_key"; @bebo_secret_key = "bebo_secret_key"
|
|
40
|
+
|
|
41
|
+
Facebooker::AdapterBase.stubs(:facebooker_config).returns({"bebo_api_key" => @bebo_api_key, "bebo_adapter" => "BeboAdapter", "bebo_secret_key" => @bebo_secret_key, "foo" => "bar"})
|
|
42
|
+
Facebooker.load_adapter(:config_key_base => "bebo")
|
|
43
|
+
@session = Facebooker::CanvasSession.create(@bebo_api_key, @bebo_secret_key)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_adapter_details
|
|
47
|
+
test_load_default_adapter
|
|
48
|
+
|
|
49
|
+
assert_equal("apps.facebook.com", Facebooker.canvas_server_base)
|
|
50
|
+
assert_equal("api.facebook.com", Facebooker.api_server_base)
|
|
51
|
+
assert_equal("www.facebook.com", Facebooker.www_server_base_url)
|
|
52
|
+
assert_equal("http://api.facebook.com", Facebooker.api_server_base_url)
|
|
53
|
+
assert(Facebooker.is_for?(:facebook))
|
|
54
|
+
load_bebo_adapter
|
|
55
|
+
|
|
56
|
+
assert_equal("apps.bebo.com", Facebooker.canvas_server_base)
|
|
57
|
+
assert_equal("apps.bebo.com", Facebooker.api_server_base)
|
|
58
|
+
assert_equal("www.bebo.com", Facebooker.www_server_base_url)
|
|
59
|
+
assert_equal("http://apps.bebo.com", Facebooker.api_server_base_url)
|
|
60
|
+
assert_equal("http://www.bebo.com/SignIn.jsp?ApiKey=bebo_api_key&v=1.0&canvas=true", @session.login_url)
|
|
61
|
+
assert_equal("http://www.bebo.com/c/apps/add?ApiKey=bebo_api_key&v=1.0", @session.install_url)
|
|
62
|
+
assert(Facebooker.is_for?(:bebo))
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_adapter_failures
|
|
67
|
+
Facebooker::AdapterBase.stubs(:facebooker_config).returns({})
|
|
68
|
+
|
|
69
|
+
assert_raises(Facebooker::AdapterBase::UnableToLoadAdapter){
|
|
70
|
+
Facebooker.load_adapter(:config_key_base => "bebo")
|
|
71
|
+
}
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_bebo_specific_issues
|
|
75
|
+
load_bebo_adapter
|
|
76
|
+
|
|
77
|
+
# @session.send(:service).stubs(:post).returns([{:name => "foo"}])
|
|
78
|
+
Net::HTTP.stubs(:post_form).returns("<profile_setFBML_response></profile_setFBML_response>")
|
|
79
|
+
user = Facebooker::User.new(:uid => "123456")
|
|
80
|
+
user.session = @session
|
|
81
|
+
user.set_profile_fbml("foo","bar","foo")
|
|
82
|
+
assert(true)
|
|
83
|
+
Net::HTTP.stubs(:post_form).returns("<users_getInfo_response> <user><uid>123456</uid><name>foo</name></user></users_getInfo_response>")
|
|
84
|
+
user.populate(:name)
|
|
85
|
+
assert(true)
|
|
86
|
+
assert_equal("foo", user.name)
|
|
87
|
+
action = Facebooker::Feed::TemplatizedAction.new()
|
|
88
|
+
action.title_template = "foo"
|
|
89
|
+
Net::HTTP.stubs(:post_form).returns("<feed_publishTemplatizedAction_response>1</feed_publishTemplatizedAction_response>")
|
|
90
|
+
user.publish_templatized_action(action)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_bebo_process_data
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_fetch_config_for_can_find_top_level_api_key
|
|
98
|
+
old = Facebooker.instance_variable_get('@raw_facebooker_configuration')
|
|
99
|
+
# Now that we've backed up the old value...
|
|
100
|
+
raw_fb_config = { 'api_key' => 'a key' }
|
|
101
|
+
Facebooker.instance_variable_set('@raw_facebooker_configuration', raw_fb_config)
|
|
102
|
+
assert_equal Facebooker.fetch_config_for( 'a key' ), raw_fb_config
|
|
103
|
+
ensure
|
|
104
|
+
# Put the old value back
|
|
105
|
+
Facebooker.instance_variable_set('@raw_facebooker_configuration', old)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_fetch_config_for_can_find_deep_api_key
|
|
109
|
+
old = Facebooker.instance_variable_get('@raw_facebooker_configuration')
|
|
110
|
+
# Now that we've backed up the old value...
|
|
111
|
+
raw_fb_config = { 'api_key' => 'a key',
|
|
112
|
+
'alternative_keys' => {
|
|
113
|
+
'another key' => { 'secret_key' => 'sdfsd' },
|
|
114
|
+
'yet another key' => { 'secret_key' => '9ho2h' } } }
|
|
115
|
+
Facebooker.instance_variable_set('@raw_facebooker_configuration', raw_fb_config)
|
|
116
|
+
assert_equal raw_fb_config['alternative_keys']['another key'].merge( 'api_key' => 'another key' ),
|
|
117
|
+
Facebooker.fetch_config_for( 'another key' )
|
|
118
|
+
ensure
|
|
119
|
+
# Put the old value back
|
|
120
|
+
Facebooker.instance_variable_set('@raw_facebooker_configuration', old)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def test_fetch_config_for_returns_false_if_no_apikey_found
|
|
124
|
+
old = Facebooker.instance_variable_get('@raw_facebooker_configuration')
|
|
125
|
+
# Now that we've backed up the old value...
|
|
126
|
+
raw_fb_config = { 'api_key' => 'a key' }
|
|
127
|
+
Facebooker.instance_variable_set('@raw_facebooker_configuration', raw_fb_config)
|
|
128
|
+
assert ! Facebooker.fetch_config_for( 'another key' )
|
|
129
|
+
ensure
|
|
130
|
+
# Put the old value back
|
|
131
|
+
Facebooker.instance_variable_set('@raw_facebooker_configuration', old)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_with_application_yields_if_no_config_is_found
|
|
135
|
+
flexmock( Facebooker ).
|
|
136
|
+
should_receive( :fetch_config_for ).
|
|
137
|
+
and_return( false )
|
|
138
|
+
# Is there a better way to assert the block is yielded?
|
|
139
|
+
@changes_to_true = false
|
|
140
|
+
Facebooker.with_application('somekey not found') do
|
|
141
|
+
@changes_to_true = true
|
|
142
|
+
end
|
|
143
|
+
assert @changes_to_true
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_with_application_changes_config_inside_block
|
|
147
|
+
flexmock( Facebooker ).
|
|
148
|
+
should_receive( :fetch_config_for ).
|
|
149
|
+
and_return({ 'api_key' => 'a key',
|
|
150
|
+
'secret_key' => 'my secret key' })
|
|
151
|
+
Facebooker.with_application('a key') do
|
|
152
|
+
@secret_in_block = Facebooker.secret_key
|
|
153
|
+
end
|
|
154
|
+
# Check outside the block, assures the assertion gets run
|
|
155
|
+
assert_equal 'my secret key', @secret_in_block
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def test_with_application_restores_last_config_outside_block
|
|
159
|
+
flexmock( Facebooker ).
|
|
160
|
+
should_receive( :fetch_config_for ).
|
|
161
|
+
and_return( { 'api_key' => 'a key',
|
|
162
|
+
'secret_key' => 'my secret key' },
|
|
163
|
+
{ 'api_key' => 'another key',
|
|
164
|
+
'secret_key' => 'my other secret key' } )
|
|
165
|
+
Facebooker.with_application('a key') do
|
|
166
|
+
Facebooker.with_application('another key') do
|
|
167
|
+
end
|
|
168
|
+
@secret_in_outer_block = Facebooker.secret_key
|
|
169
|
+
end
|
|
170
|
+
# Check outside the block, assures the assertion gets run
|
|
171
|
+
assert_equal 'my secret key', @secret_in_outer_block
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def test_adapter_loaded_when_config_applied
|
|
175
|
+
flexmock( Facebooker ).
|
|
176
|
+
should_receive( :fetch_config_for ).
|
|
177
|
+
and_return(
|
|
178
|
+
{ 'api_key' => 'a_key',
|
|
179
|
+
'canvas_page_name' => 'default_name' },
|
|
180
|
+
{ 'api_key' => 'another_key',
|
|
181
|
+
'canvas_page_name' => 'alternative_name' }
|
|
182
|
+
)
|
|
183
|
+
Facebooker.with_application('a_key') do
|
|
184
|
+
assert_equal 'default_name', Facebooker.current_adapter.facebooker_config['canvas_page_name']
|
|
185
|
+
Facebooker.with_application('another_key') do
|
|
186
|
+
assert_equal 'alternative_name', Facebooker.current_adapter.facebooker_config['canvas_page_name']
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
|
+
|
|
3
|
+
class Facebooker::AdminTest < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@session = Facebooker::Session.create('apikey', 'secretkey')
|
|
6
|
+
Facebooker.use_curl=false
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_can_ask_facebook_to_set_app_properties
|
|
10
|
+
expect_http_posts_with_responses(example_set_properties_xml)
|
|
11
|
+
properties = { :application_name => "Video Jukebox", :dev_mode => 0 }
|
|
12
|
+
assert(@session.admin.set_app_properties(properties))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_set_app_properties_json_conversion
|
|
16
|
+
properties = { :application_name => "Video Jukebox", :dev_mode => 0 }
|
|
17
|
+
flexmock(@session).should_receive(:post).with('facebook.admin.setAppProperties', :properties => properties.to_json).and_return('1').once
|
|
18
|
+
assert(@session.admin.set_app_properties(properties))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_can_ask_facebook_to_get_app_properties
|
|
22
|
+
expect_http_posts_with_responses(example_get_properties_xml)
|
|
23
|
+
properties = [ :application_name, :dev_mode ]
|
|
24
|
+
assert(@session.admin.get_app_properties(properties))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_can_get_properties
|
|
28
|
+
mock_http = establish_session
|
|
29
|
+
mock_http.should_receive(:post_form).and_return(example_get_properties_xml).once.ordered(:posts)
|
|
30
|
+
p = @session.admin.get_app_properties(:application_name, :dev_mode, :canvas_name)
|
|
31
|
+
assert_equal 'Video Jukebox', p.application_name
|
|
32
|
+
assert_equal 0, p.dev_mode
|
|
33
|
+
assert_equal 'my_canvas', p.canvas_name
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_can_set_restriction_info
|
|
37
|
+
restrictions = {:age => '21', :type => 'alcohol'}
|
|
38
|
+
flexmock(@session).should_receive(:post).with('facebook.admin.setRestrictionInfo', :restriction_str => restrictions.to_json).and_return('1').once
|
|
39
|
+
assert(@session.admin.set_restriction_info(restrictions))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_can_get_restriction_info
|
|
43
|
+
mock_http = establish_session
|
|
44
|
+
mock_http.should_receive(:post_form).and_return(example_get_restriction_info_xml).once.ordered(:posts)
|
|
45
|
+
r = @session.admin.get_restriction_info
|
|
46
|
+
assert_equal 'alcohol', r.type
|
|
47
|
+
assert_equal '21', r.age
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_can_get_allocation
|
|
51
|
+
mock_http = establish_session
|
|
52
|
+
mock_http.should_receive(:post_form).and_return(example_get_allocation_xml).once.ordered(:posts)
|
|
53
|
+
alloc = @session.admin.get_allocation(:notifications_per_day)
|
|
54
|
+
assert_equal 40, alloc
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
def example_set_properties_xml
|
|
59
|
+
<<-XML
|
|
60
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
61
|
+
<admin_setAppProperties_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
62
|
+
xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">1</admin_setAppProperties_response>
|
|
63
|
+
XML
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def example_get_properties_xml
|
|
67
|
+
<<-XML
|
|
68
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
69
|
+
<admin_getAppProperties_response
|
|
70
|
+
xmlns="http://api.facebook.com/1.0/"
|
|
71
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
72
|
+
xsi:schemaLocation="http://api.facebook.com/1.0/http://api.facebook.com/1.0/facebook.xsd">
|
|
73
|
+
{"application_name":"Video Jukebox","callback_url":"http:\/\/67.207.144.245\/","dev_mode":0,"canvas_name":"my_canvas"}
|
|
74
|
+
</admin_getAppProperties_response>
|
|
75
|
+
XML
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def example_get_restriction_info_xml
|
|
79
|
+
<<-XML
|
|
80
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
81
|
+
<admin_getRestrictionInfo_response
|
|
82
|
+
xmlns="http://api.facebook.com/1.0/"
|
|
83
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
84
|
+
xsi:schemaLocation="http://api.facebook.com/1.0/http://api.facebook.com/1.0/facebook.xsd">
|
|
85
|
+
{"age":"21","location":"","age_distribution":"","type":"alcohol"}
|
|
86
|
+
</admin_getRestrictionInfo_response>
|
|
87
|
+
XML
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def example_get_allocation_xml
|
|
91
|
+
<<-XML
|
|
92
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
93
|
+
<admin_getAllocation_response
|
|
94
|
+
xmlns="http://api.facebook.com/1.0/"
|
|
95
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
96
|
+
xsi:schemaLocation="http://api.facebook.com/1.0/http://api.facebook.com/1.0/facebook.xsd">
|
|
97
|
+
40
|
|
98
|
+
</admin_getAllocation_response>
|
|
99
|
+
XML
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
|
+
|
|
3
|
+
class Facebooker::ApplicationTest < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@session = Facebooker::Session.create('apikey', 'secretkey')
|
|
6
|
+
Facebooker.use_curl=false
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_can_get_public_info
|
|
10
|
+
mock_http = establish_session
|
|
11
|
+
mock_http.should_receive(:post_form).and_return(example_get_public_info_xml).once.ordered(:posts)
|
|
12
|
+
info = @session.application.get_public_info(:app_id => 2413267546)
|
|
13
|
+
assert_equal '2413267546', info["app_id"]
|
|
14
|
+
assert_equal 'ilike', info["canvas_name"]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_can_add_global_news
|
|
18
|
+
@session.expects(:post).with('facebook.dashboard.addGlobalNews', {:news => [{:message => 'Hi all users', :action_link => {:text => 'Hi application', :href => 'http://facebook.er/'}}], :image => 'http://facebook.er/icon.png'})
|
|
19
|
+
@session.application.add_global_news [{ :message => 'Hi all users', :action_link => { :text => "Hi application", :href => 'http://facebook.er/' }}], 'http://facebook.er/icon.png'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_parse_add_global_news
|
|
23
|
+
expect_http_posts_with_responses(add_global_news_xml)
|
|
24
|
+
assert_equal("342345290762", @session.application.add_global_news([{ :message => 'Hi user', :action_link => { :text => "Uh hey there app", :href => 'http://facebook.er/' }}], 'http://facebook.er/icon.png'))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_can_get_global_news
|
|
28
|
+
@session.expects(:post).with('facebook.dashboard.getGlobalNews', { :news_ids => ['310354202543'] })
|
|
29
|
+
@session.application.get_global_news '310354202543'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_parse_get_global_news
|
|
33
|
+
expect_http_posts_with_responses(get_global_news_xml)
|
|
34
|
+
assert_equal({"342345290762"=>{"fbid"=>"342345290762", "time"=>"1266609698761", "news"=>[{"action_link"=>{"href"=>"http://facebook.er/", "text"=>"Hi application"}, "message"=>"Hi all users"}], "image"=>"http://facebook.er/icon.png"}}, @session.application.get_global_news('342345290762'))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_can_clear_global_news
|
|
38
|
+
@session.expects(:post).with('facebook.dashboard.clearGlobalNews', { :news_ids => ['310354202543'] })
|
|
39
|
+
@session.application.clear_global_news '310354202543'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_can_parse_global_news
|
|
43
|
+
expect_http_posts_with_responses(clear_global_news_xml)
|
|
44
|
+
assert_equal({"342345290762"=>true}, @session.application.clear_global_news('342345290762'))
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def example_get_public_info_xml
|
|
50
|
+
<<-XML
|
|
51
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
52
|
+
<application_getPublicInfo_response
|
|
53
|
+
xmlns="http://api.facebook.com/1.0/"
|
|
54
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
55
|
+
xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
|
|
56
|
+
<app_id>2413267546</app_id>
|
|
57
|
+
<api_key>c756401cb800e295f21d723b7842ea83</api_key>
|
|
58
|
+
<canvas_name>ilike</canvas_name>
|
|
59
|
+
<display_name>iLike</display_name>
|
|
60
|
+
<icon_url>http://photos-c.ak.facebook.com/photos-ak-sctm/v43/130/2413267546/app_2_2413267546_6706.gif</icon_url>
|
|
61
|
+
<logo_url>http://photos-c.ak.facebook.com/photos-ak-sctm/v43/130/2413267546/app_1_2413267546_2324.gif</logo_url>
|
|
62
|
+
<developers list="true"/>
|
|
63
|
+
<company_name>iLike, inc</company_name>
|
|
64
|
+
<description>iLike lets you add music to your profile and find your favorite concerts (not to mention see who else is going!). Bonus: Use it to get free mp3's that match your tastes and try to beat your friends at the Music Challenge.</description>
|
|
65
|
+
<daily_active_users>392008</daily_active_users>
|
|
66
|
+
<weekly_active_users>1341749</weekly_active_users>
|
|
67
|
+
<monthly_active_users>3922784</monthly_active_users>
|
|
68
|
+
</application_getPublicInfo_response>
|
|
69
|
+
XML
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def add_global_news_xml
|
|
73
|
+
<<-XML
|
|
74
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
75
|
+
<dashboard_addGlobalNews_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">342345290762</dashboard_addGlobalNews_response>
|
|
76
|
+
XML
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def get_global_news_xml
|
|
80
|
+
<<-XML
|
|
81
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
82
|
+
<dashboard_getGlobalNews_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true">
|
|
83
|
+
<dashboard_getGlobalNews_response_elt key="342345290762" list="true">
|
|
84
|
+
<dashboard_getGlobalNews_response_elt_elt key="image">http://facebook.er/icon.png</dashboard_getGlobalNews_response_elt_elt>
|
|
85
|
+
<dashboard_getGlobalNews_response_elt_elt key="news" list="true">
|
|
86
|
+
<dashboard_getGlobalNews_response_elt_elt_elt list="true">
|
|
87
|
+
<dashboard_getGlobalNews_response_elt_elt_elt_elt key="message">Hi all users</dashboard_getGlobalNews_response_elt_elt_elt_elt>
|
|
88
|
+
<dashboard_getGlobalNews_response_elt_elt_elt_elt key="action_link" list="true">
|
|
89
|
+
<dashboard_getGlobalNews_response_elt_elt_elt_elt_elt key="href">http://facebook.er/</dashboard_getGlobalNews_response_elt_elt_elt_elt_elt>
|
|
90
|
+
<dashboard_getGlobalNews_response_elt_elt_elt_elt_elt key="text">Hi application</dashboard_getGlobalNews_response_elt_elt_elt_elt_elt>
|
|
91
|
+
</dashboard_getGlobalNews_response_elt_elt_elt_elt>
|
|
92
|
+
</dashboard_getGlobalNews_response_elt_elt_elt>
|
|
93
|
+
</dashboard_getGlobalNews_response_elt_elt>
|
|
94
|
+
<dashboard_getGlobalNews_response_elt_elt key="time">1266609698761</dashboard_getGlobalNews_response_elt_elt>
|
|
95
|
+
<dashboard_getGlobalNews_response_elt_elt key="fbid">342345290762</dashboard_getGlobalNews_response_elt_elt>
|
|
96
|
+
</dashboard_getGlobalNews_response_elt>
|
|
97
|
+
</dashboard_getGlobalNews_response>
|
|
98
|
+
XML
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def clear_global_news_xml
|
|
102
|
+
<<-XML
|
|
103
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
104
|
+
<dashboard_clearGlobalNews_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true">
|
|
105
|
+
<dashboard_clearGlobalNews_response_elt key="342345290762">1</dashboard_clearGlobalNews_response_elt>
|
|
106
|
+
</dashboard_clearGlobalNews_response>
|
|
107
|
+
XML
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
2
|
+
|
|
3
|
+
class Facebooker::AttachmentTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
super
|
|
7
|
+
@attachment = Facebooker::Attachment.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_can_create_attachment
|
|
11
|
+
attachment = Facebooker::Attachment.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_can_set_name
|
|
15
|
+
@attachment.name = "my name"
|
|
16
|
+
assert_equal({:name=>"my name"},@attachment.to_hash)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_can_set_href
|
|
20
|
+
@attachment.href="my href"
|
|
21
|
+
assert_equal({:href=>"my href"},@attachment.to_hash)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_can_set_caption
|
|
25
|
+
@attachment.caption="my caption"
|
|
26
|
+
assert_equal({:caption=>"my caption"},@attachment.to_hash)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_can_set_description
|
|
30
|
+
@attachment.description="my description"
|
|
31
|
+
assert_equal({:description=>"my description"},@attachment.to_hash)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_can_set_comments_xid
|
|
35
|
+
@attachment.comments_xid="my xid"
|
|
36
|
+
assert_equal({:comments_xid=>"my xid"},@attachment.to_hash)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_can_add_media
|
|
40
|
+
@attachment.add_media(:type=>"image",:src=>"http://www.google.com",:href=>"http://www.bing.com")
|
|
41
|
+
assert_equal({:media=>[{:type=>"image",:src=>"http://www.google.com",:href=>"http://www.bing.com"}]},@attachment.to_hash)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_can_add_image
|
|
45
|
+
@attachment.add_image("image_source","image_url")
|
|
46
|
+
assert_equal({:media=>[{:type=>"image",:src=>"image_source",:href=>"image_url"}]},@attachment.to_hash)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_can_add_mp3_with_only_required_params
|
|
50
|
+
@attachment.add_mp3("required_source")
|
|
51
|
+
assert_equal({:media=>[{:type=>"mp3",:src=>"required_source"}]},@attachment.to_hash)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_only_includes_mp3_optional_params_that_are_provided
|
|
55
|
+
@attachment.add_mp3("required_source","seven nation army","white stripes")
|
|
56
|
+
assert_equal({:media=>[{:type=>"mp3",:src=>"required_source",:title=>"seven nation army",:artist=>"white stripes"}]},@attachment.to_hash)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_can_add_flash_with_only_required_params
|
|
60
|
+
@attachment.add_flash("swf_source","img_source")
|
|
61
|
+
assert_equal({:media=>[{:type=>"flash",:swfsrc=>"swf_source",:imgsrc=>"img_source"}]},@attachment.to_hash)
|
|
62
|
+
end
|
|
63
|
+
def test_can_add_flash_with_optional_params
|
|
64
|
+
@attachment.add_flash("swf_source","img_source",100,80,160)
|
|
65
|
+
assert_equal({:media=>[{:type=>"flash",
|
|
66
|
+
:swfsrc=>"swf_source",
|
|
67
|
+
:imgsrc=>"img_source",
|
|
68
|
+
:width=>100,
|
|
69
|
+
:height=>80,
|
|
70
|
+
:expanded_width=>160}]},@attachment.to_hash)
|
|
71
|
+
end
|
|
72
|
+
end
|