package tests::functional::LrMailTest;
use strict;
use base qw/Lire::Test::FunctionalTestCase/;
use Lire::Config::Value;
use Lire::Config::Build qw/ac_path/;
use Lire::Utils qw/create_file tempdir/;
# For some reason related to the use of MIME::Parser
# we need to use this module if we want to be able to run it
# directly from the TestRunner
{
use utf8;
use MIME::Parser;
}
sub new {
my $self = shift->SUPER::new( @_ );
$self->{'lr_mail_path'} = ac_path( 'libexecdir', 'PACKAGE' ) . "/lr_mail";
my $tmpdir = tempdir( "MIME::Parser_XXXXXX", 'CLEANUP' => 1 );
$self->{'parser'} = new MIME::Parser();
$self->{'parser'}->output_under( $tmpdir );
return $self;
}
sub test_lr_mail {
my $self = $_[0];
my $content = <<EOF;
This is a plain text file.
With some French characters: יאך.
EOF
my $file = $self->rundir() . "/test.txt";
create_file( $file, $content );
my $email = 'flacoste@logreport.org';
my $result = $self->lire_run( "$self->{'lr_mail_path'} -f $email -s 'Subject with spaces' text/plain $file $email" );
$self->annotate( $result->stderr() );
$self->assert_equals( 0, $result->status() );
$self->assert_does_not_match( qr/ (crit|err|warning) /, $result->stderr(),
"There were warnings or error messages." );
$self->assert( ! $result->stdout(), "STDOUT should be empty" );
my $msg = $result->sent_mail();
$self->assert_equals( 1, scalar @$msg );
$self->assert_deep_equals( [ $email ], $msg->[0]{'recipients'} );
my $entity = $self->{'parser'}->parse_data( $msg->[0]{'message'} );
my $head = $entity->head();
$self->assert_equals( "Subject with spaces\n", $head->get( 'Subject' ) );
$self->assert_equals( "$email\n", $head->get( 'From' ) );
$self->assert_equals( 'text/plain', $head->mime_type() );
my $body = $entity->bodyhandle();
$self->assert_equals( $content, $body->as_string() );
}
sub test_lr_mail_from_config {
my $self = $_[0];
my $file = $self->rundir() . "/test.txt";
create_file( $file, "Test\n" );
my $email = 'flacoste@logreport.org';
my $cfg = $self->create_test_cfg_file( 'lr_mail_from_config' );
$cfg->get( "lr_mail_from" )->set( $email );
$cfg->get( "lr_mail_reply_to" )->set( $email );
$cfg->save();
my $result = $self->lire_run( "$self->{'lr_mail_path'} text/plain $file $email" );
$self->annotate( $result->stderr() );
$self->assert_equals( 0, $result->status() );
$self->assert_does_not_match( qr/ (crit|err|warning) /, $result->stderr(),
"There were warnings or error messages." );
$self->assert( ! $result->stdout(), "STDOUT should be empty" );
my $msg = $result->sent_mail();
$self->assert_equals( 1, scalar @$msg );
$self->assert_deep_equals( [ $email ], $msg->[0]{'recipients'} );
my $entity = $self->{'parser'}->parse_data( $msg->[0]{'message'} );
my $head = $entity->head();
$self->assert_equals( "$email\n", $head->get( 'From' ) );
$self->assert_equals( "$email\n", $head->get( 'Reply-To' ) );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1