summaryrefslogtreecommitdiff
path: root/src/mailman/chains/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/chains/tests')
-rw-r--r--src/mailman/chains/tests/test_headers.py55
-rw-r--r--src/mailman/chains/tests/test_hold.py7
-rw-r--r--src/mailman/chains/tests/test_reject.py2
3 files changed, 62 insertions, 2 deletions
diff --git a/src/mailman/chains/tests/test_headers.py b/src/mailman/chains/tests/test_headers.py
index cd4c932cc..2aae503b2 100644
--- a/src/mailman/chains/tests/test_headers.py
+++ b/src/mailman/chains/tests/test_headers.py
@@ -25,7 +25,8 @@ from mailman.chains.headers import HeaderMatchRule, make_link
from mailman.config import config
from mailman.core.chains import process
from mailman.email.message import Message
-from mailman.interfaces.chain import DiscardEvent, HoldEvent, LinkAction
+from mailman.interfaces.chain import (
+ DiscardEvent, HoldEvent, LinkAction, RejectEvent)
from mailman.interfaces.mailinglist import IHeaderMatchList
from mailman.testing.helpers import (
LogFileMark, configuration, event_subscribers,
@@ -343,3 +344,55 @@ A message body.
# ...and are actually the identical objects.
for link1, link2 in zip(links_1, links_2):
self.assertIs(link1.rule, link2.rule)
+
+ def test_hold_returns_reason(self):
+ # Test that a match with hold action returns a reason
+ msg = mfs("""\
+From: anne@example.com
+To: test@example.com
+Subject: Bad subject
+Message-ID: <ant>
+
+body
+
+""")
+ msgdata = {}
+ header_matches = IHeaderMatchList(self._mlist)
+ header_matches.append('Subject', 'Bad', 'hold')
+ # This event subscriber records the event that occurs when the message
+ # is processed by the owner chain.
+ events = []
+ with event_subscribers(events.append):
+ process(self._mlist, msg, msgdata, start_chain='header-match')
+ self.assertEqual(len(events), 1)
+ event = events[0]
+ self.assertIsInstance(event, HoldEvent)
+ self.assertEqual(msgdata['moderation_reasons'],
+ [('Header "{}" matched a header rule',
+ 'Bad subject')])
+
+ def test_reject_returns_reason(self):
+ # Test that a match with reject action returns a reason
+ msg = mfs("""\
+From: anne@example.com
+To: test@example.com
+Subject: Bad subject
+Message-ID: <ant>
+
+body
+
+""")
+ msgdata = {}
+ header_matches = IHeaderMatchList(self._mlist)
+ header_matches.append('Subject', 'Bad', 'reject')
+ # This event subscriber records the event that occurs when the message
+ # is processed by the owner chain.
+ events = []
+ with event_subscribers(events.append):
+ process(self._mlist, msg, msgdata, start_chain='header-match')
+ self.assertEqual(len(events), 1)
+ event = events[0]
+ self.assertIsInstance(event, RejectEvent)
+ self.assertEqual(msgdata['moderation_reasons'],
+ [('Header "{}" matched a header rule',
+ 'Bad subject')])
diff --git a/src/mailman/chains/tests/test_hold.py b/src/mailman/chains/tests/test_hold.py
index b973b874c..560916e3b 100644
--- a/src/mailman/chains/tests/test_hold.py
+++ b/src/mailman/chains/tests/test_hold.py
@@ -111,6 +111,7 @@ A message body.
msgdata = dict(moderation_reasons=[
'TEST-REASON-1',
'TEST-REASON-2',
+ ('TEST-{}-REASON-{}', 'FORMAT', 3),
])
logfile = LogFileMark('mailman.vette')
process_chain(self._mlist, msg, msgdata, start_chain='hold')
@@ -126,18 +127,22 @@ A message body.
self.fail('Unexpected message: %s' % item.msg)
self.assertIn(' TEST-REASON-1', payloads['owner'])
self.assertIn(' TEST-REASON-2', payloads['owner'])
+ self.assertIn(' TEST-FORMAT-REASON-3', payloads['owner'])
self.assertIn(' TEST-REASON-1', payloads['sender'])
self.assertIn(' TEST-REASON-2', payloads['sender'])
+ self.assertIn(' TEST-FORMAT-REASON-3', payloads['sender'])
logged = logfile.read()
self.assertIn('TEST-REASON-1', logged)
self.assertIn('TEST-REASON-2', logged)
+ self.assertIn('TEST-FORMAT-REASON-3', logged)
# Check the reason passed to hold_message().
requests = IListRequests(self._mlist)
self.assertEqual(requests.count_of(RequestType.held_message), 1)
request = requests.of_type(RequestType.held_message)[0]
key, data = requests.get_request(request.id)
self.assertEqual(
- data.get('_mod_reason'), 'TEST-REASON-1; TEST-REASON-2')
+ data.get('_mod_reason'),
+ 'TEST-REASON-1; TEST-REASON-2; TEST-FORMAT-REASON-3')
def test_hold_chain_no_reasons_given(self):
msg = mfs("""\
diff --git a/src/mailman/chains/tests/test_reject.py b/src/mailman/chains/tests/test_reject.py
index f6fd6a8fe..8fce1de4a 100644
--- a/src/mailman/chains/tests/test_reject.py
+++ b/src/mailman/chains/tests/test_reject.py
@@ -45,12 +45,14 @@ Subject: Ignore
msgdata = dict(moderation_reasons=[
'TEST-REASON-1',
'TEST-REASON-2',
+ ('TEST-{}-REASON-{}', 'FORMAT', 3),
])
process_chain(self._mlist, self._msg, msgdata, start_chain='reject')
bounces = get_queue_messages('virgin', expected_count=1)
payload = bounces[0].msg.get_payload(0).as_string()
self.assertIn('TEST-REASON-1', payload)
self.assertIn('TEST-REASON-2', payload)
+ self.assertIn('TEST-FORMAT-REASON-3', payload)
def test_no_reason(self):
# There may be no moderation reasons.