The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 5;

use Routes::Tiny;

my $r = Routes::Tiny->new;

$r->add_route(
    '/articles/:id',
    name        => 'article',
    constraints => {id => qr/\d+/}
);

my $m = $r->match('articles/abc');
ok(!$m);

$m = $r->match('articles/123');
is_deeply($m->params, {id => 123});
is($r->build_path('article', id => 123), '/articles/123');

eval { $r->build_path('article'); };
ok($@ =~ qr/Required param 'id' was not passed when building a path/);

eval { $r->build_path('article', id => 'abc'); };
ok($@ =~ qr/Param 'id' fails a constraint/);