aboutsummaryrefslogtreecommitdiffstats
path: root/actionwebservice/test/protocol_soap_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionwebservice/test/protocol_soap_test.rb')
-rw-r--r--actionwebservice/test/protocol_soap_test.rb226
1 files changed, 226 insertions, 0 deletions
diff --git a/actionwebservice/test/protocol_soap_test.rb b/actionwebservice/test/protocol_soap_test.rb
new file mode 100644
index 0000000000..164d06bbd6
--- /dev/null
+++ b/actionwebservice/test/protocol_soap_test.rb
@@ -0,0 +1,226 @@
+require File.dirname(__FILE__) + '/abstract_soap'
+
+module ProtocolSoapTest
+ class Person < ActionService::Struct
+ member :id, Integer
+ member :names, [String]
+ member :lastname, String
+ member :deleted, TrueClass
+
+ def ==(other)
+ id == other.id && names == other.names && lastname == other.lastname && deleted == other.deleted
+ end
+ end
+
+ class API < ActionService::API::Base
+ api_method :argument_passing, :expects => [{:int=>:int}, {:string=>:string}, {:array=>[:int]}], :returns => [:bool]
+ api_method :array_returner, :returns => [[:int]]
+ api_method :nil_returner
+ api_method :struct_array_returner, :returns => [[Person]]
+ api_method :exception_thrower
+
+ default_api_method :default
+ end
+
+ class Service < ActionService::Base
+ web_service_api API
+
+ attr :int
+ attr :string
+ attr :array
+ attr :values
+ attr :person
+ attr :default_args
+
+ def initialize
+ @int = 20
+ @string = "wrong string value"
+ @default_args = nil
+ end
+
+ def argument_passing(int, string, array)
+ @int = int
+ @string = string
+ @array = array
+ true
+ end
+
+ def array_returner
+ @values = [1, 2, 3]
+ end
+
+ def nil_returner
+ nil
+ end
+
+ def struct_array_returner
+ @person = Person.new
+ @person.id = 5
+ @person.names = ["one", "two"]
+ @person.lastname = "test"
+ @person.deleted = false
+ [@person]
+ end
+
+ def exception_thrower
+ raise "Hi, I'm a SOAP error"
+ end
+
+ def default(*args)
+ @default_args = args
+ nil
+ end
+ end
+
+ class AbstractContainer
+ include ActionService::API
+ include ActionService::Container
+ include ActionService::Protocol::Registry
+ include ActionService::Protocol::Soap
+
+ wsdl_service_name 'Test'
+
+ def protocol_request(request)
+ probe_request_protocol(request)
+ end
+
+ def dispatch_request(protocol_request)
+ dispatch_web_service_request(protocol_request)
+ end
+ end
+
+ class DelegatedContainer < AbstractContainer
+ web_service_dispatching_mode :delegated
+ web_service :protocol_soap_service, Service.new
+ end
+
+ class DirectContainer < AbstractContainer
+ web_service_api API
+ web_service_dispatching_mode :direct
+
+ attr :int
+ attr :string
+ attr :array
+ attr :values
+ attr :person
+ attr :default_args
+
+ def initialize
+ @int = 20
+ @string = "wrong string value"
+ @default_args = nil
+ end
+
+ def argument_passing
+ @int = @params['int']
+ @string = @params['string']
+ @array = @params['array']
+ true
+ end
+
+ def array_returner
+ @values = [1, 2, 3]
+ end
+
+ def nil_returner
+ nil
+ end
+
+ def struct_array_returner
+ @person = Person.new
+ @person.id = 5
+ @person.names = ["one", "two"]
+ @person.lastname = "test"
+ @person.deleted = false
+ [@person]
+ end
+
+ def exception_thrower
+ raise "Hi, I'm a SOAP error"
+ end
+
+ def default
+ @default_args = @method_params
+ nil
+ end
+ end
+end
+
+class TC_ProtocolSoap < AbstractSoapTest
+ def setup
+ @delegated_container = ProtocolSoapTest::DelegatedContainer.new
+ @direct_container = ProtocolSoapTest::DirectContainer.new
+ end
+
+ def test_argument_passing
+ in_all_containers do
+ assert(do_soap_call('ArgumentPassing', 5, "test string", [true, false]) == true)
+ assert(service.int == 5)
+ assert(service.string == "test string")
+ assert(service.array == [true, false])
+ end
+ end
+
+ def test_array_returner
+ in_all_containers do
+ assert(do_soap_call('ArrayReturner') == [1, 2, 3])
+ assert(service.values == [1, 2, 3])
+ end
+ end
+
+ def test_nil_returner
+ in_all_containers do
+ assert(do_soap_call('NilReturner') == nil)
+ end
+ end
+
+ def test_struct_array_returner
+ in_all_containers do
+ assert(do_soap_call('StructArrayReturner') == [service.person])
+ end
+ end
+
+ def test_exception_thrower
+ in_all_containers do
+ assert_raises(RuntimeError) do
+ do_soap_call('ExceptionThrower')
+ end
+ end
+ end
+
+ def test_default_api_method
+ in_all_containers do
+ assert(do_soap_call('NonExistentMethodName', 50, false).nil?)
+ assert(service.default_args == [50, false])
+ end
+ end
+
+ def test_service_name_setting
+ in_all_containers do
+ assert(ProtocolSoapTest::DelegatedContainer.soap_mapper.custom_namespace == 'urn:Test')
+ end
+ end
+
+ protected
+ def service_name
+ @container == @direct_container ? 'api' : 'protocol_soap_service'
+ end
+
+ def service
+ @container == @direct_container ? @container : @container.web_service_object(:protocol_soap_service)
+ end
+
+ def in_all_containers(&block)
+ [@direct_container].each do |container|
+ @container = container
+ block.call
+ end
+ end
+
+ def do_soap_call(public_method_name, *args)
+ super(public_method_name, *args) do |test_request, test_response|
+ protocol_request = @container.protocol_request(test_request)
+ @container.dispatch_request(protocol_request)
+ end
+ end
+end