Dancer

 view release on metacpan or  search on metacpan

t/lib/TestApp.pm  view on Meta::CPAN

# Test routes for GH #1205 - avoiding "Too late to set another cookie..."
# explosions if accessing the session in an after hook
get '/session/after_hook/read' => sub {
    session after_hook => "value set in route";
    return "Meh";
};
hook after => sub {
    my $response = shift;
    if (request->path eq '/session/after_hook/read') {
        $response->content("Read " . session('after_hook'));
    }
};

get '/session/after_hook/write' => sub {
    session after_hook => "value set in route";
    return "Meh";
};
hook after => sub {
    my $response = shift;
    if (request->path eq '/session/after_hook/write') {
        session after_hook => "value changed in hook";
        $response->content("Read " . session('after_hook'));
    }
};

get '/session/after_hook' => sub {
    session('after_hook');
};

get '/session/after_hook/send_file' => sub {
    my $name = session('person') || "random person";
    my $content = "Hi there, $name";
    return send_file(\$content, content_type => 'text/plain');
};
hook after => sub {
    my $response = shift;
    # If the request path is stringified to 'SCALAR(...)' then it was a 
    # send_file(\$content,...) call; check we can still access session 
    # contents without exploding (GH #1205)
    if (request->path =~ /^SCALAR/) {
        my $name = session('person');
        my $session = session();
        $response->content(
            $response->content . " (after hook fired)"
        );
    }
};
get '/session/destroy' => sub {
    session->destroy;
    return "OK, destroyed";
};

any['put','post'] => '/jsondata' => sub {
    request->body;
};

post '/form' => sub {
    params->{foo};
};

get '/unicode' => sub {
    "cyrillic shcha \x{0429}",
};

get '/forward_to_unavailable_route' => sub {
    forward "/some_route_that_does_not_exist"
};

get '/issues/499/true' => sub {
    "OK" if system('true') == 0  
};

get '/issues/499/false' => sub {
    "OK" if system('false') != 0  
};

# TODO: will need to be made more Clever if we need to test changing
# nested settings
put '/setting/:setting_name/:new_value' => sub {
    set params->{setting_name} => params->{new_value};
    return "OK";
};
get '/setting/:setting_name' => sub {
    return setting( params->{setting_name} );
};
get '/largepage' => sub {
    return "large page content\n" x 50;
};

true;



( run in 0.537 second using v1.01-cache-2.11-cpan-39bf76dae61 )