aboutsummaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2016-12-29 15:52:34 +0000
committerdakkar <dakkar@thenautilus.net>2016-12-29 15:52:34 +0000
commit1b15f6a6858abb3413dc2df0c647690874f20b27 (patch)
tree84e01e4030b43d3fd59254fd9c52942ae42772c4 /t
parenttweak TODO (diff)
downloadSietima-1b15f6a6858abb3413dc2df0c647690874f20b27.tar.gz
Sietima-1b15f6a6858abb3413dc2df0c647690874f20b27.tar.bz2
Sietima-1b15f6a6858abb3413dc2df0c647690874f20b27.zip
tests for moderation cmdline
Diffstat (limited to 't')
-rw-r--r--t/lib/Test/Sietima.pm26
-rw-r--r--t/tests/sietima/role/subscriberonly/moderate.t56
2 files changed, 78 insertions, 4 deletions
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;