The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use Test::More tests => 11;

#use Test::More qw/no_plan/;
use Test::Exception;
use Scalar::Util qw/tainted/;

use Class::CGI handlers => {
    email => 'Class::CGI::Email::Valid',
};

# test that basic functionality works

my $params = { email => 'some@example.com' };

my $cgi = Class::CGI->new($params);
$cgi->required('email');
is $cgi->param('email'), 'some@example.com',
  'We should be able to fetch a valid email';
ok !$cgi->is_missing_required('email'),
  '... and it should not be reported as missing';
ok !$cgi->errors, '... and no errors should be reported';

# test a bogus email

$params = { email => 'some@example@com' };

$cgi = Class::CGI->new($params);
$cgi->required('email');
is $cgi->param('email'), 'some@example@com',
  'We should be able to fetch a bogus email';
ok !$cgi->is_missing_required('email'),
  '... and it should not be reported as missing';
ok my $error = $cgi->errors,
  '... but an invalid address should report an error';
is $error->{email}, 'The email address did not appear to be valid',
  '... with the correct error message';

# test a missing email

$cgi = Class::CGI->new({});
$cgi->required('email');
ok !defined $cgi->param('email'),
  'We should not be able to fetch a missing email';
ok $cgi->is_missing_required('email'),
  '... and it should be reported as missing';
ok $error = $cgi->errors,
  '... but an invalid address should report an error';
is $error->{email}, 'You must supply a value for email',
  '... with the correct error message';