The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More 1.001013;
use Test::Path::Router;

use Path::Router;

for my $inline (0, 1) {
    my $INDEX     = bless {} => 'Blog::Index';
    my $SHOW_DATE = bless {} => 'Blog::ShowDate';
    my $GENERAL   = bless {} => 'Blog::Controller';

    my $router = Path::Router->new(inline => $inline);
    isa_ok($router, 'Path::Router');

# create some routes

    $router->add_route('blog' => (
        defaults       => {
            controller => 'blog',
            action     => 'index',
        },
        target => $INDEX,
    ));

    $router->add_route('blog/:year/:month/:day' => (
        defaults       => {
            controller => 'blog',
            action     => 'show_date',
        },
        validations => {
            year    => qr/\d{4}/,
            month   => qr/\d{1,2}/,
            day     => qr/\d{1,2}/,
        },
        target => $SHOW_DATE,
    ));

    $router->add_route('blog/:action/:id' => (
        defaults       => {
            controller => 'blog',
        },
        validations => {
            action  => qr/\D+/,
            id      => qr/\d+/
        },
        target => $GENERAL
    ));

    my $suffix = '';
    $suffix = ' (inline)' if $inline;

    {
        my $match = $router->match('/blog/');
        isa_ok($match, 'Path::Router::Route::Match');

        is($match->route->target, $INDEX, '... got the right target' . $suffix);
        is_deeply(
            $match->mapping,
            {
                controller => 'blog',
                action     => 'index',
            },
            '... got the right mapping' . $suffix
        );
    }
    {
        my $match = $router->match('/blog/2006/12/1');
        isa_ok($match, 'Path::Router::Route::Match');

        is($match->route->target, $SHOW_DATE, '... got the right target' . $suffix);
        is_deeply(
            $match->mapping,
            {
                controller => 'blog',
                action     => 'show_date',
                year       => 2006,
                month      => 12,
                day        => 1,
            },
            '... got the right mapping' . $suffix
        );
    }
    {
        my $match = $router->match('/blog/show/5');
        isa_ok($match, 'Path::Router::Route::Match');

        is($match->route->target, $GENERAL, '... got the right target' . $suffix);
        is_deeply(
            $match->mapping,
            {
                controller => 'blog',
                action     => 'show',
                id         => 5,
            },
            '... got the right mapping' . $suffix
        );
    }
    {
        my $match = $router->match('/blog/show/0');
        isa_ok($match, 'Path::Router::Route::Match');

        is($match->route->target, $GENERAL, '... got the right target' . $suffix);
        is_deeply(
            $match->mapping,
            {
                controller => 'blog',
                action     => 'show',
                id         => 0,
            },
            '... got the right mapping' . $suffix
        );
    }
}

done_testing;