use Test::More tests => 11;
use strict;
$^W = 1;
use lib 't/lib';
BEGIN { $Email::Send::__plugin_exclusion = qr/Jifty/ }
BEGIN { use_ok('Email::Send', 'Test'); }
my $sender = Email::Send->new;
my @mailers = $sender->all_mailers;
ok(
@mailers > 2, # we'll never unbundle Sendmail or SMTP
"we found at least a couple mailers",
);
my $ok = 1;
my @mailer_pkgs;
for my $mailer (@mailers) {
my $invocant = $sender->_mailer_invocant($mailer) or $ok = 0;
push @mailer_pkgs, $invocant unless Scalar::Util::blessed($invocant);
}
ok($ok, "all mailers are valid mailers");
ok(
grep({ $_ eq 'Email::Send::OK' } @mailer_pkgs),
"we found the OK sender (from t/lib)",
);
ok(
! grep({ $_ eq 'Email::Send::Unavail' } @mailer_pkgs),
"the unavailable (t/lib) sender isn't available",
);
my $message = <<'END_MESSAGE';
From: rjbs@whitehouse.gov
To: hdp@kremlin.su
Subject: this wall
Tear it down.
END_MESSAGE
{
# This will let us use try_all without actually trying all.
$sender->{_plugin_list} = { Test => 'Email::Send::Test' };
my $rv = $sender->send($message);
ok($rv, "we can send a message via 'try all mailers' method");
is(
Email::Send::Test->emails,
1,
"and it's sent to the (only) mailer available",
);
}
{
# This will let us use try_all without actually trying all.
$sender->{_plugin_list} = { Test => 'Email::Send::Fail' };
my $rv = $sender->send($message);
ok(!$rv, "we couldn't send when the only choice fails");
like("$rv", qr/unable to send/i, "and we got the expected error message");
}
{
my $rv = send(Unavail => $message);
ok(!$rv, "we can't send to an unavailable mailer");
like("$rv", qr/never available/i, "and we get its unavailable failure");
}