removing log dir from .gitignore
[monkeycharger.git] / vendor / rails / actionwebservice / test / scaffolded_controller_test.rb
blobdb73be17e3affdb8a6de42f346d40365dece2ce7
1 require File.dirname(__FILE__) + '/abstract_unit'
3 ActionController::Routing::Routes.draw do |map|
4   map.connect '', :controller => 'scaffolded'
5   map.connect ':controller/:action/:id'
6 end
8 ActionController::Base.view_load_paths = [ '.' ]
10 class ScaffoldPerson < ActionWebService::Struct
11   member :id,     :int
12   member :name,   :string
13   member :birth,  :date
15   def ==(other)
16     self.id == other.id && self.name == other.name
17   end
18 end
20 class ScaffoldedControllerTestAPI < ActionWebService::API::Base
21   api_method :hello, :expects => [{:integer=>:int}, :string], :returns => [:bool]
22   api_method :hello_struct_param, :expects => [{:person => ScaffoldPerson}], :returns => [:bool]
23   api_method :date_of_birth, :expects => [ScaffoldPerson], :returns => [:string]
24   api_method :bye,   :returns => [[ScaffoldPerson]]
25   api_method :date_diff, :expects => [{:start_date => :date}, {:end_date => :date}], :returns => [:int]
26   api_method :time_diff, :expects => [{:start_time => :time}, {:end_time => :time}], :returns => [:int]
27   api_method :base64_upcase, :expects => [:base64], :returns => [:base64]
28 end
30 class ScaffoldedController < ActionController::Base
31   web_service_api ScaffoldedControllerTestAPI
32   web_service_scaffold :scaffold_invoke
34   def hello(int, string)
35     0
36   end
37   
38   def hello_struct_param(person)
39     0
40   end
41   
42   def date_of_birth(person)
43     person.birth.to_s
44   end
46   def bye
47     [ScaffoldPerson.new(:id => 1, :name => "leon"), ScaffoldPerson.new(:id => 2, :name => "paul")]
48   end
50   def rescue_action(e)
51     raise e
52   end
53   
54   def date_diff(start_date, end_date)
55     end_date - start_date
56   end
57   
58   def time_diff(start_time, end_time)
59     end_time - start_time
60   end
61   
62   def base64_upcase(data)
63     data.upcase
64   end
65 end
67 class ScaffoldedControllerTest < Test::Unit::TestCase
68   def setup
69     @controller = ScaffoldedController.new
70     @request    = ActionController::TestRequest.new
71     @response   = ActionController::TestResponse.new
72   end
74   def test_scaffold_invoke
75     get :scaffold_invoke
76     assert_template 'methods.erb'
77   end
79   def test_scaffold_invoke_method_params
80     get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'Hello'
81     assert_template 'parameters.erb'
82   end
83   
84   def test_scaffold_invoke_method_params_with_struct
85     get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'HelloStructParam'
86     assert_template 'parameters.erb'
87     assert_tag :tag => 'form'
88     assert_tag :tag => 'input', :attributes => {:name => "method_params[0][name]"}
89   end
91   def test_scaffold_invoke_submit_hello
92     post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'Hello', :method_params => {'0' => '5', '1' => 'hello world'}
93     assert_template 'result.erb'
94     assert_equal false, @controller.instance_eval{ @method_return_value }
95   end
97   def test_scaffold_invoke_submit_bye
98     post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'Bye'
99     assert_template 'result.erb'
100     persons = [ScaffoldPerson.new(:id => 1, :name => "leon"), ScaffoldPerson.new(:id => 2, :name => "paul")]
101     assert_equal persons, @controller.instance_eval{ @method_return_value }
102   end
103   
104   def test_scaffold_date_params
105     get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'DateDiff'
106     (0..1).each do |param|
107       (1..3).each do |date_part|
108         assert_tag :tag => 'select', :attributes => {:name => "method_params[#{param}][#{date_part}]"}, 
109                    :children => {:greater_than => 1, :only => {:tag => 'option'}}
110       end
111     end
112     
113     post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'DateDiff', 
114          :method_params => {'0' => {'1' => '2006', '2' => '2', '3' => '1'}, '1' => {'1' => '2006', '2' => '2', '3' => '2'}}
115     assert_equal 1, @controller.instance_eval{ @method_return_value }
116   end
117   
118   def test_scaffold_struct_date_params
119     post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'DateOfBirth', 
120          :method_params => {'0' => {'birth' => {'1' => '2006', '2' => '2', '3' => '1'}, 'id' => '1', 'name' => 'person'}}
121     assert_equal '2006-02-01', @controller.instance_eval{ @method_return_value }
122   end
124   def test_scaffold_time_params
125     get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'TimeDiff'
126     (0..1).each do |param|
127       (1..6).each do |date_part|
128         assert_tag :tag => 'select', :attributes => {:name => "method_params[#{param}][#{date_part}]"}, 
129                    :children => {:greater_than => 1, :only => {:tag => 'option'}}
130       end
131     end
133     post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'TimeDiff', 
134          :method_params => {'0' => {'1' => '2006', '2' => '2', '3' => '1', '4' => '1', '5' => '1', '6' => '1'}, 
135                             '1' => {'1' => '2006', '2' => '2', '3' => '2', '4' => '1', '5' => '1', '6' => '1'}}
136     assert_equal 86400, @controller.instance_eval{ @method_return_value }
137   end
138   
139   def test_scaffold_base64
140     get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'Base64Upcase'
141     assert_tag :tag => 'textarea', :attributes => {:name => 'method_params[0]'}
142     
143     post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'Base64Upcase', :method_params => {'0' => 'scaffold'}
144     assert_equal 'SCAFFOLD', @controller.instance_eval{ @method_return_value }
145   end