From 1b15f6a6858abb3413dc2df0c647690874f20b27 Mon Sep 17 00:00:00 2001 From: dakkar Date: Thu, 29 Dec 2016 15:52:34 +0000 Subject: tests for moderation cmdline --- t/lib/Test/Sietima.pm | 26 +++++++++++- t/tests/sietima/role/subscriberonly/moderate.t | 56 ++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 4 deletions(-) (limited to 't') diff --git a/t/lib/Test/Sietima.pm b/t/lib/Test/Sietima.pm index 94811d2..d7b720c 100644 --- a/t/lib/Test/Sietima.pm +++ b/t/lib/Test/Sietima.pm @@ -18,7 +18,8 @@ sub import { Sietima::Policy->import::into($target); for my $function (qw(transport make_sietima make_mail - deliveries_are test_sending)) { + deliveries_are test_sending + run_cmdline_sub)) { no strict 'refs'; "${target}::${function}"->** = __PACKAGE__->can($function); } @@ -161,4 +162,27 @@ sub test_sending (%args) { $ctx->release; } +sub run_cmdline_sub($sietima,$method,$options={},$parameters={}) { + require Sietima::Runner; + my $r = Sietima::Runner->new({ + options => $options, + parameters => $parameters, + cmd => $sietima, + op => $method, + }); + $r->response(App::Spec::Run::Response->new); + ok( + lives { $sietima->$method($r) }, + "calling $method should live", + ); + my %ret; + for my $output ($r->response->outputs->@*) { + $ret{ + $output->error ? 'error' : 'output' + } .= $output->content; + } + $ret{exit} = $r->response->exit(); + return \%ret; +} + 1; diff --git a/t/tests/sietima/role/subscriberonly/moderate.t b/t/tests/sietima/role/subscriberonly/moderate.t index a641a55..be996e3 100644 --- a/t/tests/sietima/role/subscriberonly/moderate.t +++ b/t/tests/sietima/role/subscriberonly/moderate.t @@ -29,8 +29,7 @@ subtest 'from subscriber' => sub { ); }; -subtest 'from non-subscriber' => sub { - $ms->clear; +sub test_from_non_sub() { test_sending( sietima => $s, mail => { from=>'someone@users.example.com' }, @@ -51,6 +50,11 @@ subtest 'from non-subscriber' => sub { to => [$admin], }], ); +} + +subtest 'from non-subscriber' => sub { + $ms->clear; + test_from_non_sub; is( my $to_moderate = $ms->retrieve_by_tags('moderation'), @@ -66,12 +70,58 @@ subtest 'from non-subscriber' => sub { 'mails was held for moderation', ); - transport->clear_deliveries; + like( + run_cmdline_sub($s, 'list_mails_in_moderation_queue'), + hash { + field exit => 0; + field error => DNE; + field output => qr{\A + ^\N+\b1 \s+ message\N+$ \n + ^\* \s+ \w+ \s+ someone\@users\.example\.com + \s+ "Test[ ]Message" + \s+ \(\N+?\)$ + }smx; + }, + 'mails in queue should be listed from command line', + ); + my $msg_id = $to_moderate->[0]->{id}; + + like( + run_cmdline_sub( + $s, 'show_mail_from_moderation_queue', + {}, { 'mail-id' => $msg_id }, + ), + hash { + field exit => 0; + field error => DNE; + field output => qr{\A + ^Message \s+ \w+:$ + .*? + ^From: \s+ someone\@users\.example\.com \s*$ + }smx; + }, + 'mail in queue should be shown from command line', + ); + + transport->clear_deliveries; $s->resume($msg_id); deliveries_are( to => \@subscriber_addresses, ); }; +subtest 'from non-subscriber, drop' => sub { + $ms->clear; + test_from_non_sub; + + my $msg_id = $ms->retrieve_by_tags('moderation')->[0]{id}; + $s->drop($msg_id); + is( + $ms->retrieve_by_tags('moderation'), + [], + 'message should be dropped', + ); +}; + done_testing; -- cgit v1.2.3