summaryrefslogtreecommitdiff
path: root/src/mailman/chains/tests/test_headers.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/chains/tests/test_headers.py')
-rw-r--r--src/mailman/chains/tests/test_headers.py40
1 files changed, 38 insertions, 2 deletions
diff --git a/src/mailman/chains/tests/test_headers.py b/src/mailman/chains/tests/test_headers.py
index c55d39876..104913034 100644
--- a/src/mailman/chains/tests/test_headers.py
+++ b/src/mailman/chains/tests/test_headers.py
@@ -29,9 +29,12 @@ from mailman.chains.headers import HeaderMatchRule
from mailman.config import config
from mailman.email.message import Message
from mailman.model.mailinglist import HeaderMatch
-from mailman.interfaces.chain import LinkAction
+from mailman.interfaces.chain import LinkAction, HoldEvent
+from mailman.core.chains import process
from mailman.testing.layers import ConfigLayer
-from mailman.testing.helpers import LogFileMark, configuration
+from mailman.testing.helpers import (LogFileMark, configuration,
+ event_subscribers, get_queue_messages,
+ specialized_message_from_string as mfs)
@@ -152,3 +155,36 @@ class TestHeaderChain(unittest.TestCase):
('Bar', 'b+', LinkAction.jump, 'discard'),
('Baz', 'z+', LinkAction.jump, 'accept'),
])
+
+ @configuration('antispam', header_checks="""
+ Foo: foo
+ """, jump_chain="hold")
+ def test_priority_site_over_list(self):
+ # Test that the site-wide checks take precedence over the list-specific
+ # checks.
+ msg = mfs("""\
+From: anne@example.com
+To: test@example.com
+Subject: A message
+Message-ID: <ant>
+Foo: foo
+MIME-Version: 1.0
+
+A message body.
+""")
+ msgdata = {}
+ self._mlist.header_matches = [
+ HeaderMatch(header='Foo', pattern='foo', chain='accept')
+ ]
+ # This event subscriber records the event that occurs when the message
+ # is processed by the owner chain.
+ events = []
+ def catch_event(event):
+ events.append(event)
+ with event_subscribers(catch_event):
+ process(self._mlist, msg, msgdata, start_chain='header-match')
+ self.assertEqual(len(events), 1)
+ event = events[0]
+ # Site-wide wants to hold the message, the list wants to accept it.
+ self.assertTrue(isinstance(event, HoldEvent))
+ self.assertEqual(event.chain, config.chains['hold'])