require File.expand_path(File.dirname(__FILE__) + '/../test_helper') class Facebooker::AdaptersTest < Test::Unit::TestCase def setup ENV['FACEBOOK_API_KEY'] = '1234567' ENV['FACEBOOK_SECRET_KEY'] = '7654321' @current_adapter = Facebooker.current_adapter Facebooker.current_adapter = nil @bebo_api_key = "bebo_api_key"; @bebo_secret_key = "bebo_secret_key" end def teardown flexmock_close Facebooker.current_adapter = @current_adapter end def test_load_default_adapter session = Facebooker::CanvasSession.create(ENV['FACEBOOK_API_KEY'], ENV['FACEBOOK_SECRET_KEY']) assert_equal(ENV['FACEBOOK_API_KEY'], Facebooker::Session.api_key) assert( Facebooker::FacebookAdapter === Facebooker.current_adapter) ENV['FACEBOOK_API_KEY'] = nil ENV['FACEBOOK_SECRET_KEY'] = nil Facebooker.current_adapter = nil Facebooker::AdapterBase.stubs(:facebooker_config).returns({"api_key" => "facebook_key", "secret_key" => "facebook_secret" }) assert( Facebooker::FacebookAdapter === Facebooker.current_adapter) assert_equal("facebook_key", Facebooker::Session.api_key) end def test_load_bebo_adapter load_bebo_adapter assert_equal(@bebo_api_key, Facebooker::Session.api_key) assert_equal(@bebo_secret_key, Facebooker::Session.secret_key) assert(Facebooker::BeboAdapter === Facebooker.current_adapter, " Bebo adapter not loaded correctly.") end def load_bebo_adapter @bebo_api_key = "bebo_api_key"; @bebo_secret_key = "bebo_secret_key" Facebooker::AdapterBase.stubs(:facebooker_config).returns({"bebo_api_key" => @bebo_api_key, "bebo_adapter" => "BeboAdapter", "bebo_secret_key" => @bebo_secret_key, "foo" => "bar"}) Facebooker.load_adapter(:config_key_base => "bebo") @session = Facebooker::CanvasSession.create(@bebo_api_key, @bebo_secret_key) end def test_adapter_details test_load_default_adapter assert_equal("apps.facebook.com", Facebooker.canvas_server_base) assert_equal("api.facebook.com", Facebooker.api_server_base) assert_equal("www.facebook.com", Facebooker.www_server_base_url) assert_equal("http://api.facebook.com", Facebooker.api_server_base_url) assert(Facebooker.is_for?(:facebook)) load_bebo_adapter assert_equal("apps.bebo.com", Facebooker.canvas_server_base) assert_equal("apps.bebo.com", Facebooker.api_server_base) assert_equal("www.bebo.com", Facebooker.www_server_base_url) assert_equal("http://apps.bebo.com", Facebooker.api_server_base_url) assert_equal("http://www.bebo.com/SignIn.jsp?ApiKey=bebo_api_key&v=1.0&canvas=true", @session.login_url) assert_equal("http://www.bebo.com/c/apps/add?ApiKey=bebo_api_key&v=1.0", @session.install_url) assert(Facebooker.is_for?(:bebo)) end def test_adapter_failures Facebooker::AdapterBase.stubs(:facebooker_config).returns({}) assert_raises(Facebooker::AdapterBase::UnableToLoadAdapter){ Facebooker.load_adapter(:config_key_base => "bebo") } end def test_bebo_specific_issues load_bebo_adapter # @session.send(:service).stubs(:post).returns([{:name => "foo"}]) Net::HTTP.stubs(:post_form).returns("") user = Facebooker::User.new(:uid => "123456") user.session = @session user.set_profile_fbml("foo","bar","foo") assert(true) Net::HTTP.stubs(:post_form).returns(" 123456foo") user.populate(:name) assert(true) assert_equal("foo", user.name) action = Facebooker::Feed::TemplatizedAction.new() action.title_template = "foo" Net::HTTP.stubs(:post_form).returns("1") user.publish_templatized_action(action) end def test_bebo_process_data end def test_fetch_config_for_can_find_top_level_api_key old = Facebooker.instance_variable_get('@raw_facebooker_configuration') # Now that we've backed up the old value... raw_fb_config = { 'api_key' => 'a key' } Facebooker.instance_variable_set('@raw_facebooker_configuration', raw_fb_config) assert_equal Facebooker.fetch_config_for( 'a key' ), raw_fb_config ensure # Put the old value back Facebooker.instance_variable_set('@raw_facebooker_configuration', old) end def test_fetch_config_for_can_find_deep_api_key old = Facebooker.instance_variable_get('@raw_facebooker_configuration') # Now that we've backed up the old value... raw_fb_config = { 'api_key' => 'a key', 'alternative_keys' => { 'another key' => { 'secret_key' => 'sdfsd' }, 'yet another key' => { 'secret_key' => '9ho2h' } } } Facebooker.instance_variable_set('@raw_facebooker_configuration', raw_fb_config) assert_equal raw_fb_config['alternative_keys']['another key'].merge( 'api_key' => 'another key' ), Facebooker.fetch_config_for( 'another key' ) ensure # Put the old value back Facebooker.instance_variable_set('@raw_facebooker_configuration', old) end def test_fetch_config_for_returns_false_if_no_apikey_found old = Facebooker.instance_variable_get('@raw_facebooker_configuration') # Now that we've backed up the old value... raw_fb_config = { 'api_key' => 'a key' } Facebooker.instance_variable_set('@raw_facebooker_configuration', raw_fb_config) assert ! Facebooker.fetch_config_for( 'another key' ) ensure # Put the old value back Facebooker.instance_variable_set('@raw_facebooker_configuration', old) end def test_with_application_yields_if_no_config_is_found flexmock( Facebooker ). should_receive( :fetch_config_for ). and_return( false ) # Is there a better way to assert the block is yielded? @changes_to_true = false Facebooker.with_application('somekey not found') do @changes_to_true = true end assert @changes_to_true end def test_with_application_changes_config_inside_block flexmock( Facebooker ). should_receive( :fetch_config_for ). and_return({ 'api_key' => 'a key', 'secret_key' => 'my secret key' }) Facebooker.with_application('a key') do @secret_in_block = Facebooker.secret_key end # Check outside the block, assures the assertion gets run assert_equal 'my secret key', @secret_in_block end def test_with_application_restores_last_config_outside_block flexmock( Facebooker ). should_receive( :fetch_config_for ). and_return( { 'api_key' => 'a key', 'secret_key' => 'my secret key' }, { 'api_key' => 'another key', 'secret_key' => 'my other secret key' } ) Facebooker.with_application('a key') do Facebooker.with_application('another key') do end @secret_in_outer_block = Facebooker.secret_key end # Check outside the block, assures the assertion gets run assert_equal 'my secret key', @secret_in_outer_block end def test_adapter_loaded_when_config_applied flexmock( Facebooker ). should_receive( :fetch_config_for ). and_return( { 'api_key' => 'a_key', 'canvas_page_name' => 'default_name' }, { 'api_key' => 'another_key', 'canvas_page_name' => 'alternative_name' } ) Facebooker.with_application('a_key') do assert_equal 'default_name', Facebooker.current_adapter.facebooker_config['canvas_page_name'] Facebooker.with_application('another_key') do assert_equal 'alternative_name', Facebooker.current_adapter.facebooker_config['canvas_page_name'] end end end end