aboutsummaryrefslogtreecommitdiff
path: root/t/tests/sietima/multi-role/debounce-moderate.t
blob: 8612df0c326f8409c22345717af65da3754963cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!perl 
use lib 't/lib';
use Test::Sietima;
use Test::Sietima::MailStore;
 
sub test_one($traits,$should_send=1) {
    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 => $traits,
        subscribers => \@subscriber_addresses,
        admin => $admin,
        mail_store => $ms,
    );
 
    test_sending(
        sietima => $s,
        mail => { from=>'someone@users.example.com' },
        mails => [{
            => object {
                call [header_str => 'subject'] => match qr{\bheld for moderation\b};
            },
        }],
    );
    transport->clear_deliveries;
 
    my $to_moderate = $ms->retrieve_by_tags('moderation');
    my $msg_id = $to_moderate->[0]->{id};
    $s->resume($msg_id);
 
    if ($should_send) {
        deliveries_are(
            to => \@subscriber_addresses,
            test_message => 'the resumed message should be sent',
        );
    }
    else {
        deliveries_are(
            mails => [],
            test_message => 'the resumed message should be dropped',
        );
    }
}
 
# there's an ordering dependency between Debounce and Moderate: if we 
# moderate a message that already has the X-Been-There header, it will 
# be dropped when resumed; the simplest solution is to apply Debounce 
# *before* Moderate, so messages are moderated *before* getting the 
# anti-loop header 
 
subtest 'debounce first' => sub {
    test_one(['Debounce','SubscriberOnly::Moderate'],1);
};
 
subtest 'moderate first' => sub {
    test_one(['SubscriberOnly::Moderate','Debounce'],0);
};
 
done_testing;