summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBarry Warsaw2014-03-15 16:15:41 -0400
committerBarry Warsaw2014-03-15 16:15:41 -0400
commit3a9725b91ef822122a70170333d71b58e1788a78 (patch)
tree0f37ff16e9633ec3937f0a09485aec4ebd98529c /src
parent547d6b4c53cf9b893571706b8b0bee386b1dd043 (diff)
downloadmailman-3a9725b91ef822122a70170333d71b58e1788a78.tar.gz
mailman-3a9725b91ef822122a70170333d71b58e1788a78.tar.zst
mailman-3a9725b91ef822122a70170333d71b58e1788a78.zip
Diffstat (limited to 'src')
-rw-r--r--src/mailman/docs/NEWS.rst2
-rw-r--r--src/mailman/model/listmanager.py2
-rw-r--r--src/mailman/model/tests/test_listmanager.py15
3 files changed, 19 insertions, 0 deletions
diff --git a/src/mailman/docs/NEWS.rst b/src/mailman/docs/NEWS.rst
index 37789526d..05e29d2c6 100644
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -67,6 +67,8 @@ Bugs
* Fix non-member moderation rule to prefer a member sender if both members
and non-members are in the message's sender list. Given by Aurélien
Bompard. (LP: #1291452)
+ * Fix IntegrityError (against PostgreSQL) when deleting a list with content
+ filters. Given by Aurélien Bompard. (LP: #1117174)
3.0 beta 3 -- "Here Again"
diff --git a/src/mailman/model/listmanager.py b/src/mailman/model/listmanager.py
index 44953efc6..d648a5bde 100644
--- a/src/mailman/model/listmanager.py
+++ b/src/mailman/model/listmanager.py
@@ -34,6 +34,7 @@ from mailman.interfaces.listmanager import (
IListManager, ListAlreadyExistsError, ListCreatedEvent, ListCreatingEvent,
ListDeletedEvent, ListDeletingEvent)
from mailman.model.mailinglist import MailingList
+from mailman.model.mime import ContentFilter
from mailman.utilities.datetime import now
@@ -79,6 +80,7 @@ class ListManager:
"""See `IListManager`."""
fqdn_listname = mlist.fqdn_listname
notify(ListDeletingEvent(mlist))
+ store.find(ContentFilter, ContentFilter.mailing_list == mlist).remove()
store.remove(mlist)
notify(ListDeletedEvent(fqdn_listname))
diff --git a/src/mailman/model/tests/test_listmanager.py b/src/mailman/model/tests/test_listmanager.py
index 0a7133840..2d3a4e3dc 100644
--- a/src/mailman/model/tests/test_listmanager.py
+++ b/src/mailman/model/tests/test_listmanager.py
@@ -29,6 +29,7 @@ __all__ = [
import unittest
+from storm.locals import Store
from zope.component import getUtility
from mailman.app.lifecycle import create_list
@@ -40,6 +41,7 @@ from mailman.interfaces.messages import IMessageStore
from mailman.interfaces.requests import IListRequests
from mailman.interfaces.subscriptions import ISubscriptionService
from mailman.interfaces.usermanager import IUserManager
+from mailman.model.mime import ContentFilter
from mailman.testing.helpers import (
event_subscribers, specialized_message_from_string)
from mailman.testing.layers import ConfigLayer
@@ -129,6 +131,19 @@ Message-ID: <argon>
saved_message = getUtility(IMessageStore).get_message_by_id('<argon>')
self.assertEqual(saved_message.as_string(), msg.as_string())
+ def test_content_filters_are_deleted_when_mailing_list_is_deleted(self):
+ # When a mailing list with content filters is deleted, the filters
+ # must be deleted first or an IntegrityError will be raised.
+ filter_names = ('filter_types', 'pass_types',
+ 'filter_extensions', 'pass_extensions')
+ for name in filter_names:
+ setattr(self._ant, name, ['test-filter-1', 'test-filter-2'])
+ getUtility(IListManager).delete(self._ant)
+ store = Store.of(self._ant)
+ filters = store.find(ContentFilter,
+ ContentFilter.mailing_list == self._ant)
+ self.assertEqual(filters.count(), 0)
+
class TestListCreation(unittest.TestCase):