1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
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
member :birth, :date
def ==(other)
self.id == other.id && self.name == other.name
end
end
class ScaffoldedControllerTestAPI < ActionWebService::API::Base
api_method :hello, :expects => [{:integer=>:int}, :string], :returns => [:bool]
api_method :hello_struct_param, :expects => [{:person => ScaffoldPerson}], :returns => [:bool]
api_method :date_of_birth, :expects => [ScaffoldPerson], :returns => [:string]
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
web_service_api ScaffoldedControllerTestAPI
web_service_scaffold :scaffold_invoke
def hello(int, string)
0
end
def hello_struct_param(person)
0
end
def date_of_birth(person)
person.birth.to_s
end
def bye
[ScaffoldPerson.new(:id => 1, :name => "leon"), ScaffoldPerson.new(:id => 2, :name => "paul")]
end
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
def setup
@controller = ScaffoldedController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
def test_scaffold_invoke
get :scaffold_invoke
assert_rendered_file 'methods.rhtml'
end
def test_scaffold_invoke_method_params
get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'Hello'
assert_rendered_file 'parameters.rhtml'
end
def test_scaffold_invoke_method_params_with_struct
get :scaffold_invoke_method_params, :service => 'scaffolded', :method => 'HelloStructParam'
assert_rendered_file 'parameters.rhtml'
assert_tag :tag => 'input', :attributes => {:name => "method_params[0][name]"}
end
def test_scaffold_invoke_submit_hello
post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'Hello', :method_params => {'0' => '5', '1' => 'hello world'}
assert_rendered_file 'result.rhtml'
assert_equal false, @controller.instance_eval{ @method_return_value }
end
def test_scaffold_invoke_submit_bye
post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'Bye'
assert_rendered_file 'result.rhtml'
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_struct_date_params
post :scaffold_invoke_submit, :service => 'scaffolded', :method => 'DateOfBirth',
:method_params => {'0' => {'birth' => {'1' => '2006', '2' => '2', '3' => '1'}, 'id' => '1', 'name' => 'person'}}
assert_equal '2006-02-01', @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
|