Add failing test for passing arguments to visited chained actions.
Florian Ragwitz [Sun, 1 Mar 2009 21:02:52 +0000 (21:02 +0000)]
Courtesy of Radoslaw Zielinski.

t/aggregate/live_component_controller_action_visit.t
t/lib/TestApp/Controller/Action/Chained.pm
t/lib/TestApp/Controller/Action/Visit.pm

index 96fe762..f5a373d 100644 (file)
@@ -10,7 +10,7 @@ our $iters;
 
 BEGIN { $iters = $ENV{CAT_BENCH_ITERS} || 1; }
 
-use Test::More tests => 54 * $iters;
+use Test::More tests => 60 * $iters;
 use Catalyst::Test 'TestApp';
 
 if ( $ENV{CAT_BENCHMARK} ) {
@@ -271,10 +271,13 @@ sub run_tests {
 
         my $expected = join( ", ", @expected );
 
-        ok( my $response = request('http://localhost/action/visit/visit_chained'), 'visit to chained + subcontroller endpoint' );
-        is( $response->header('X-Catalyst-Executed'),
-            $expected, 'Executed actions' );
-        is( $response->content, '; 1', 'Content OK' );
+        for my $i ( 1..3 ) {
+            ok( my $response = request("http://localhost/action/visit/visit_chained/$i"),
+                "visit to chained + subcontroller endpoint for $i" );
+            is( $response->header('X-Catalyst-Executed'),
+                $expected, "Executed actions for $i" );
+            is( $response->content, "; $i", "Content OK for $i" );
+        }
     }
 
 }
index 6acc378..0efdcca 100644 (file)
@@ -15,7 +15,11 @@ sub begin :Private { }
 #
 #   Simple parent/child action test
 #
-sub foo  :PathPart('chained/foo')  :CaptureArgs(1) :Chained('/') { }
+sub foo  :PathPart('chained/foo')  :CaptureArgs(1) :Chained('/') {
+    my ( $self, $c, @args ) = @_;
+    die "missing argument" unless @args;
+    die "more than 1 argument" if @args > 1;
+}
 sub endpoint  :PathPart('end')  :Chained('/action/chained/foo')  :Args(1) { }
 
 #
index 3011a75..0447d34 100644 (file)
@@ -62,7 +62,9 @@ sub visit_die : Local {
 
 sub visit_chained : Local {
     my ( $self, $c, $val ) = @_;
-    $c->visit('/action/chained/foo/spoon',[1]);
+      $val eq 1 ? $c->visit( '/action/chained/foo/spoon',                                 [$val] )
+    : $val eq 2 ? $c->visit( qw/ Action::Chained::Foo spoon /,                            [$val] )
+    :             $c->visit( $c->controller('Action::Chained::Foo')->action_for('spoon'), [$val] )
 }
 
 sub view : Local {