Moved end() from Catalyst::Plugin::Test::Plugin to TestApp::Controller::Root. Fixed...
[catagits/Catalyst-Runtime.git] / t / aggregate / live_component_controller_action_go.t
CommitLineData
2f381252 1#!perl
2
3use strict;
4use warnings;
5
6use FindBin;
42da66a9 7use lib "$FindBin::Bin/../lib";
2f381252 8
9our $iters;
10
11BEGIN { $iters = $ENV{CAT_BENCH_ITERS} || 1; }
12
ae0e35ee 13use Test::More tests => 54 * $iters;
cbacfd76 14use Catalyst;
2f381252 15use Catalyst::Test 'TestApp';
16
17if ( $ENV{CAT_BENCHMARK} ) {
18 require Benchmark;
19 Benchmark::timethis( $iters, \&run_tests );
20}
21else {
22 for ( 1 .. $iters ) {
23 run_tests();
24 }
25}
26
27sub run_tests {
28 {
29 # Test go to global private action
30 ok( my $response = request('http://localhost/action/go/global'),
31 'Request' );
32 ok( $response->is_success, 'Response Successful 2xx' );
33 is( $response->content_type, 'text/plain', 'Response Content-Type' );
34 is( $response->header('X-Catalyst-Action'),
35 'action/go/global', 'Main Class Action' );
36 }
37
38 {
39 my @expected = qw[
40 TestApp::Controller::Action::Go->one
41 TestApp::Controller::Action::Go->two
42 TestApp::Controller::Action::Go->three
43 TestApp::Controller::Action::Go->four
44 TestApp::Controller::Action::Go->five
45 TestApp::View::Dump::Request->process
a0a66cb8 46 TestApp::Controller::Root->end
2f381252 47 ];
48
49 @expected = map { /Action/ ? (_begin($_), $_) : ($_) } @expected;
50 my $expected = join( ", ", @expected );
51
52 # Test go to chain of actions.
53 ok( my $response = request('http://localhost/action/go/one'),
54 'Request' );
55 ok( $response->is_success, 'Response Successful 2xx' );
56 is( $response->content_type, 'text/plain', 'Response Content-Type' );
57 is( $response->header('X-Catalyst-Action'),
58 'action/go/one', 'Test Action' );
59 is(
60 $response->header('X-Test-Class'),
61 'TestApp::Controller::Action::Go',
62 'Test Class'
63 );
64 is( $response->header('X-Catalyst-Executed'),
65 $expected, 'Executed actions' );
66 like(
67 $response->content,
68 qr/^bless\( .* 'Catalyst::Request' \)$/s,
69 'Content is a serialized Catalyst::Request'
70 );
71 }
72
73 {
74 my @expected = qw[
75 TestApp::Controller::Action::Go->go_die
76 TestApp::Controller::Action::Go->args
a0a66cb8 77 TestApp::Controller::Root->end
2f381252 78 ];
79
80 @expected = map { /Action/ ? (_begin($_), $_) : ($_) } @expected;
81 my $expected = join( ", ", @expected );
82
83 ok( my $response = request('http://localhost/action/go/go_die'),
84 'Request' );
85 ok( $response->is_success, 'Response Successful 2xx' );
86 is( $response->content_type, 'text/plain', 'Response Content-Type' );
87 is( $response->header('X-Catalyst-Action'),
88 'action/go/go_die', 'Test Action'
89 );
90 is(
91 $response->header('X-Test-Class'),
92 'TestApp::Controller::Action::Go',
93 'Test Class'
94 );
95 is( $response->header('X-Catalyst-Executed'),
96 $expected, 'Executed actions' );
97 is( $response->content, $Catalyst::GO, "Go died as expected" );
98 }
ae0e35ee 99 {
100 ok(
101 my $response = request('http://localhost/action/go/model'),
102 'Request with args'
103 );
104 is( $response->content,
105 q[FATAL ERROR: Couldn't go("Model::Foo"): Action cannot _DISPATCH. Did you try to go() a non-controller action?],
106 q[go('Model::...') test]
107 );
108 }
109 {
110 ok(
111 my $response = request('http://localhost/action/go/view'),
112 'Request with args'
113 );
114 is( $response->content,
115 q[FATAL ERROR: Couldn't go("View::Dump"): Action cannot _DISPATCH. Did you try to go() a non-controller action?],
116 q[go('View::...') test]
117 );
118 }
2f381252 119 {
120 ok(
121 my $response =
122 request('http://localhost/action/go/with_args/old'),
123 'Request with args'
124 );
125 ok( $response->is_success, 'Response Successful 2xx' );
ae0e35ee 126 is( $response->content, 'old', 'go() with args (old)' );
2f381252 127 }
128
129 {
130 ok(
131 my $response = request(
132 'http://localhost/action/go/with_method_and_args/new'),
133 'Request with args and method'
134 );
135 ok( $response->is_success, 'Response Successful 2xx' );
ae0e35ee 136 is( $response->content, 'new', 'go() with args (new)' );
2f381252 137 }
138
139 # test go with embedded args
140 {
141 ok(
142 my $response =
143 request('http://localhost/action/go/args_embed_relative'),
144 'Request'
145 );
146 ok( $response->is_success, 'Response Successful 2xx' );
ae0e35ee 147 is( $response->content, 'ok', 'go() with args_embed_relative' );
2f381252 148 }
149
150 {
151 ok(
152 my $response =
153 request('http://localhost/action/go/args_embed_absolute'),
154 'Request'
155 );
156 ok( $response->is_success, 'Response Successful 2xx' );
ae0e35ee 157 is( $response->content, 'ok', 'go() with args_embed_absolute' );
2f381252 158 }
159 {
160 my @expected = qw[
161 TestApp::Controller::Action::TestRelative->relative_go
162 TestApp::Controller::Action::Go->one
163 TestApp::Controller::Action::Go->two
164 TestApp::Controller::Action::Go->three
165 TestApp::Controller::Action::Go->four
166 TestApp::Controller::Action::Go->five
167 TestApp::View::Dump::Request->process
a0a66cb8 168 TestApp::Controller::Root->end
2f381252 169 ];
170
171 @expected = map { /Action/ ? (_begin($_), $_) : ($_) } @expected;
172 my $expected = join( ", ", @expected );
173
174 # Test go to chain of actions.
175 ok( my $response = request('http://localhost/action/relative/relative_go'),
176 'Request' );
177 ok( $response->is_success, 'Response Successful 2xx' );
178 is( $response->content_type, 'text/plain', 'Response Content-Type' );
179 is( $response->header('X-Catalyst-Action'),
180 'action/relative/relative_go', 'Test Action' );
181 is(
182 $response->header('X-Test-Class'),
183 'TestApp::Controller::Action::Go',
184 'Test Class'
185 );
186 is( $response->header('X-Catalyst-Executed'),
187 $expected, 'Executed actions' );
188 like(
189 $response->content,
190 qr/^bless\( .* 'Catalyst::Request' \)$/s,
191 'Content is a serialized Catalyst::Request'
192 );
193 }
194 {
195 my @expected = qw[
196 TestApp::Controller::Action::TestRelative->relative_go_two
197 TestApp::Controller::Action::Go->one
198 TestApp::Controller::Action::Go->two
199 TestApp::Controller::Action::Go->three
200 TestApp::Controller::Action::Go->four
201 TestApp::Controller::Action::Go->five
202 TestApp::View::Dump::Request->process
a0a66cb8 203 TestApp::Controller::Root->end
2f381252 204 ];
205
206 @expected = map { /Action/ ? (_begin($_), $_) : ($_) } @expected;
207 my $expected = join( ", ", @expected );
208
209 # Test go to chain of actions.
210 ok(
211 my $response =
212 request('http://localhost/action/relative/relative_go_two'),
213 'Request'
214 );
215 ok( $response->is_success, 'Response Successful 2xx' );
216 is( $response->content_type, 'text/plain', 'Response Content-Type' );
217 is(
218 $response->header('X-Catalyst-Action'),
219 'action/relative/relative_go_two',
220 'Test Action'
221 );
222 is(
223 $response->header('X-Test-Class'),
224 'TestApp::Controller::Action::Go',
225 'Test Class'
226 );
227 is( $response->header('X-Catalyst-Executed'),
228 $expected, 'Executed actions' );
229 like(
230 $response->content,
231 qr/^bless\( .* 'Catalyst::Request' \)$/s,
232 'Content is a serialized Catalyst::Request'
233 );
234 }
235
236 # test class go -- MUST FAIL!
237 {
238 ok(
239 my $response = request(
240 'http://localhost/action/go/class_go_test_action'),
241 'Request'
242 );
243 ok( !$response->is_success, 'Response Fails' );
ae0e35ee 244 is( $response->content,
0f0d5870 245 q(FATAL ERROR: Couldn't go("TestApp"): Action has no namespace: cannot go() to a plain method or component, must be an :Action of some sort.),
ae0e35ee 246 'Error message'
247 );
2f381252 248 }
249
250 {
251 my @expected = qw[
252 TestApp::Controller::Action::Go->begin
253 TestApp::Controller::Action::Go->go_chained
254 TestApp::Controller::Action::Chained->begin
255 TestApp::Controller::Action::Chained->foo
256 TestApp::Controller::Action::Chained::Foo->spoon
257 TestApp::Controller::Action::Chained->end
258 ];
259
260 my $expected = join( ", ", @expected );
261
262 ok( my $response = request('http://localhost/action/go/go_chained'), 'go to chained + subcontroller endpoint' );
263 is( $response->header('X-Catalyst-Executed'),
264 $expected, 'Executed actions' );
46c30d96 265 is( $response->content, 'arg1, arg2; captureme', 'Content OK' );
2f381252 266 }
267
268}
269
270
271
272sub _begin {
273 local $_ = shift;
274 s/->(.*)$/->begin/;
275 return $_;
276}
277