Mojolicious-Plugin-RoutesAuthDBI
view release on metacpan or search on metacpan
t/05-access.t view on Meta::CPAN
use Mojo::Base 'Mojolicious';
use Test::More;
use Test::Mojo;
use DBI;
use lib 't';
plan skip_all => 'set env TEST_CONN_PG="DBI:Pg:dbname=<db>/<pg_user>/<passwd>" to enable this test'
unless $ENV{TEST_CONN_PG};
has dbh => sub { DBI->connect(split m|[/]|, $ENV{TEST_CONN_PG})};
my $config = do 't/config.pm';
sub startup {
my $app = shift;
$app->plugin('RoutesAuthDBI',
auth=>{current_user_fn=>'auth_user'},
admin=>{prefix=>$config->{prefix}, trust=>$config->{trust}, role_admin=>$config->{role_admin},},
template=>$config,
);
my $r = $app->routes;
push @{ $r->namespaces }, 'Test';
$r->route('/noauth')->over(access=>{auth=>0,})
->to('install#manual', namespace=>$config->{namespace});
$r->route('/auth-only')->over(access=>{auth=>'only'})
->to('install#manual', namespace=>$config->{namespace});
$r->get('/authenticated')->over(authenticated => 1)
->to('install#manual', namespace=>$config->{namespace});
$r->route('/test1/:action')->over(access=>{auth=>1})->to(controller=>'Test1',);
$r->route('/callback')->over(access=>{role=>$config->{role_admin}})
->to(cb=>sub {shift->render(format=>'txt', text=>'Admin role have access')},);
$r->route('/auth/cookie')->to( cb => sub {
my $c = shift;
#~ cookie($c);
my $json = $c->req->json;
return $c->render(json=>{cookie=>$c->access->auth_cookie($c)})
unless $json && $json->{cookie};
return $c->render(json=>{profile=>{ %{$c->access->auth_cookie($c, $json->{cookie})} } });
} );
}
my $t = Test::Mojo->new(__PACKAGE__);
#~ subtest 'foo' => sub {
#~ my $routes = $config->{app_routes}($t);
#~ warn $routes;
#~ };
$t->get_ok("/noauth")->status_is(200)
->content_like(qr/Welcome Mojolicious::Plugin::RoutesAuthDBI/i);
$t->get_ok("/auth-only")->status_is(401)
->content_like(qr/Please sign in/i);
$t->get_ok("/authenticated")->status_is(404);
#~ ->content_like(qr/Please sign in/i);
$t->get_ok("/$config->{prefix}/sign/in/$config->{admin_user}/$config->{admin_pass}")->status_is(302)
->${ \$config->{location_is} }("/$config->{prefix}");
$t->get_ok("/$config->{prefix}")->status_is(200)
->content_like(qr/You are signed as/i);
( run in 0.740 second using v1.01-cache-2.11-cpan-71847e10f99 )