diff options
| author | Mark Sapiro | 2017-07-26 08:11:33 -0700 |
|---|---|---|
| committer | Mark Sapiro | 2017-07-26 08:11:33 -0700 |
| commit | bea94cb9538a55b1376afd42c2ce751efce62cfe (patch) | |
| tree | 5fba570b0c6f4c0919009cb6f455c18bc732192a /src/mailman/chains/tests | |
| parent | 02826321d0430d7ffc1f674eeff4221941689ef7 (diff) | |
| download | mailman-bea94cb9538a55b1376afd42c2ce751efce62cfe.tar.gz mailman-bea94cb9538a55b1376afd42c2ce751efce62cfe.tar.zst mailman-bea94cb9538a55b1376afd42c2ce751efce62cfe.zip | |
Diffstat (limited to 'src/mailman/chains/tests')
| -rw-r--r-- | src/mailman/chains/tests/test_headers.py | 55 | ||||
| -rw-r--r-- | src/mailman/chains/tests/test_hold.py | 7 | ||||
| -rw-r--r-- | src/mailman/chains/tests/test_reject.py | 2 |
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. |
