Went through the specs and updated them to reflect the application
[lyrix.git] / vendor / rails / actionwebservice / test / client_xmlrpc_test.rb
blob0abd5898d82d4385fe706f90782d9755e917d150
1 require File.dirname(__FILE__) + '/abstract_client'
4 module ClientXmlRpcTest
5   PORT = 8999
7   class XmlRpcClientLet < 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_CONTENT_TYPE'] = 'text/xml'
13       test_request.env['RAW_POST_DATA'] = req.body
14       response = ActionController::TestResponse.new
15       @controller.process(test_request, response) 
16       res.header['content-type'] = 'text/xml'
17       res.body = response.body
18       # puts res.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, :xmlrpc, "http://localhost:#{PORT}/client/api", :api => ClientTest::API
28     def get_client
29       client
30     end
31   end
33   class XmlRpcServer < ClientTest::AbstractServer
34     def create_clientlet(controller)
35       XmlRpcClientLet.new(controller)
36     end
38     def server_port
39       PORT
40     end
41   end
42 end
44 class TC_ClientXmlRpc < Test::Unit::TestCase
45   include ClientTest
46   include ClientXmlRpcTest
47   
48   fixtures :users
50   def setup
51     @server = XmlRpcServer.instance
52     @container = @server.container
53     @client = ActionWebService::Client::XmlRpc.new(API, "http://localhost:#{@server.server_port}/client/api")
54   end
56   def test_void
57     assert(@container.value_void.nil?)
58     @client.void
59     assert(!@container.value_void.nil?)
60   end
62   def test_normal
63     assert(@container.value_normal.nil?)
64     assert_equal(5, @client.normal(5, 6))
65     assert_equal([5, 6], @container.value_normal)
66     assert_equal(5, @client.normal("7", "8"))
67     assert_equal([7, 8], @container.value_normal)
68     assert_equal(5, @client.normal(true, false))
69   end
71   def test_array_return
72     assert(@container.value_array_return.nil?)
73     new_person = Person.new
74     new_person.firstnames = ["one", "two"]
75     new_person.lastname = "last"
76     assert_equal([new_person], @client.array_return)
77     assert_equal([new_person], @container.value_array_return)
78   end
80   def test_struct_pass
81     assert(@container.value_struct_pass.nil?)
82     new_person = Person.new
83     new_person.firstnames = ["one", "two"]
84     new_person.lastname = "last"
85     assert_equal(true, @client.struct_pass([new_person]))
86     assert_equal([[new_person]], @container.value_struct_pass)
87   end
88   
89   def test_nil_struct_return
90     assert_equal false, @client.nil_struct_return
91   end
93   def test_inner_nil
94     outer = @client.inner_nil
95     assert_equal 'outer', outer.name
96     assert_nil outer.inner
97   end
99   def test_client_container
100     assert_equal(50, ClientContainer.new.get_client.client_container)
101   end
103   def test_named_parameters
104     assert(@container.value_named_parameters.nil?)
105     assert_equal(false, @client.named_parameters("xxx", 7))
106     assert_equal(["xxx", 7], @container.value_named_parameters)
107   end
109   def test_exception
110     assert_raises(ActionWebService::Client::ClientError) do
111       assert(@client.thrower)
112     end
113   end
115   def test_invalid_signature
116     assert_raises(ArgumentError) do
117       @client.normal
118     end
119   end
121   def test_model_return
122     user = @client.user_return
123     assert_equal 1, user.id
124     assert_equal 'Kent', user.name
125     assert user.active?
126     assert_kind_of Time, user.created_on
127     assert_equal Time.utc(Time.now.year, Time.now.month, Time.now.day), user.created_on
128   end
130   def test_with_model
131     with_model = @client.with_model_return
132     assert_equal 'Kent', with_model.user.name
133     assert_equal 2, with_model.users.size
134     with_model.users.each do |user|
135       assert_kind_of User, user
136     end
137   end
138   
139   def test_scoped_model_return
140     scoped_model = @client.scoped_model_return
141     assert_kind_of Accounting::User, scoped_model
142     assert_equal 'Kent', scoped_model.name
143   end
145   def test_multi_dim_return
146     md_struct = @client.multi_dim_return
147     assert_kind_of Array, md_struct.pref
148     assert_equal 2, md_struct.pref.size
149     assert_kind_of Array, md_struct.pref[0]
150   end