use Test::More;
use Dancer::Test;
use Dancer ':syntax', ':tests';
use Dancer::Route;
plan tests => 20;
{
get( '/', { agent => 'foo' } => sub {'agent foo'} );
get('/', { agent => 'bar' }, sub { 'agent bar'} );
get( '/', sub {'all agents'} );
get( '/foo', { agent => 'foo' } => sub {'foo only'} );
get('/welcome', {agent => qr{Mozilla}} => sub { "hey Mozilla!" });
get('/welcome' => sub { "hello" });
}
eval { get '/fail', { false_option => 42 } => sub { } };
like $@, qr/Not a valid option for route matching: `false_option'/,
"only supported options are allowed";
my @tests = (
{method => 'GET', path => '/', expected => 'agent foo', agent => 'foo'},
{method => 'GET', path => '/', expected => 'agent bar', agent => 'bar'},
{method => 'GET', path => '/', expected => 'all agents'},
{method => 'GET', path => '/foo', expected => 'foo only', agent => 'foo'},
{ method => 'GET',
path => '/welcome',
expected => 'hey Mozilla!',
agent => 'Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.1.5)'
},
{method => 'GET', path => '/welcome', expected => 'hello'},
);
foreach my $test (@tests) {
$ENV{HTTP_USER_AGENT} = $test->{agent} || undef;
my $req = [$test->{method} => $test->{path}];
route_exists $req;
response_status_is $req => 200;
response_content_is $req, $test->{expected};
}
$ENV{HTTP_USER_AGENT} = 'bar';
route_doesnt_exist [GET => '/foo'];