Catalyst-Plugin-CachedUriForAction

 view release on metacpan or  search on metacpan

t/lib/TestApp/Controller/Action/Chained.pm  view on Meta::CPAN

use strict;
use warnings;

use base qw/Catalyst::Controller/;

#
#   Simple parent/child action test
#
sub foo  :PathPart('chained/foo')  :CaptureArgs(1) :Chained('/') {
}
sub endpoint  :PathPart('end')  :Chained('/action/chained/foo')  :Args(1) { }

#
#   Parent/child test with two args each
#
sub foo2 :PathPart('chained/foo2') :CaptureArgs(2) :Chained('/') { }
sub endpoint2 :PathPart('end2') :Chained('/action/chained/foo2') :Args(2) { }

#
#   three chain with concurrent endpoints
#
sub one   :PathPart('chained/one') :Chained('/')                   :CaptureArgs(1) { }
sub two   :PathPart('two')         :Chained('/action/chained/one') :CaptureArgs(2) { }
sub three_end :PathPart('three')       :Chained('two') :Args(3) { }

#
#   Test multiple chained actions with no captures
#
sub empty_chain_a : Chained('/')             PathPart('chained/empty') CaptureArgs(0) { }
sub empty_chain_b : Chained('empty_chain_a') PathPart('')              CaptureArgs(0) { }

t/unit_core_uri_for_action.t  view on Meta::CPAN

is(eval{ TestApp->uri_for_action($index_action, [ 'foo' ]) }, undef,
   "no URI returned for index action when snippets are given");

is(TestApp->uri_for_action($index_action),
   "/action/index",
   "index action returns correct path");

#
#   Chained Action
#
my $chained_action = '/action/chained/endpoint';

is(eval{ TestApp->uri_for_action($chained_action) }, undef,
   "Chained action without captures returns undef");

is(eval{ TestApp->uri_for_action($chained_action, [ 1, 2 ], 1) }, undef,
   "Chained action with too many captures returns undef");

is(TestApp->uri_for_action($chained_action, [ 1 ], 1),
   "/chained/foo/1/end/1",
   "Chained action with correct captures returns correct path");

t/unit_core_uri_for_action.t  view on Meta::CPAN

my $request = Catalyst::Request->new( {
                _log => Catalyst::Log->new,
                base => URI->new('http://127.0.0.1/foo')
              } );

my $context = TestApp->new( {
                request => $request,
                namespace => 'yada',
              } );

is( $context->uri_for_action( '/action/chained/endpoint', [ 1 ], 1 ),
    'http://127.0.0.1/foo/chained/foo/1/end/1',
    "uri_for a controller and action as string");

is(TestApp->uri_for_action($context->controller('Action::Chained')->action_for('endpoint'), [ 1 ], 1),
    '/chained/foo/1/end/1',
    "uri_for a controller and action, called with only class name");

is(TestApp->uri_for_action('/action/chained/endpoint', [ 1 ], 1 ),
    '/chained/foo/1/end/1',
    "uri_for a controller and action as string, called with only class name");

is(TestApp->uri_for_action( $chained_action, [ 1 ], 1 ),
    '/chained/foo/1/end/1',
    "uri_for action via dispatcher, called with only class name");

#
#   More Chained with Context Tests
#
{
    is( $context->uri_for_action( '/action/chained/endpoint2', [1,2], (3,4), { x => 5 } ),
        'http://127.0.0.1/foo/chained/foo2/1/2/end2/3/4?x=5',
        'uri_for_action correct for chained with multiple captures and args' );

    is( $context->uri_for_action( '/action/chained/endpoint2', [1,2,3,4], { x => 5 } ),
        'http://127.0.0.1/foo/chained/foo2/1/2/end2/3/4?x=5',
        'uri_for_action correct for chained with multiple captures and args combined' );

    is( $context->uri_for_action( '/action/chained/three_end', [1,2,3], (4,5,6) ),
        'http://127.0.0.1/foo/chained/one/1/two/2/3/three/4/5/6',
        'uri_for_action correct for chained with multiple capturing actions' );

    is( $context->uri_for_action( '/action/chained/three_end', [1,2,3,4,5,6] ),
        'http://127.0.0.1/foo/chained/one/1/two/2/3/three/4/5/6',
        'uri_for_action correct for chained with multiple capturing actions and args combined' );

    my $action_needs_two = '/action/chained/endpoint2';

    is( eval { $context->uri_for_action($action_needs_two, [1],     (2,3)) }, undef,
        'uri_for_action returns undef for not enough captures' );

    is( $context->uri_for_action($action_needs_two,            [1,2],   (2,3)),
        'http://127.0.0.1/foo/chained/foo2/1/2/end2/2/3',
        'uri_for_action returns correct uri for correct captures' );

    is( $context->uri_for_action($action_needs_two,            [1,2,2,3]),
        'http://127.0.0.1/foo/chained/foo2/1/2/end2/2/3',



( run in 0.310 second using v1.01-cache-2.11-cpan-27979f6cc8f )