summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBarry Warsaw2015-08-04 22:28:57 -0400
committerBarry Warsaw2015-08-04 22:28:57 -0400
commite64ee63b97decf8223a96bbc834a438e4d4fda58 (patch)
tree76b7502e6bfebc9813eb8fbb430c1d76267ac00b /src
parentd42dd4a73228eab1309e517695866ac7debbba23 (diff)
parent9855a380b17124627623093771d3fa4bb83749c2 (diff)
downloadmailman-e64ee63b97decf8223a96bbc834a438e4d4fda58.tar.gz
mailman-e64ee63b97decf8223a96bbc834a438e4d4fda58.tar.zst
mailman-e64ee63b97decf8223a96bbc834a438e4d4fda58.zip
Diffstat (limited to 'src')
-rw-r--r--src/mailman/docs/NEWS.rst2
-rw-r--r--src/mailman/model/listmanager.py6
-rw-r--r--src/mailman/model/tests/test_listmanager.py25
3 files changed, 32 insertions, 1 deletions
diff --git a/src/mailman/docs/NEWS.rst b/src/mailman/docs/NEWS.rst
index b813e5b65..c7b88b298 100644
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -24,6 +24,8 @@ Bugs
variable `[mailman]html_to_plain_text_command` in the `mailman.cfg` file
defines the command to use. It defaults to `lynx`. (Closes: #109)
* Confirmation messages should not be `Precedence: bulk`. (Closes #75)
+ * Fix constraint violations on mailing list deletes affecting PostgreSQL.
+ Given by Abhilash Raj. (Closes #115)
Configuration
-------------
diff --git a/src/mailman/model/listmanager.py b/src/mailman/model/listmanager.py
index 8fc739543..7e69064c9 100644
--- a/src/mailman/model/listmanager.py
+++ b/src/mailman/model/listmanager.py
@@ -27,7 +27,9 @@ from mailman.interfaces.address import InvalidEmailAddressError
from mailman.interfaces.listmanager import (
IListManager, ListAlreadyExistsError, ListCreatedEvent, ListCreatingEvent,
ListDeletedEvent, ListDeletingEvent)
-from mailman.model.mailinglist import IAcceptableAliasSet, MailingList
+from mailman.model.autorespond import AutoResponseRecord
+from mailman.model.mailinglist import (
+ IAcceptableAliasSet, ListArchiver, MailingList)
from mailman.model.mime import ContentFilter
from mailman.utilities.datetime import now
from zope.event import notify
@@ -76,7 +78,9 @@ class ListManager:
notify(ListDeletingEvent(mlist))
# First delete information associated with the mailing list.
IAcceptableAliasSet(mlist).clear()
+ store.query(AutoResponseRecord).filter_by(mailing_list=mlist).delete()
store.query(ContentFilter).filter_by(mailing_list=mlist).delete()
+ store.query(ListArchiver).filter_by(mailing_list=mlist).delete()
store.delete(mlist)
notify(ListDeletedEvent(fqdn_listname))
diff --git a/src/mailman/model/tests/test_listmanager.py b/src/mailman/model/tests/test_listmanager.py
index f74bf54d7..c8fe39186 100644
--- a/src/mailman/model/tests/test_listmanager.py
+++ b/src/mailman/model/tests/test_listmanager.py
@@ -29,10 +29,12 @@ import unittest
from mailman.app.lifecycle import create_list
from mailman.app.moderator import hold_message
from mailman.config import config
+from mailman.interfaces.autorespond import IAutoResponseSet, Response
from mailman.interfaces.address import InvalidEmailAddressError
from mailman.interfaces.listmanager import (
IListManager, ListAlreadyExistsError, ListCreatedEvent, ListCreatingEvent,
ListDeletedEvent, ListDeletingEvent)
+from mailman.interfaces.mailinglist import IListArchiverSet
from mailman.interfaces.messages import IMessageStore
from mailman.interfaces.requests import IListRequests
from mailman.interfaces.subscriptions import ISubscriptionService
@@ -86,6 +88,29 @@ class TestListManager(unittest.TestCase):
sorted(getUtility(IListManager).list_ids),
['ant.example.com', 'bee.example.com', 'cat.example.com'])
+ def test_delete_list_with_list_archiver_set(self):
+ # Ensure that mailing lists with archiver sets can be deleted. In
+ # issue #115, this fails under PostgreSQL, but not SQLite.
+ mlist = create_list('ant@example.com')
+ # We don't keep a reference to this archiver set just because it makes
+ # pyflakes unhappy. It doesn't change the outcome.
+ IListArchiverSet(mlist)
+ list_manager = getUtility(IListManager)
+ list_manager.delete(mlist)
+ self.assertIsNone(list_manager.get('ant@example.com'))
+
+ def test_delete_list_with_autoresponse_record(self):
+ # Ensure that mailing lists with auto-response sets can be deleted. In
+ # issue #115, this fails under PostgreSQL, but not SQLite.
+ list_manager = getUtility(IListManager)
+ user_manager = getUtility(IUserManager)
+ mlist = create_list('ant@example.com')
+ address = user_manager.create_address('aperson@example.com')
+ autoresponse_set = IAutoResponseSet(mlist)
+ autoresponse_set.response_sent(address, Response.hold)
+ list_manager.delete(mlist)
+ self.assertIsNone(list_manager.get('ant@example.com'))
+
class TestListLifecycleEvents(unittest.TestCase):