# $Id: /local/CPAN/Mango/t/lib/Mango/Tests/Catalyst/Login.pm 1644 2008-06-02T01:46:53.055259Z claco $ package Mango::Tests::Catalyst::Login; use strict; use warnings; BEGIN { use base 'Mango::Test::Class'; use Test::More; use Path::Class (); } sub path {'login'}; sub tests : Test(38) { my $self = shift; my $m = $self->client; ## not logged in $m->get_ok('http://localhost/'); $self->validate_markup($m->content); $m->follow_link_ok({text => 'Login'}); $m->title_like(qr/login/i); is($m->uri->path, '/' . $self->path . '/'); $m->content_unlike(qr/already logged in/i); $m->content_unlike(qr/welcome anonymous/i); ok(! $m->find_link(text => 'Logout')); $self->validate_markup($m->content); ## empty username/password $m->submit_form_ok({ form_id => 'login', fields => { username => undef, password => undef } }); $m->title_like(qr/login/i); $m->content_like(qr/username field is required/i); $m->content_like(qr/password field is required/i); ok(! $m->find_link(text => 'Logout')); $self->validate_markup($m->content); ## fail login $m->submit_form_ok({ form_id => 'login', fields => { username => 'foo', password => 'bar' } }); $m->title_like(qr/login/i); $m->content_like(qr/username or password.*incorrect/i); ok(! $m->find_link(text => 'Logout')); $self->validate_markup($m->content); ## login $m->submit_form_ok({ form_id => 'login', fields => { username => 'admin', password => 'admin' } }); $m->title_like(qr/login/i); $m->content_like(qr/login successful/i); $m->content_like(qr/welcome admin/i); ok(! $m->find_link(text => 'Login')); ok($m->find_link(text => 'Logout')); $self->validate_markup($m->content); ## no form, already logged in $m->reload; { local $SIG{__WARN__} = sub {}; ok(! $m->form_with_fields(qw/username password/)); }; $m->title_like(qr/login/i); $m->content_like(qr/already logged in/i); ok($m->find_link(text => 'Logout')); $self->validate_markup($m->content); ## logout $m->follow_link_ok({text => 'Logout'}); $m->content_like(qr/logout successful/i); $m->content_unlike(qr/welcome admin/i); ok($m->find_link(text => 'Login')); ok(! $m->find_link(text => 'Logout')); $self->validate_markup($m->content); }; sub tests_not_found : Test(2) { my $self = shift; my $m = $self->client; $m->get('http://localhost/login/'); if ($self->path eq 'login') { is( $m->status, 200 ); } else { is( $m->status, 404 ); } $self->validate_markup($m->content); } 1;