removing log dir from .gitignore
[monkeycharger.git] / vendor / rails / actionwebservice / test / client_soap_test.rb
blob914bf377ea80e8e41d83a23b28b08d1ff7298f4b
1 require File.dirname(__FILE__) + '/abstract_client'
4 module ClientSoapTest
5   PORT = 8998
7   class SoapClientLet < ClientTest::AbstractClientLet
8     def do_POST(req, res)
9       test_request = ActionController::TestRequest.new
10       test_request.request_parameters['action'] = req.path.gsub(/^\//, '').split(/\//)[1]
11       test_request.env['REQUEST_METHOD'] = "POST"
12       test_request.env['HTTP_CONTENTTYPE'] = 'text/xml'
13       test_request.env['HTTP_SOAPACTION'] = req.header['soapaction'][0]
14       test_request.env['RAW_POST_DATA'] = req.body
15       response = ActionController::TestResponse.new
16       @controller.process(test_request, response)
17       res.header['content-type'] = 'text/xml'
18       res.body = response.body
19     rescue Exception => e
20       $stderr.puts e.message
21       $stderr.puts e.backtrace.join("\n")
22     end
23   end
25   class ClientContainer < ActionController::Base
26     web_client_api :client, :soap, "http://localhost:#{PORT}/client/api", :api => ClientTest::API
27     web_client_api :invalid, :null, "", :api => true
29     def get_client
30       client
31     end
33     def get_invalid
34       invalid
35     end
36   end
38   class SoapServer < ClientTest::AbstractServer
39     def create_clientlet(controller)
40       SoapClientLet.new(controller)
41     end
43     def server_port
44       PORT
45     end
46   end
47 end
49 class TC_ClientSoap < Test::Unit::TestCase
50   include ClientTest
51   include ClientSoapTest
52   
53   fixtures :users
55   def setup
56     @server = SoapServer.instance
57     @container = @server.container
58     @client = ActionWebService::Client::Soap.new(API, "http://localhost:#{@server.server_port}/client/api")
59   end
61   def test_void
62     assert(@container.value_void.nil?)
63     @client.void
64     assert(!@container.value_void.nil?)
65   end
67   def test_normal
68     assert(@container.value_normal.nil?)
69     assert_equal(5, @client.normal(5, 6))
70     assert_equal([5, 6], @container.value_normal)
71     assert_equal(5, @client.normal("7", "8"))
72     assert_equal([7, 8], @container.value_normal)
73     assert_equal(5, @client.normal(true, false))
74   end
76   def test_array_return
77     assert(@container.value_array_return.nil?)
78     new_person = Person.new
79     new_person.firstnames = ["one", "two"]
80     new_person.lastname = "last"
81     assert_equal([new_person], @client.array_return)
82     assert_equal([new_person], @container.value_array_return)
83   end
85   def test_struct_pass
86     assert(@container.value_struct_pass.nil?)
87     new_person = Person.new
88     new_person.firstnames = ["one", "two"]
89     new_person.lastname = "last"
90     assert_equal(true, @client.struct_pass([new_person]))
91     assert_equal([[new_person]], @container.value_struct_pass)
92   end
93   
94   def test_nil_struct_return
95     assert_nil @client.nil_struct_return
96   end
97   
98   def test_inner_nil
99     outer = @client.inner_nil
100     assert_equal 'outer', outer.name
101     assert_nil outer.inner
102   end
104   def test_client_container
105     assert_equal(50, ClientContainer.new.get_client.client_container)
106     assert(ClientContainer.new.get_invalid.nil?)
107   end
109   def test_named_parameters
110     assert(@container.value_named_parameters.nil?)
111     assert(@client.named_parameters("key", 5).nil?)
112     assert_equal(["key", 5], @container.value_named_parameters)
113   end
115   def test_capitalized_method_name
116     @container.value_normal = nil
117     assert_equal(5, @client.Normal(5, 6))
118     assert_equal([5, 6], @container.value_normal)
119     @container.value_normal = nil
120   end
121   
122   def test_model_return
123     user = @client.user_return
124     assert_equal 1, user.id
125     assert_equal 'Kent', user.name
126     assert user.active?
127     assert_kind_of Date, user.created_on
128     assert_equal Date.today, user.created_on
129     assert_equal BigDecimal('12.2'), user.balance
130   end
131   
132   def test_with_model
133     with_model = @client.with_model_return
134     assert_equal 'Kent', with_model.user.name
135     assert_equal 2, with_model.users.size
136     with_model.users.each do |user|
137       assert_kind_of User, user
138     end
139   end
140   
141   def test_scoped_model_return
142     scoped_model = @client.scoped_model_return
143     assert_kind_of Accounting::User, scoped_model
144     assert_equal 'Kent', scoped_model.name
145   end
146   
147   def test_multi_dim_return
148     md_struct = @client.multi_dim_return
149     assert_kind_of Array, md_struct.pref
150     assert_equal 2, md_struct.pref.size
151     assert_kind_of Array, md_struct.pref[0]
152   end