diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/docs/NEWS.rst | 2 | ||||
| -rw-r--r-- | src/mailman/model/listmanager.py | 2 | ||||
| -rw-r--r-- | src/mailman/model/tests/test_listmanager.py | 15 |
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): |
