require File.dirname(__FILE__) + '/abstract_dispatcher'
class TC_DispatcherActionControllerXmlRpc < Test::Unit::TestCase
include DispatcherTest
include DispatcherCommonTests
def setup
@direct_controller = DirectController.new
@delegated_controller = DelegatedController.new
@layered_controller = LayeredController.new
@virtual_controller = VirtualController.new
@protocol = ActionWebService::Protocol::XmlRpc::XmlRpcProtocol.create(@direct_controller)
end
def test_layered_dispatching
mt_cats = do_method_call(@layered_controller, 'mt.getCategories')
assert_equal(["mtCat1", "mtCat2"], mt_cats)
blogger_cats = do_method_call(@layered_controller, 'blogger.getCategories')
assert_equal(["bloggerCat1", "bloggerCat2"], blogger_cats)
end
def test_multicall
response = do_method_call(@layered_controller, 'system.multicall', [
{'methodName' => 'mt.getCategories'},
{'methodName' => 'blogger.getCategories'},
{'methodName' => 'mt.bool'},
{'methodName' => 'blogger.str', 'params' => ['2000']},
{'methodName' => 'mt.alwaysFail'},
{'methodName' => 'blogger.alwaysFail'},
{'methodName' => 'mt.blah'},
{'methodName' => 'blah.blah'},
{'methodName' => 'mt.person'}
])
assert_equal [
[["mtCat1", "mtCat2"]],
[["bloggerCat1", "bloggerCat2"]],
[true],
["2500"],
{"faultCode" => 3, "faultString" => "MT AlwaysFail"},
{"faultCode" => 3, "faultString" => "Blogger AlwaysFail"},
{"faultCode" => 4, "faultMessage" => "no such method 'blah' on API DispatcherTest::MTAPI"},
{"faultCode" => 4, "faultMessage" => "no such web service 'blah'"},
[{"name"=>"person1", "id"=>1}]
], response
end
protected
def exception_message(xmlrpc_fault_exception)
xmlrpc_fault_exception.faultString
end
def is_exception?(obj)
obj.is_a?(XMLRPC::FaultException)
end
def service_name(container)
container.is_a?(DelegatedController) ? 'test_service' : 'api'
end
end