aboutsummaryrefslogtreecommitdiffstats
path: root/actionwebservice/test
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2006-03-03 03:19:37 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2006-03-03 03:19:37 +0000
commit3d4965765cd47df7f3f9d3db4cbb117936b1c939 (patch)
treea7dcd1024112bde8716f09c1e75da22cb640d38f /actionwebservice/test
parent94725b02bcc5e623dcbe1d73d57b2ede2c88440e (diff)
downloadrails-3d4965765cd47df7f3f9d3db4cbb117936b1c939.tar.gz
rails-3d4965765cd47df7f3f9d3db4cbb117936b1c939.tar.bz2
rails-3d4965765cd47df7f3f9d3db4cbb117936b1c939.zip
Fix a ton of issues with AWS (yes, Kent saved it from being unbundled in 1.1) #4038 [Kent Sibilev]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3750 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionwebservice/test')
-rw-r--r--actionwebservice/test/abstract_client.rb59
-rw-r--r--actionwebservice/test/abstract_unit.rb19
-rw-r--r--actionwebservice/test/client_soap_test.rb36
-rw-r--r--actionwebservice/test/client_xmlrpc_test.rb40
-rw-r--r--actionwebservice/test/fixtures/db_definitions/mysql.sql7
-rw-r--r--actionwebservice/test/fixtures/users.yml10
-rw-r--r--actionwebservice/test/scaffolded_controller_test.rb55
7 files changed, 217 insertions, 9 deletions
diff --git a/actionwebservice/test/abstract_client.rb b/actionwebservice/test/abstract_client.rb
index 0efa1d7ec1..c5484b6b62 100644
--- a/actionwebservice/test/abstract_client.rb
+++ b/actionwebservice/test/abstract_client.rb
@@ -12,17 +12,44 @@ module ClientTest
firstnames == other.firstnames && lastname == other.lastname
end
end
+
+ class Inner < ActionWebService::Struct
+ member :name, :string
+ end
+
+ class Outer < ActionWebService::Struct
+ member :name, :string
+ member :inner, Inner
+ end
+
+ class User < ActiveRecord::Base
+ end
+
+ module Accounting
+ class User < ActiveRecord::Base
+ end
+ end
+
+ class WithModel < ActionWebService::Struct
+ member :user, User
+ member :users, [User]
+ end
class API < ActionWebService::API::Base
api_method :void
- api_method :normal, :expects => [:int, :int], :returns => [:int]
- api_method :array_return, :returns => [[Person]]
- api_method :struct_pass, :expects => [[Person]], :returns => [:bool]
- api_method :client_container, :returns => [:int]
- api_method :named_parameters, :expects => [{:key=>:string}, {:id=>:int}]
+ api_method :normal, :expects => [:int, :int], :returns => [:int]
+ api_method :array_return, :returns => [[Person]]
+ api_method :struct_pass, :expects => [[Person]], :returns => [:bool]
+ api_method :nil_struct_return, :returns => [Person]
+ api_method :inner_nil, :returns => [Outer]
+ api_method :client_container, :returns => [:int]
+ api_method :named_parameters, :expects => [{:key=>:string}, {:id=>:int}]
api_method :thrower
+ api_method :user_return, :returns => [User]
+ api_method :with_model_return, :returns => [WithModel]
+ api_method :scoped_model_return, :returns => [Accounting::User]
end
-
+
class NullLogOut
def <<(*args); end
end
@@ -65,6 +92,14 @@ module ClientTest
@value_struct_pass = @method_params
true
end
+
+ def nil_struct_return
+ nil
+ end
+
+ def inner_nil
+ Outer.new :name => 'outer', :inner => nil
+ end
def client_container
50
@@ -77,6 +112,18 @@ module ClientTest
def thrower
raise "Hi"
end
+
+ def user_return
+ User.find(1)
+ end
+
+ def with_model_return
+ WithModel.new :user => User.find(1), :users => User.find(:all)
+ end
+
+ def scoped_model_return
+ Accounting::User.find(1)
+ end
end
class AbstractClientLet < WEBrick::HTTPServlet::AbstractServlet
diff --git a/actionwebservice/test/abstract_unit.rb b/actionwebservice/test/abstract_unit.rb
index a57299bea0..149f108c98 100644
--- a/actionwebservice/test/abstract_unit.rb
+++ b/actionwebservice/test/abstract_unit.rb
@@ -5,10 +5,27 @@ $:.unshift(File.dirname(__FILE__) + '/../../actionpack/lib')
$:.unshift(File.dirname(__FILE__) + '/../../activerecord/lib')
require 'test/unit'
-require 'active_record'
require 'action_web_service'
require 'action_controller'
require 'action_controller/test_process'
ActionController::Base.logger = nil
ActionController::Base.ignore_missing_templates = true
+
+begin
+ PATH_TO_AR = File.dirname(__FILE__) + '/../../activerecord'
+ require "#{PATH_TO_AR}/lib/active_record" unless Object.const_defined?(:ActiveRecord)
+ require "#{PATH_TO_AR}/lib/active_record/fixtures" unless Object.const_defined?(:Fixtures)
+rescue Object => e
+ fail "\nFailed to load activerecord: #{e}"
+end
+
+ActiveRecord::Base.establish_connection(
+ :adapter => "mysql",
+ :username => "rails",
+ :encoding => "utf8",
+ :database => "activewebservice_unittest"
+)
+ActiveRecord::Base.connection
+
+Test::Unit::TestCase.fixture_path = "#{File.dirname(__FILE__)}/fixtures/"
diff --git a/actionwebservice/test/client_soap_test.rb b/actionwebservice/test/client_soap_test.rb
index e118b4956e..ee02d919a4 100644
--- a/actionwebservice/test/client_soap_test.rb
+++ b/actionwebservice/test/client_soap_test.rb
@@ -49,6 +49,8 @@ end
class TC_ClientSoap < Test::Unit::TestCase
include ClientTest
include ClientSoapTest
+
+ fixtures :users
def setup
@server = SoapServer.instance
@@ -88,6 +90,16 @@ class TC_ClientSoap < Test::Unit::TestCase
assert_equal(true, @client.struct_pass([new_person]))
assert_equal([[new_person]], @container.value_struct_pass)
end
+
+ def test_nil_struct_return
+ assert_nil @client.nil_struct_return
+ end
+
+ def test_inner_nil
+ outer = @client.inner_nil
+ assert_equal 'outer', outer.name
+ assert_nil outer.inner
+ end
def test_client_container
assert_equal(50, ClientContainer.new.get_client.client_container)
@@ -106,4 +118,28 @@ class TC_ClientSoap < Test::Unit::TestCase
assert_equal([5, 6], @container.value_normal)
@container.value_normal = nil
end
+
+ def test_model_return
+ user = @client.user_return
+ assert_equal 1, user.id
+ assert_equal 'Kent', user.name
+ assert user.active?
+ assert_kind_of Date, user.created_on
+ assert_equal Date.today, user.created_on
+ end
+
+ def test_with_model
+ with_model = @client.with_model_return
+ assert_equal 'Kent', with_model.user.name
+ assert_equal 2, with_model.users.size
+ with_model.users.each do |user|
+ assert_kind_of User, user
+ end
+ end
+
+ def test_scoped_model_return
+ scoped_model = @client.scoped_model_return
+ assert_kind_of Accounting::User, scoped_model
+ assert_equal 'Kent', scoped_model.name
+ end
end
diff --git a/actionwebservice/test/client_xmlrpc_test.rb b/actionwebservice/test/client_xmlrpc_test.rb
index de24d9a975..a77942dc07 100644
--- a/actionwebservice/test/client_xmlrpc_test.rb
+++ b/actionwebservice/test/client_xmlrpc_test.rb
@@ -12,7 +12,7 @@ module ClientXmlRpcTest
test_request.env['HTTP_CONTENT_TYPE'] = 'text/xml'
test_request.env['RAW_POST_DATA'] = req.body
response = ActionController::TestResponse.new
- @controller.process(test_request, response)
+ @controller.process(test_request, response)
res.header['content-type'] = 'text/xml'
res.body = response.body
# puts res.body
@@ -44,6 +44,8 @@ end
class TC_ClientXmlRpc < Test::Unit::TestCase
include ClientTest
include ClientXmlRpcTest
+
+ fixtures :users
def setup
@server = XmlRpcServer.instance
@@ -83,6 +85,16 @@ class TC_ClientXmlRpc < Test::Unit::TestCase
assert_equal(true, @client.struct_pass([new_person]))
assert_equal([[new_person]], @container.value_struct_pass)
end
+
+ def test_nil_struct_return
+ assert_equal false, @client.nil_struct_return
+ end
+
+ def test_inner_nil
+ outer = @client.inner_nil
+ assert_equal 'outer', outer.name
+ assert_nil outer.inner
+ end
def test_client_container
assert_equal(50, ClientContainer.new.get_client.client_container)
@@ -90,7 +102,7 @@ class TC_ClientXmlRpc < Test::Unit::TestCase
def test_named_parameters
assert(@container.value_named_parameters.nil?)
- assert_equal(true, @client.named_parameters("xxx", 7))
+ assert_equal(false, @client.named_parameters("xxx", 7))
assert_equal(["xxx", 7], @container.value_named_parameters)
end
@@ -105,4 +117,28 @@ class TC_ClientXmlRpc < Test::Unit::TestCase
@client.normal
end
end
+
+ def test_model_return
+ user = @client.user_return
+ assert_equal 1, user.id
+ assert_equal 'Kent', user.name
+ assert user.active?
+ assert_kind_of Time, user.created_on
+ assert_equal Time.now.getgm.beginning_of_day, user.created_on
+ end
+
+ def test_with_model
+ with_model = @client.with_model_return
+ assert_equal 'Kent', with_model.user.name
+ assert_equal 2, with_model.users.size
+ with_model.users.each do |user|
+ assert_kind_of User, user
+ end
+ end
+
+ def test_scoped_model_return
+ scoped_model = @client.scoped_model_return
+ assert_kind_of Accounting::User, scoped_model
+ assert_equal 'Kent', scoped_model.name
+ end
end
diff --git a/actionwebservice/test/fixtures/db_definitions/mysql.sql b/actionwebservice/test/fixtures/db_definitions/mysql.sql
new file mode 100644
index 0000000000..026f2a2c64
--- /dev/null
+++ b/actionwebservice/test/fixtures/db_definitions/mysql.sql
@@ -0,0 +1,7 @@
+CREATE TABLE `users` (
+ `id` int(11) NOT NULL auto_increment,
+ `name` varchar(30) default NULL,
+ `active` tinyint(4) default NULL,
+ `created_on` date default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
diff --git a/actionwebservice/test/fixtures/users.yml b/actionwebservice/test/fixtures/users.yml
new file mode 100644
index 0000000000..a97d8c8486
--- /dev/null
+++ b/actionwebservice/test/fixtures/users.yml
@@ -0,0 +1,10 @@
+user1:
+ id: 1
+ name: Kent
+ active: 1
+ created_on: <%= Date.today %>
+user2:
+ id: 2
+ name: David
+ active: 1
+ created_on: <%= Date.today %>
diff --git a/actionwebservice/test/scaffolded_controller_test.rb b/actionwebservice/test/scaffolded_controller_test.rb
index fc617a149a..b41d5afe09 100644
--- a/actionwebservice/test/scaffolded_controller_test.rb
+++ b/actionwebservice/test/scaffolded_controller_test.rb
@@ -2,8 +2,11 @@ require File.dirname(__FILE__) + '/abstract_unit'
ActionController::Routing::Routes.draw do |map|
map.connect '', :controller => 'scaffolded'
+ map.connect ':controller/:action/:id'
end
+ActionController::Base.template_root = '.'
+
class ScaffoldPerson < ActionWebService::Struct
member :id, :int
member :name, :string
@@ -16,6 +19,9 @@ end
class ScaffoldedControllerTestAPI < ActionWebService::API::Base
api_method :hello, :expects => [{:integer=>:int}, :string], :returns => [:bool]
api_method :bye, :returns => [[ScaffoldPerson]]
+ api_method :date_diff, :expects => [{:start_date => :date}, {:end_date => :date}], :returns => [:int]
+ api_method :time_diff, :expects => [{:start_time => :time}, {:end_time => :time}], :returns => [:int]
+ api_method :base64_upcase, :expects => [:base64], :returns => [:base64]
end
class ScaffoldedController < ActionController::Base
@@ -33,6 +39,18 @@ class ScaffoldedController < ActionController::Base
def rescue_action(e)
raise e
end
+
+ def date_diff(start_date, end_date)
+ end_date - start_date
+ end
+
+ def time_diff(start_time, end_time)
+ end_time - start_time
+ end
+
+ def base64_upcase(data)
+ data.upcase
+ end
end
class ScaffoldedControllerTest < Test::Unit::TestCase
@@ -64,4 +82,41 @@ class ScaffoldedControllerTest < Test::Unit::TestCase
persons = [ScaffoldPerson.new(:id => 1, :name => "leon"), ScaffoldPerson.new(:id => 2, :name => "paul")]
assert_equal persons, @controller.instance_eval{ @method_return_value }
end
+
+ def test_scaffold_date_params
+ get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'DateDiff'
+ (0..1).each do |param|
+ (1..3).each do |date_part|
+ assert_tag :tag => 'select', :attributes => {:name => "method_params[#{param}][#{date_part}]"},
+ :children => {:greater_than => 1, :only => {:tag => 'option'}}
+ end
+ end
+
+ post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'DateDiff',
+ :method_params => {'0' => {'1' => '2006', '2' => '2', '3' => '1'}, '1' => {'1' => '2006', '2' => '2', '3' => '2'}}
+ assert_equal 1, @controller.instance_eval{ @method_return_value }
+ end
+
+ def test_scaffold_time_params
+ get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'TimeDiff'
+ (0..1).each do |param|
+ (1..6).each do |date_part|
+ assert_tag :tag => 'select', :attributes => {:name => "method_params[#{param}][#{date_part}]"},
+ :children => {:greater_than => 1, :only => {:tag => 'option'}}
+ end
+ end
+
+ post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'TimeDiff',
+ :method_params => {'0' => {'1' => '2006', '2' => '2', '3' => '1', '4' => '1', '5' => '1', '6' => '1'},
+ '1' => {'1' => '2006', '2' => '2', '3' => '2', '4' => '1', '5' => '1', '6' => '1'}}
+ assert_equal 86400, @controller.instance_eval{ @method_return_value }
+ end
+
+ def test_scaffold_base64
+ get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'Base64Upcase'
+ assert_tag :tag => 'textarea', :attributes => {:name => 'method_params[0]'}
+
+ post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'Base64Upcase', :method_params => {'0' => 'scaffold'}
+ assert_equal 'SCAFFOLD', @controller.instance_eval{ @method_return_value }
+ end
end