mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
e7a2938029
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@658 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
139 lines
3.7 KiB
Ruby
139 lines
3.7 KiB
Ruby
require File.dirname(__FILE__) + '/abstract_soap'
|
|
require 'wsdl/parser'
|
|
|
|
module RouterActionControllerTest
|
|
class API < ActionService::API::Base
|
|
api_method :add, :expects => [:int, :int], :returns => [:int]
|
|
end
|
|
|
|
class Service < ActionService::Base
|
|
service_api API
|
|
|
|
attr :added
|
|
|
|
def add(a, b)
|
|
@added = a + b
|
|
end
|
|
end
|
|
|
|
class DelegatedController < ActionController::Base
|
|
service_dispatching_mode :delegated
|
|
|
|
service(:test_service) { @service ||= Service.new; @service }
|
|
end
|
|
|
|
class DirectAPI < ActionService::API::Base
|
|
api_method :add, :expects => [{:a=>:int}, {:b=>:int}], :returns => [:int]
|
|
api_method :before_filtered
|
|
api_method :after_filtered, :returns => [:int]
|
|
api_method :thrower
|
|
end
|
|
|
|
class DirectController < ActionController::Base
|
|
service_api DirectAPI
|
|
service_dispatching_mode :direct
|
|
|
|
before_filter :alwaysfail, :only => [:before_filtered]
|
|
after_filter :alwaysok, :only => [:after_filtered]
|
|
|
|
attr :added
|
|
attr :before_filter_called
|
|
attr :before_filter_target_called
|
|
attr :after_filter_called
|
|
attr :after_filter_target_called
|
|
|
|
def initialize
|
|
@before_filter_called = false
|
|
@before_filter_target_called = false
|
|
@after_filter_called = false
|
|
@after_filter_target_called = false
|
|
end
|
|
|
|
def add
|
|
@added = @params['a'] + @params['b']
|
|
end
|
|
|
|
def before_filtered
|
|
@before_filter_target_called = true
|
|
end
|
|
|
|
def after_filtered
|
|
@after_filter_target_called = true
|
|
5
|
|
end
|
|
|
|
def thrower
|
|
raise "Hi, I'm a SOAP exception"
|
|
end
|
|
|
|
protected
|
|
def alwaysfail
|
|
@before_filter_called = true
|
|
false
|
|
end
|
|
|
|
def alwaysok
|
|
@after_filter_called = true
|
|
end
|
|
end
|
|
end
|
|
|
|
class TC_RouterActionController < AbstractSoapTest
|
|
def test_direct_routing
|
|
@container = RouterActionControllerTest::DirectController.new
|
|
assert(do_soap_call('Add', 20, 50) == 70)
|
|
assert(@container.added == 70)
|
|
end
|
|
|
|
def test_direct_entrypoint
|
|
@container = RouterActionControllerTest::DirectController.new
|
|
assert(@container.respond_to?(:api))
|
|
end
|
|
|
|
def test_direct_filtering
|
|
@container = RouterActionControllerTest::DirectController.new
|
|
assert(@container.before_filter_called == false)
|
|
assert(@container.before_filter_target_called == false)
|
|
assert(do_soap_call('BeforeFiltered').nil?)
|
|
assert(@container.before_filter_called == true)
|
|
assert(@container.before_filter_target_called == false)
|
|
assert(@container.after_filter_called == false)
|
|
assert(@container.after_filter_target_called == false)
|
|
assert(do_soap_call('AfterFiltered') == 5)
|
|
assert(@container.after_filter_called == true)
|
|
assert(@container.after_filter_target_called == true)
|
|
end
|
|
|
|
def test_delegated_routing
|
|
@container = RouterActionControllerTest::DelegatedController.new
|
|
assert(do_soap_call('Add', 50, 80) == 130)
|
|
assert(service.added == 130)
|
|
end
|
|
|
|
def test_exception_marshaling
|
|
@container = RouterActionControllerTest::DirectController.new
|
|
result = do_soap_call('Thrower')
|
|
exception = result.detail
|
|
assert(exception.cause.is_a?(RuntimeError))
|
|
assert_equal("Hi, I'm a SOAP exception", exception.cause.message)
|
|
@container.service_exception_reporting = false
|
|
assert_raises(SoapTestError) do
|
|
do_soap_call('Thrower')
|
|
end
|
|
end
|
|
|
|
protected
|
|
def service_name
|
|
@container.is_a?(RouterActionControllerTest::DelegatedController) ? 'test_service' : 'api'
|
|
end
|
|
|
|
def service
|
|
@container.service_object(:test_service)
|
|
end
|
|
|
|
def do_soap_call(public_method_name, *args)
|
|
super(public_method_name, *args) do |test_request, test_response|
|
|
response = @container.process(test_request, test_response)
|
|
end
|
|
end
|
|
end
|