diff options
Diffstat (limited to 't/tests/sietima/role/subscriberonly/moderate.t')
-rw-r--r-- | t/tests/sietima/role/subscriberonly/moderate.t | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/t/tests/sietima/role/subscriberonly/moderate.t b/t/tests/sietima/role/subscriberonly/moderate.t new file mode 100644 index 0000000..c76e69b --- /dev/null +++ b/t/tests/sietima/role/subscriberonly/moderate.t @@ -0,0 +1,92 @@ +#!perl +use strict; +use warnings; +use 5.020; +use lib 't/lib'; +use Test::Sietima; +use Test::Sietima::MailStore; + +my @subscriber_addresses = ( + 'one@users.example.com', + 'two@users.example.com', +); +my $admin = 'admin@lists.example.com'; +my $ms = Test::Sietima::MailStore->new(); +my $s = make_sietima( + with_traits => ['SubscriberOnly::Moderate'], + subscribers => [@subscriber_addresses], + admin => $admin, + mail_store => $ms, +); + +subtest 'from subscriber' => sub { + $ms->clear; + test_sending( + sietima => $s, + mail => { from=>'one@users.example.com' }, + ); + is( + $ms->retrieve_by_tags('moderation'), + [], + 'no mails held for moderation', + ); +}; + +subtest 'from non-subscriber' => sub { + $ms->clear; + test_sending( + sietima => $s, + mail => { from=>'someone@users.example.com' }, + to => [$admin], + ); + + + my @deliveries = transport->deliveries; + is( + \@deliveries, + [ + hash { + field email => object { + call [cast=>'Email::MIME'] => object { + call [header_str => 'subject'] => match qr{\bheld for moderation\b}; + call_list parts => [ + object { + call body => match qr{Use id \S+ to refer to it}; + }, + object { + call sub {Email::MIME->new(shift->body)} => object { + call [header_str => 'subject'] => 'Test Message'; + }; + }, + ]; + }; + }; + }, + ], + 'the original mail should be attached', + np @deliveries, + ); + + is( + my $to_moderate = $ms->retrieve_by_tags('moderation'), + [ + { + id => T(), + mail => object { + call [header_str => 'from'] => 'someone@users.example.com'; + call [header_str => 'to'] => $s->return_path->address, + }, + }, + ], + 'mails was held for moderation', + ); + + transport->clear_deliveries; + my $msg_id = $to_moderate->[0]->{id}; + $s->resume($msg_id); + deliveries_are( + to => \@subscriber_addresses, + ); +}; + +done_testing; |