use strict;
use warnings;
use 5.020;
use lib 't/lib';
use Test2::Bundle::Extended;
use Test2::Tools::MoreCompare qw(bag);
use Test2::Plugin::DieOnFail;
use Email::Stuffer;
use Email::Sender::Transport::Test;
use Data::Printer;
use Sietima;
my $return_path = 'sietima-test@list.example.com',
my $transport = Email::Sender::Transport::Test->new;
sub make_sietima {
$transport->clear_deliveries;
Sietima->new({
return_path => $return_path,
transport => $transport,
@_,
});
}
sub make_mail {
my (%args) = @_;
Email::Stuffer
->from($args{from}||'someone@users.example.com')
->to($args{no}||$return_path)
->text_body($args{body}||'some simple message')
->email;
}
ok(make_sietima(),'should instantiate') or bail_out;
subtest 'no subscribers' => sub {
my $s = make_sietima();
my $m = make_mail();
ok(
lives { $s->handle_mail($m) },
'should handle the mail',
$@,
);
my @deliveries = $transport->deliveries;
is(
\@deliveries,
[],
'nothing should be delivered',
np @deliveries,
);
};
subtest 'with subscribers' => sub {
my @subscriber_addresses = (
'one@users.example.com',
'two@users.example.com',
);
my $s = make_sietima(
subscribers => [@subscriber_addresses],
);
my $m = make_mail();
ok(
lives { $s->handle_mail($m) },
'should handle the mail',
$@,
);
my @deliveries = $transport->deliveries;
is(
\@deliveries,
array {
item hash {
field envelope => hash {
field from => $return_path;
field to => bag {
for (@subscriber_addresses) {
item object { call address => $_ };
}
};
};
};
end();
},
'there should be two deliveries',
np @deliveries,
);
};
done_testing;