The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;

use File::Spec ();
use File::Temp ();

use Test::More tests => 9;

BEGIN { use_ok('Mail::LocalDelivery'); }

sub readfile {
  my ($name) = @_;
  local *MESSAGE_FILE;
  open MESSAGE_FILE, "<$name" or die "coudn't read $name: $!";
  my @lines = <MESSAGE_FILE>;
  close MESSAGE_FILE;
  return \@lines;
}

my $message = readfile('t/messages/simple.msg');

my $maildir   = File::Temp::tempdir(CLEANUP => 1);
my $emergency = File::Temp::tempdir(CLEANUP => 1);

my (undef, $failfile) = File::Temp::tempfile(UNLINK => 1);
my $faildir = File::Spec->catdir($failfile, 'Maildir');

my $mbox      = File::Spec->catfile(File::Temp::tempdir(CLEANUP => 1), 'mbox');

$ENV{MAIL} =  $faildir;

my $logdir    = File::Temp::tempdir(CLEANUP => 1);

my $deliver = Mail::LocalDelivery->new(
  $message,
  emergency => $emergency,
  logger    => sub { },
);

isa_ok($deliver, 'Mail::LocalDelivery');

ok(
  (! -d File::Spec->catdir($emergency, 'new')),
  "emergency dir isn't a maildir before any accepts"
);

ok(
  (! -d File::Spec->catdir($maildir, 'new')),
  "and neither is the other temporary dir"
);

$deliver->deliver($maildir);

ok(
  (! -d File::Spec->catdir($emergency, 'new')),
  "emergency dir isn't a maildir after first accept"
);

ok(
  (  -d File::Spec->catdir($maildir, 'new')),
  "but the other maildir, which we accepted, is"
);

$deliver->deliver;

ok(
  (  -d File::Spec->catdir($emergency, 'new')),
  "after accept without dest, emergency is maildir"
);

ok(
  (! -e $mbox),
  "mbox doesn't exist before we deliver to it",
);

$deliver->deliver($mbox);

ok(
  (-e $mbox),
  "and once we deliver to it, mbox exists",
);