Dancer2
view release on metacpan or search on metacpan
use strict;
use warnings;
use Test::More;
use Test::Fatal;
use Dancer2;
use Dancer2::Core::App;
use Dancer2::Core::Dispatcher;
use Dancer2::Core::Hook;
use Path::Tiny qw< path >;
# our app/dispatcher object
my $app = Dancer2::Core::App->new( name => 'main', );
$app->setting( show_stacktrace => 1 ); # enable show stacktrace
my $dispatcher = Dancer2::Core::Dispatcher->new( apps => [$app] );
# first basic tests
isa_ok $app, 'Dancer2::Core::App';
# some routes to play with
my @routes = (
{ method => 'get',
regexp => '/',
code => sub {'/'},
},
{ method => 'get',
regexp => '/blog',
code => sub {'/blog'},
},
);
# testing with and without prefixes
for my $p ( '/', '/mywebsite' ) {
for my $r (@routes) {
$app->prefix($p);
$app->add_route(%$r);
}
}
is $app->environment, 'development';
my $routes_regexps = $app->routes_regexps_for('get');
is( scalar(@$routes_regexps), 4, "route regexps are OK" );
for my $path ( '/', '/blog', '/mywebsite/', '/mywebsite/blog', ) {
my $env = {
REQUEST_METHOD => 'GET',
PATH_INFO => $path
};
my $expected = {
'/' => '/',
'/blog' => '/blog',
'/mywebsite/' => '/',
'/mywebsite/blog' => '/blog',
};
my $resp = $dispatcher->dispatch($env);
is $resp->[0], 200, 'got a 200';
is $resp->[2][0], $expected->{$path}, 'got expected route';
}
note "testing lexical prefixes";
# clear the prefix in $app (and by the way, makes sure it works when prefix is
( run in 1.442 second using v1.01-cache-2.11-cpan-54e63673c56 )