Commit | Line | Data |
141459fa |
1 | #!perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use FindBin; |
7 | use lib "$FindBin::Bin/lib"; |
8 | |
9 | our $iters; |
10 | |
11 | BEGIN { $iters = $ENV{CAT_BENCH_ITERS} || 2; } |
12 | |
b7ce908f |
13 | use Test::More tests => 99*$iters; |
141459fa |
14 | use Catalyst::Test 'TestApp'; |
15 | |
16 | if ( $ENV{CAT_BENCHMARK} ) { |
17 | require Benchmark; |
18 | Benchmark::timethis( $iters, \&run_tests ); |
19 | } |
20 | else { |
21 | for ( 1 .. $iters ) { |
22 | run_tests(); |
23 | } |
24 | } |
922c58d6 |
25 | |
141459fa |
26 | sub run_tests { |
d416846e |
27 | |
28 | # |
29 | # This is a simple test where the parent and child actions are |
30 | # within the same controller. |
31 | # |
141459fa |
32 | { |
33 | my @expected = qw[ |
5882c86e |
34 | TestApp::Controller::Action::Chained->begin |
35 | TestApp::Controller::Action::Chained->foo |
36 | TestApp::Controller::Action::Chained->endpoint |
37 | TestApp::Controller::Action::Chained->end |
141459fa |
38 | ]; |
922c58d6 |
39 | |
141459fa |
40 | my $expected = join( ", ", @expected ); |
922c58d6 |
41 | |
5882c86e |
42 | ok( my $response = request('http://localhost/chained/foo/1/end/2'), 'chained + local endpoint' ); |
141459fa |
43 | is( $response->header('X-Catalyst-Executed'), |
44 | $expected, 'Executed actions' ); |
45 | is( $response->content, '1; 2', 'Content OK' ); |
46 | } |
d416846e |
47 | |
48 | # |
49 | # This makes sure the above isn't found if the argument for the |
50 | # end action isn't supplied. |
51 | # |
52 | { |
53 | my $expected = undef; |
54 | |
5882c86e |
55 | ok( my $response = request('http://localhost/chained/foo/1/end'), |
56 | 'chained + local endpoint; missing last argument' ); |
d416846e |
57 | is( $response->header('X-Catalyst-Executed'), |
58 | $expected, 'Executed actions' ); |
59 | is( $response->header('Status'), 500, 'Status OK' ); |
60 | } |
61 | |
62 | # |
63 | # Tests the case when the child action is placed in a subcontroller. |
64 | # |
141459fa |
65 | { |
66 | my @expected = qw[ |
5882c86e |
67 | TestApp::Controller::Action::Chained->begin |
68 | TestApp::Controller::Action::Chained->foo |
69 | TestApp::Controller::Action::Chained::Foo->spoon |
70 | TestApp::Controller::Action::Chained->end |
141459fa |
71 | ]; |
922c58d6 |
72 | |
141459fa |
73 | my $expected = join( ", ", @expected ); |
922c58d6 |
74 | |
5882c86e |
75 | ok( my $response = request('http://localhost/chained/foo/1/spoon'), 'chained + subcontroller endpoint' ); |
141459fa |
76 | is( $response->header('X-Catalyst-Executed'), |
77 | $expected, 'Executed actions' ); |
78 | is( $response->content, '1; ', 'Content OK' ); |
79 | } |
d416846e |
80 | |
81 | # |
5882c86e |
82 | # Tests if the relative specification (e.g.: Chained('bar') ) works |
d416846e |
83 | # as expected. |
84 | # |
141459fa |
85 | { |
86 | my @expected = qw[ |
5882c86e |
87 | TestApp::Controller::Action::Chained->begin |
88 | TestApp::Controller::Action::Chained->bar |
89 | TestApp::Controller::Action::Chained->finale |
90 | TestApp::Controller::Action::Chained->end |
141459fa |
91 | ]; |
922c58d6 |
92 | |
141459fa |
93 | my $expected = join( ", ", @expected ); |
922c58d6 |
94 | |
5882c86e |
95 | ok( my $response = request('http://localhost/chained/bar/1/spoon'), 'chained + relative endpoint' ); |
141459fa |
96 | is( $response->header('X-Catalyst-Executed'), |
97 | $expected, 'Executed actions' ); |
98 | is( $response->content, '; 1, spoon', 'Content OK' ); |
99 | } |
d416846e |
100 | |
101 | # |
102 | # Just a test for multiple arguments. |
103 | # |
922c58d6 |
104 | { |
105 | my @expected = qw[ |
5882c86e |
106 | TestApp::Controller::Action::Chained->begin |
107 | TestApp::Controller::Action::Chained->foo2 |
108 | TestApp::Controller::Action::Chained->endpoint2 |
109 | TestApp::Controller::Action::Chained->end |
922c58d6 |
110 | ]; |
111 | |
112 | my $expected = join( ", ", @expected ); |
113 | |
5882c86e |
114 | ok( my $response = request('http://localhost/chained/foo2/10/20/end2/15/25'), |
115 | 'chained + local (2 args each)' ); |
922c58d6 |
116 | is( $response->header('X-Catalyst-Executed'), |
117 | $expected, 'Executed actions' ); |
118 | is( $response->content, '10, 20; 15, 25', 'Content OK' ); |
119 | } |
d416846e |
120 | |
121 | # |
122 | # The first three-chain test tries to call the action with :Args(1) |
1c34f703 |
123 | # specification. There's also a one action with a :CaptureArgs(1) |
d416846e |
124 | # attribute, that should not be dispatched to. |
125 | # |
922c58d6 |
126 | { |
127 | my @expected = qw[ |
5882c86e |
128 | TestApp::Controller::Action::Chained->begin |
129 | TestApp::Controller::Action::Chained->one_end |
130 | TestApp::Controller::Action::Chained->end |
922c58d6 |
131 | ]; |
132 | |
133 | my $expected = join( ", ", @expected ); |
134 | |
5882c86e |
135 | ok( my $response = request('http://localhost/chained/one/23'), |
922c58d6 |
136 | 'three-chain (only first)' ); |
137 | is( $response->header('X-Catalyst-Executed'), |
138 | $expected, 'Executed actions' ); |
139 | is( $response->content, '; 23', 'Content OK' ); |
140 | } |
d416846e |
141 | |
142 | # |
143 | # This is the second three-chain test, it goes for the action that |
144 | # handles "/one/$cap/two/$arg1/$arg2" paths. Should be the two action |
1c34f703 |
145 | # having :Args(2), not the one having :CaptureArgs(2). |
d416846e |
146 | # |
922c58d6 |
147 | { |
148 | my @expected = qw[ |
5882c86e |
149 | TestApp::Controller::Action::Chained->begin |
150 | TestApp::Controller::Action::Chained->one |
151 | TestApp::Controller::Action::Chained->two_end |
152 | TestApp::Controller::Action::Chained->end |
922c58d6 |
153 | ]; |
154 | |
155 | my $expected = join( ", ", @expected ); |
156 | |
5882c86e |
157 | ok( my $response = request('http://localhost/chained/one/23/two/23/46'), |
922c58d6 |
158 | 'three-chain (up to second)' ); |
159 | is( $response->header('X-Catalyst-Executed'), |
160 | $expected, 'Executed actions' ); |
161 | is( $response->content, '23; 23, 46', 'Content OK' ); |
162 | } |
d416846e |
163 | |
164 | # |
1c34f703 |
165 | # Last of the three-chain tests. Has no concurrent action with :CaptureArgs |
d416846e |
166 | # and is more thought to simply test the chain as a whole and the 'two' |
1c34f703 |
167 | # action specifying :CaptureArgs. |
d416846e |
168 | # |
922c58d6 |
169 | { |
170 | my @expected = qw[ |
5882c86e |
171 | TestApp::Controller::Action::Chained->begin |
172 | TestApp::Controller::Action::Chained->one |
173 | TestApp::Controller::Action::Chained->two |
174 | TestApp::Controller::Action::Chained->three_end |
175 | TestApp::Controller::Action::Chained->end |
922c58d6 |
176 | ]; |
177 | |
178 | my $expected = join( ", ", @expected ); |
179 | |
5882c86e |
180 | ok( my $response = request('http://localhost/chained/one/23/two/23/46/three/1/2/3'), |
922c58d6 |
181 | 'three-chain (all three)' ); |
182 | is( $response->header('X-Catalyst-Executed'), |
183 | $expected, 'Executed actions' ); |
184 | is( $response->content, '23, 23, 46; 1, 2, 3', 'Content OK' ); |
185 | } |
d416846e |
186 | |
187 | # |
188 | # Tests dispatching on number of arguments for :Args. This should be |
189 | # dispatched to the action expecting one argument. |
190 | # |
922c58d6 |
191 | { |
192 | my @expected = qw[ |
5882c86e |
193 | TestApp::Controller::Action::Chained->begin |
194 | TestApp::Controller::Action::Chained->multi1 |
195 | TestApp::Controller::Action::Chained->end |
922c58d6 |
196 | ]; |
197 | |
198 | my $expected = join( ", ", @expected ); |
199 | |
5882c86e |
200 | ok( my $response = request('http://localhost/chained/multi/23'), |
922c58d6 |
201 | 'multi-action (one arg)' ); |
202 | is( $response->header('X-Catalyst-Executed'), |
203 | $expected, 'Executed actions' ); |
204 | is( $response->content, '; 23', 'Content OK' ); |
205 | } |
d416846e |
206 | |
207 | # |
208 | # Belongs to the former test and goes for the action expecting two arguments. |
209 | # |
922c58d6 |
210 | { |
211 | my @expected = qw[ |
5882c86e |
212 | TestApp::Controller::Action::Chained->begin |
213 | TestApp::Controller::Action::Chained->multi2 |
214 | TestApp::Controller::Action::Chained->end |
922c58d6 |
215 | ]; |
216 | |
217 | my $expected = join( ", ", @expected ); |
218 | |
5882c86e |
219 | ok( my $response = request('http://localhost/chained/multi/23/46'), |
922c58d6 |
220 | 'multi-action (two args)' ); |
221 | is( $response->header('X-Catalyst-Executed'), |
222 | $expected, 'Executed actions' ); |
223 | is( $response->content, '; 23, 46', 'Content OK' ); |
224 | } |
d416846e |
225 | |
226 | # |
227 | # Dispatching on argument count again, this time we provide too many |
228 | # arguments, so dispatching should fail. |
229 | # |
230 | { |
231 | my $expected = undef; |
232 | |
5882c86e |
233 | ok( my $response = request('http://localhost/chained/multi/23/46/67'), |
d416846e |
234 | 'multi-action (three args, should lead to error)' ); |
235 | is( $response->header('X-Catalyst-Executed'), |
236 | $expected, 'Executed actions' ); |
237 | is( $response->header('Status'), 500, 'Status OK' ); |
238 | } |
239 | |
240 | # |
241 | # This tests the case when an action says it's the child of an action in |
242 | # a subcontroller. |
243 | # |
244 | { |
245 | my @expected = qw[ |
5882c86e |
246 | TestApp::Controller::Action::Chained->begin |
247 | TestApp::Controller::Action::Chained::Foo->higher_root |
248 | TestApp::Controller::Action::Chained->higher_root |
249 | TestApp::Controller::Action::Chained->end |
d416846e |
250 | ]; |
251 | |
252 | my $expected = join( ", ", @expected ); |
253 | |
5882c86e |
254 | ok( my $response = request('http://localhost/chained/higher_root/23/bar/11'), |
d416846e |
255 | 'root higher than child' ); |
256 | is( $response->header('X-Catalyst-Executed'), |
257 | $expected, 'Executed actions' ); |
258 | is( $response->content, '23; 11', 'Content OK' ); |
259 | } |
260 | |
261 | # |
262 | # Just a more complex version of the former test. It tests if a controller -> |
263 | # subcontroller -> controller dispatch works. |
264 | # |
265 | { |
266 | my @expected = qw[ |
5882c86e |
267 | TestApp::Controller::Action::Chained->begin |
268 | TestApp::Controller::Action::Chained->pcp1 |
269 | TestApp::Controller::Action::Chained::Foo->pcp2 |
270 | TestApp::Controller::Action::Chained->pcp3 |
271 | TestApp::Controller::Action::Chained->end |
d416846e |
272 | ]; |
273 | |
274 | my $expected = join( ", ", @expected ); |
275 | |
5882c86e |
276 | ok( my $response = request('http://localhost/chained/pcp1/1/pcp2/2/pcp3/3'), |
d416846e |
277 | 'parent -> child -> parent' ); |
278 | is( $response->header('X-Catalyst-Executed'), |
279 | $expected, 'Executed actions' ); |
280 | is( $response->content, '1, 2; 3', 'Content OK' ); |
281 | } |
282 | |
283 | # |
284 | # Tests dispatch on capture number. This test is for a one capture action. |
285 | # |
286 | { |
287 | my @expected = qw[ |
5882c86e |
288 | TestApp::Controller::Action::Chained->begin |
289 | TestApp::Controller::Action::Chained->multi_cap1 |
290 | TestApp::Controller::Action::Chained->multi_cap_end1 |
291 | TestApp::Controller::Action::Chained->end |
d416846e |
292 | ]; |
293 | |
294 | my $expected = join( ", ", @expected ); |
295 | |
5882c86e |
296 | ok( my $response = request('http://localhost/chained/multi_cap/1/baz'), |
d416846e |
297 | 'dispatch on capture num 1' ); |
298 | is( $response->header('X-Catalyst-Executed'), |
299 | $expected, 'Executed actions' ); |
300 | is( $response->content, '1; ', 'Content OK' ); |
301 | } |
302 | |
303 | # |
304 | # Belongs to the former test. This one goes for the action expecting two |
305 | # captures. |
306 | # |
307 | { |
308 | my @expected = qw[ |
5882c86e |
309 | TestApp::Controller::Action::Chained->begin |
310 | TestApp::Controller::Action::Chained->multi_cap2 |
311 | TestApp::Controller::Action::Chained->multi_cap_end2 |
312 | TestApp::Controller::Action::Chained->end |
d416846e |
313 | ]; |
314 | |
315 | my $expected = join( ", ", @expected ); |
316 | |
5882c86e |
317 | ok( my $response = request('http://localhost/chained/multi_cap/1/2/baz'), |
d416846e |
318 | 'dispatch on capture num 2' ); |
319 | is( $response->header('X-Catalyst-Executed'), |
320 | $expected, 'Executed actions' ); |
321 | is( $response->content, '1, 2; ', 'Content OK' ); |
322 | } |
323 | |
324 | # |
325 | # Tests the priority of a slurpy arguments action (with :Args) against |
326 | # two actions chained together. The two actions should win. |
327 | # |
328 | { |
329 | my @expected = qw[ |
5882c86e |
330 | TestApp::Controller::Action::Chained->begin |
331 | TestApp::Controller::Action::Chained->priority_a2 |
332 | TestApp::Controller::Action::Chained->priority_a2_end |
333 | TestApp::Controller::Action::Chained->end |
d416846e |
334 | ]; |
335 | |
336 | my $expected = join( ", ", @expected ); |
337 | |
5882c86e |
338 | ok( my $response = request('http://localhost/chained/priority_a/1/end/2'), |
d416846e |
339 | 'priority - slurpy args vs. parent/child' ); |
340 | is( $response->header('X-Catalyst-Executed'), |
341 | $expected, 'Executed actions' ); |
342 | is( $response->content, '1; 2', 'Content OK' ); |
343 | } |
344 | |
345 | # |
346 | # This belongs to the former test but tests if two chained actions have |
347 | # priority over an action with the exact arguments. |
348 | # |
349 | { |
350 | my @expected = qw[ |
5882c86e |
351 | TestApp::Controller::Action::Chained->begin |
352 | TestApp::Controller::Action::Chained->priority_b2 |
353 | TestApp::Controller::Action::Chained->priority_b2_end |
354 | TestApp::Controller::Action::Chained->end |
d416846e |
355 | ]; |
356 | |
357 | my $expected = join( ", ", @expected ); |
358 | |
5882c86e |
359 | ok( my $response = request('http://localhost/chained/priority_b/1/end/2'), |
d416846e |
360 | 'priority - fixed args vs. parent/child' ); |
361 | is( $response->header('X-Catalyst-Executed'), |
362 | $expected, 'Executed actions' ); |
363 | is( $response->content, '1; 2', 'Content OK' ); |
364 | } |
365 | |
366 | # |
b7ce908f |
367 | # This belongs to the former test but tests if two chained actions have |
368 | # priority over an action with one child action not having the Args() attr set. |
369 | # |
370 | { |
371 | my @expected = qw[ |
372 | TestApp::Controller::Action::Chained->begin |
373 | TestApp::Controller::Action::Chained->priority_c1 |
374 | TestApp::Controller::Action::Chained->priority_c2_xyz |
375 | TestApp::Controller::Action::Chained->end |
376 | ]; |
377 | |
378 | my $expected = join( ", ", @expected ); |
379 | |
380 | ok( my $response = request('http://localhost/chained/priority_c/1/xyz/'), |
381 | 'priority - no Args() order mismatch' ); |
382 | is( $response->header('X-Catalyst-Executed'), |
383 | $expected, 'Executed actions' ); |
384 | is( $response->content, '1; ', 'Content OK' ); |
385 | } |
386 | |
387 | # |
d416846e |
388 | # Test dispatching between two controllers that are on the same level and |
389 | # therefor have no parent/child relationship. |
390 | # |
391 | { |
392 | my @expected = qw[ |
5882c86e |
393 | TestApp::Controller::Action::Chained->begin |
394 | TestApp::Controller::Action::Chained::Bar->cross1 |
395 | TestApp::Controller::Action::Chained::Foo->cross2 |
396 | TestApp::Controller::Action::Chained->end |
d416846e |
397 | ]; |
398 | |
399 | my $expected = join( ", ", @expected ); |
400 | |
5882c86e |
401 | ok( my $response = request('http://localhost/chained/cross/1/end/2'), |
d416846e |
402 | 'cross controller w/o par/child relation' ); |
403 | is( $response->header('X-Catalyst-Executed'), |
404 | $expected, 'Executed actions' ); |
405 | is( $response->content, '1; 2', 'Content OK' ); |
406 | } |
b25353e5 |
407 | |
408 | # |
409 | # This is for testing if the arguments got passed to the actions |
410 | # correctly. |
411 | # |
412 | { |
413 | my @expected = qw[ |
5882c86e |
414 | TestApp::Controller::Action::Chained->begin |
415 | TestApp::Controller::Action::Chained::PassedArgs->first |
416 | TestApp::Controller::Action::Chained::PassedArgs->second |
417 | TestApp::Controller::Action::Chained::PassedArgs->third |
418 | TestApp::Controller::Action::Chained::PassedArgs->end |
b25353e5 |
419 | ]; |
420 | |
421 | my $expected = join( ", ", @expected ); |
422 | |
5882c86e |
423 | ok( my $response = request('http://localhost/chained/passedargs/a/1/b/2/c/3'), |
b25353e5 |
424 | 'Correct arguments passed to actions' ); |
425 | is( $response->header('X-Catalyst-Executed'), |
426 | $expected, 'Executed actions' ); |
427 | is( $response->content, '1; 2; 3', 'Content OK' ); |
428 | } |
47f9968d |
429 | |
430 | # |
431 | # The :Args attribute is optional, we check the action not specifying |
432 | # it with these tests. |
433 | # |
434 | { |
435 | my @expected = qw[ |
5882c86e |
436 | TestApp::Controller::Action::Chained->begin |
437 | TestApp::Controller::Action::Chained->opt_args |
438 | TestApp::Controller::Action::Chained->end |
47f9968d |
439 | ]; |
440 | |
441 | my $expected = join( ", ", @expected ); |
442 | |
5882c86e |
443 | ok( my $response = request('http://localhost/chained/opt_args/1/2/3'), |
47f9968d |
444 | 'Optional :Args attribute working' ); |
445 | is( $response->header('X-Catalyst-Executed'), |
446 | $expected, 'Executed actions' ); |
447 | is( $response->content, '; 1, 2, 3', 'Content OK' ); |
448 | } |
9cc84996 |
449 | |
450 | # |
451 | # Tests for optional PathPart attribute. |
452 | # |
453 | { |
454 | my @expected = qw[ |
5882c86e |
455 | TestApp::Controller::Action::Chained->begin |
456 | TestApp::Controller::Action::Chained->opt_pp_start |
457 | TestApp::Controller::Action::Chained->opt_pathpart |
458 | TestApp::Controller::Action::Chained->end |
9cc84996 |
459 | ]; |
460 | |
461 | my $expected = join( ", ", @expected ); |
462 | |
5882c86e |
463 | ok( my $response = request('http://localhost/chained/optpp/1/opt_pathpart/2'), |
9cc84996 |
464 | 'Optional :PathName attribute working' ); |
465 | is( $response->header('X-Catalyst-Executed'), |
466 | $expected, 'Executed actions' ); |
467 | is( $response->content, '1; 2', 'Content OK' ); |
468 | } |
469 | |
470 | # |
471 | # Tests for optional PathPart *and* Args attributes. |
472 | # |
473 | { |
474 | my @expected = qw[ |
5882c86e |
475 | TestApp::Controller::Action::Chained->begin |
476 | TestApp::Controller::Action::Chained->opt_all_start |
477 | TestApp::Controller::Action::Chained->oa |
478 | TestApp::Controller::Action::Chained->end |
9cc84996 |
479 | ]; |
480 | |
481 | my $expected = join( ", ", @expected ); |
482 | |
5882c86e |
483 | ok( my $response = request('http://localhost/chained/optall/1/oa/2/3'), |
9cc84996 |
484 | 'Optional :PathName *and* :Args attributes working' ); |
485 | is( $response->header('X-Catalyst-Executed'), |
486 | $expected, 'Executed actions' ); |
487 | is( $response->content, '1; 2, 3', 'Content OK' ); |
488 | } |
0e853a7f |
489 | |
490 | # |
491 | # Test if :Chained is the same as :Chained('/') |
492 | # |
493 | { |
494 | my @expected = qw[ |
495 | TestApp::Controller::Action::Chained->begin |
496 | TestApp::Controller::Action::Chained->rootdef |
497 | TestApp::Controller::Action::Chained->end |
498 | ]; |
499 | |
500 | my $expected = join( ", ", @expected ); |
501 | |
502 | ok( my $response = request('http://localhost/chained/rootdef/23'), |
503 | ":Chained is the same as :Chained('/')" ); |
504 | is( $response->header('X-Catalyst-Executed'), |
505 | $expected, 'Executed actions' ); |
506 | is( $response->content, '; 23', 'Content OK' ); |
507 | } |
508 | |
509 | # |
f88e7f69 |
510 | # Test if :Chained('.') is working |
0e853a7f |
511 | # |
512 | { |
513 | my @expected = qw[ |
514 | TestApp::Controller::Action::Chained->begin |
515 | TestApp::Controller::Action::Chained->parentchain |
516 | TestApp::Controller::Action::Chained::ParentChain->child |
517 | TestApp::Controller::Action::Chained->end |
518 | ]; |
519 | |
520 | my $expected = join( ", ", @expected ); |
521 | |
522 | ok( my $response = request('http://localhost/chained/parentchain/1/child/2'), |
523 | ":Chained('.') chains to parent controller action" ); |
524 | is( $response->header('X-Catalyst-Executed'), |
525 | $expected, 'Executed actions' ); |
526 | is( $response->content, '1; 2', 'Content OK' ); |
527 | } |
2349aeea |
528 | |
529 | # |
530 | # Test behaviour of auto actions returning '1' for the chain. |
531 | # |
532 | { |
533 | my @expected = qw[ |
534 | TestApp::Controller::Action::Chained->begin |
535 | TestApp::Controller::Action::Chained::Auto->auto |
536 | TestApp::Controller::Action::Chained::Auto::Foo->auto |
537 | TestApp::Controller::Action::Chained::Auto->foo |
538 | TestApp::Controller::Action::Chained::Auto::Foo->fooend |
539 | TestApp::Controller::Action::Chained->end |
540 | ]; |
541 | |
542 | my $expected = join( ", ", @expected ); |
543 | |
544 | ok( my $response = request('http://localhost/chained/autochain1/1/fooend/2'), |
545 | "Behaviour when auto returns 1 correct" ); |
546 | is( $response->header('X-Catalyst-Executed'), |
547 | $expected, 'Executed actions' ); |
548 | is( $response->content, '1; 2', 'Content OK' ); |
549 | } |
550 | |
551 | # |
552 | # Test behaviour of auto actions returning '0' for the chain. |
553 | # |
554 | { |
555 | my @expected = qw[ |
556 | TestApp::Controller::Action::Chained->begin |
557 | TestApp::Controller::Action::Chained::Auto->auto |
558 | TestApp::Controller::Action::Chained::Auto::Bar->auto |
559 | TestApp::Controller::Action::Chained->end |
560 | ]; |
561 | |
562 | my $expected = join( ", ", @expected ); |
563 | |
564 | ok( my $response = request('http://localhost/chained/autochain2/1/barend/2'), |
565 | "Behaviour when auto returns 0 correct" ); |
566 | is( $response->header('X-Catalyst-Executed'), |
567 | $expected, 'Executed actions' ); |
568 | is( $response->content, '1; 2', 'Content OK' ); |
569 | } |
570 | |
571 | # |
572 | # Test what auto actions are run when namespaces are changed |
573 | # horizontally. |
574 | # |
575 | { |
576 | my @expected = qw[ |
577 | TestApp::Controller::Action::Chained->begin |
578 | TestApp::Controller::Action::Chained::Auto->auto |
579 | TestApp::Controller::Action::Chained::Auto::Foo->auto |
580 | TestApp::Controller::Action::Chained::Auto::Bar->crossloose |
581 | TestApp::Controller::Action::Chained::Auto::Foo->crossend |
582 | TestApp::Controller::Action::Chained->end |
583 | ]; |
584 | |
585 | my $expected = join( ", ", @expected ); |
586 | |
587 | ok( my $response = request('http://localhost/chained/auto_cross/1/crossend/2'), |
588 | "Correct auto actions are run on cross controller dispatch" ); |
589 | is( $response->header('X-Catalyst-Executed'), |
590 | $expected, 'Executed actions' ); |
591 | is( $response->content, '1; 2', 'Content OK' ); |
592 | } |
593 | |
594 | # |
595 | # Test forwarding from auto action in chain dispatch. |
596 | # |
597 | { |
598 | my @expected = qw[ |
599 | TestApp::Controller::Action::Chained->begin |
600 | TestApp::Controller::Action::Chained::Auto->auto |
601 | TestApp::Controller::Action::Chained::Auto::Forward->auto |
602 | TestApp::Controller::Action::Chained::Auto->fw3 |
603 | TestApp::Controller::Action::Chained::Auto->fw1 |
604 | TestApp::Controller::Action::Chained::Auto::Forward->forwardend |
605 | TestApp::Controller::Action::Chained->end |
606 | ]; |
607 | |
608 | my $expected = join( ", ", @expected ); |
609 | |
610 | ok( my $response = request('http://localhost/chained/auto_forward/1/forwardend/2'), |
611 | "Forwarding out of auto in chain" ); |
612 | is( $response->header('X-Catalyst-Executed'), |
613 | $expected, 'Executed actions' ); |
614 | is( $response->content, '1; 2', 'Content OK' ); |
615 | } |
616 | |
617 | # |
618 | # Detaching out of the auto action of a chain. |
619 | # |
620 | { |
621 | my @expected = qw[ |
622 | TestApp::Controller::Action::Chained->begin |
623 | TestApp::Controller::Action::Chained::Auto->auto |
624 | TestApp::Controller::Action::Chained::Auto::Detach->auto |
625 | TestApp::Controller::Action::Chained::Auto->fw3 |
626 | TestApp::Controller::Action::Chained->end |
627 | ]; |
628 | |
629 | my $expected = join( ", ", @expected ); |
630 | |
631 | ok( my $response = request('http://localhost/chained/auto_detach/1/detachend/2'), |
632 | "Detaching out of auto in chain" ); |
633 | is( $response->header('X-Catalyst-Executed'), |
634 | $expected, 'Executed actions' ); |
635 | is( $response->content, '1; 2', 'Content OK' ); |
636 | } |
637 | |
638 | # |
639 | # Test forwarding from auto action in chain dispatch. |
640 | # |
641 | { |
642 | my $expected = undef; |
643 | |
644 | ok( my $response = request('http://localhost/chained/loose/23'), |
645 | "Loose end is not callable" ); |
646 | is( $response->header('X-Catalyst-Executed'), |
647 | $expected, 'Executed actions' ); |
648 | is( $response->header('Status'), 500, 'Status OK' ); |
649 | } |
650 | |
651 | # |
652 | # Test forwarding out of a chain. |
653 | # |
654 | { |
655 | my @expected = qw[ |
656 | TestApp::Controller::Action::Chained->begin |
657 | TestApp::Controller::Action::Chained->chain_fw_a |
658 | TestApp::Controller::Action::Chained->fw_dt_target |
659 | TestApp::Controller::Action::Chained->chain_fw_b |
660 | TestApp::Controller::Action::Chained->end |
661 | ]; |
662 | |
663 | my $expected = join( ", ", @expected ); |
664 | |
665 | ok( my $response = request('http://localhost/chained/chain_fw/1/end/2'), |
666 | "Forwarding out a chain" ); |
667 | is( $response->header('X-Catalyst-Executed'), |
668 | $expected, 'Executed actions' ); |
669 | is( $response->content, '1; 2', 'Content OK' ); |
670 | } |
671 | |
672 | # |
673 | # Test detaching out of a chain. |
674 | # |
675 | { |
676 | my @expected = qw[ |
677 | TestApp::Controller::Action::Chained->begin |
678 | TestApp::Controller::Action::Chained->chain_dt_a |
679 | TestApp::Controller::Action::Chained->fw_dt_target |
680 | TestApp::Controller::Action::Chained->end |
681 | ]; |
682 | |
683 | my $expected = join( ", ", @expected ); |
684 | |
685 | ok( my $response = request('http://localhost/chained/chain_dt/1/end/2'), |
686 | "Forwarding out a chain" ); |
687 | is( $response->header('X-Catalyst-Executed'), |
688 | $expected, 'Executed actions' ); |
689 | is( $response->content, '1; 2', 'Content OK' ); |
690 | } |
141459fa |
691 | } |