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 import => ['!pass'];

use Dancer ':syntax';
use Dancer::Test;

plan tests => 15;

my $i = 0;

ok(
   hook (before =>
        sub {
            content_type('text/xhtml');
        }
    )
);

ok(
   hook(before=>
        sub {
            if ( request->path_info eq '/redirect_from' ) {
                redirect('/redirect_to');
            }
            else {
                params->{number} = 42;
                var notice => "I am here";
                request->path_info('/');
            }
        }
    ),
    'before filter is defined'
);

get(
    '/' => sub {
        is( params->{number}, 42,             "params->{number} is set" );
        is( "I am here",      vars->{notice}, "vars->{notice} is set" );
        return 'index';
    }
);

get(
    '/redirect_from' => sub {
        $i++;
    }
);

route_exists       [ GET => '/' ];
response_status_is [ GET => '/' ] => 200;

my $path = '/somewhere';
my $request = [ GET => $path ];

route_doesnt_exist $request, "there is no route handler for $path...";

response_status_is $request => 200, "...but a response is returned though";

response_content_is $request, 'index',
  "which is the result of a redirection to /";

response_headers_are_deeply [ GET => '/redirect_from' ],
  [
    'Location'     => 'http://localhost/redirect_to',
    'Content-Type' => 'text/xhtml',
    'Server'       => "Perl Dancer ${Dancer::VERSION}",
    'X-Powered-By' => "Perl Dancer ${Dancer::VERSION}",
  ];

is $i, 0, 'never gone to redirect_from';