The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use t::DB;
use <% dist_module %>::Util::Primer qw(prime_database);

my $mech = Test::WWW::Mechanize::Catalyst->new(catalyst_app => '<% dist_module %>');
subtest 'root page' => sub {
    $mech->get_ok('/');
    is $mech->ct, 'text/html', 'Content-Type is text/html';
    $mech->title_is('<% dist_module %>', 'On the root page');
    ok defined($mech->find_link(text => 'Login')), 'has a "Login" link';
    ok !defined($mech->find_link(text => 'Logout')),
      'does not have a "Logout" link';
};
$mech->follow_link_ok({ text => 'Login' }, 'follow the "Login" link');
subtest 'attempt to login as "admin" with a wrong password' => sub {
    $mech->submit_form_ok(
        { fields => { username => 'admin', password => 'wrongpassword' } },
        'submit the login form');
    $mech->content_contains('Wrong username or password', 'login failed');
};
subtest 'login as "admin" with the correct password' => sub {
    $mech->submit_form_ok(
        { fields => { username => 'admin', password => 'admin' } },
        'submit the login form with the right password'
    );
    ok defined($mech->find_link(text => 'Logout (admin)')),
      'has a "Logout" link and the right username';
    ok !defined($mech->find_link(text => 'Login')),
      'does not have a "Login" link';
};
done_testing();