Barry Warsaw pushed to branch release-3.0 at mailman / Mailman
Commits:
640e1c57 by Barry Warsaw at 2016-02-06T18:23:17-05:00
Fix membership query for preferred addresses.
When multiple users are subscribed to a mailing list via their preferred
address, too many results are returned from a membership query,
resulting in an assertion error. Reported by Darrell Kresge.
(Closes: #190)
- - - - -
1fd0b90e by Barry Warsaw at 2016-02-06T18:31:02-05:00
Update the CI file.
- - - - -
14746ad2 by Barry Warsaw at 2016-02-06T18:32:47-05:00
More CI fixes.
- - - - -
4 changed files:
- .gitlab-ci.yml
- src/mailman/docs/NEWS.rst
- src/mailman/model/roster.py
- src/mailman/model/tests/test_roster.py
Changes:
=====================================
.gitlab-ci.yml
=====================================
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,18 +1,24 @@
# This is core test runner
-before_script:
- - pip install tox
-sqlite:
- script:
- - tox
+image: maxking/mailman-ci-runner
- tags:
- - sqlite
+variables:
+ POSTGRES_DB: "mailman_test"
+ POSTGRES_USER: "runner"
+ POSTGRES_PASSWORD: "runner"
+ MYSQL_ROOT_PASSWORD: "runner"
+ MYSQL_USER: "runner"
+ MYSQL_USER_PASSWORD: "runner"
+ MYSQL_DATABASE: "test_mailman"
+sqlite:
+ script:
+ - tox -e py34
pgsql:
+ services:
+ - postgres:latest
script:
- - MAILMAN_EXTRA_TESTING_CFG=/data/postgres.cfg tox -e pg
-
+ - MAILMAN_EXTRA_TESTING_CFG=/home/runner/configs/postgres.cfg tox -e pg
tags:
- postgres
=====================================
src/mailman/docs/NEWS.rst
=====================================
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -22,6 +22,8 @@ Bugs
subcommand extensions. Given by Aurélien Bompard. (Closes: #168)
* Don't traceback if a nonexistent message-id is deleted from the message
store. Given by Aurélien Bompard, tweaked by Barry Warsaw. (Closes: #167)
+ * Fix membership query when multiple users are subscribed to a mailing list.
+ Reported by Darrell Kresge. (Closes: #190)
Interfaces
----------
=====================================
src/mailman/model/roster.py
=====================================
--- a/src/mailman/model/roster.py
+++ b/src/mailman/model/roster.py
@@ -112,8 +112,9 @@ class AbstractRoster:
members_u = store.query(Member).filter(
Member.list_id == self._mlist.list_id,
Member.role == self.role,
- Address.email==email,
- Member.user_id == User.id)
+ Address.email == email,
+ Member.user_id == User.id,
+ User._preferred_address_id == Address.id)
return members_a.union(members_u).all()
def get_member(self, email):
=====================================
src/mailman/model/tests/test_roster.py
=====================================
--- a/src/mailman/model/tests/test_roster.py
+++ b/src/mailman/model/tests/test_roster.py
@@ -20,6 +20,7 @@
__all__ = [
'TestMailingListRoster',
'TestMembershipsRoster',
+ 'TestUserRoster',
]
@@ -36,6 +37,16 @@ from zope.component import getUtility
+def _set_preferred(user):
+ # Avoid circular imports.
+ from mailman.utilities.datetime import now
+ preferred = list(user.addresses)[0]
+ preferred.verified_on = now()
+ user.preferred_address = preferred
+ return preferred
+
+
+
class TestMailingListRoster(unittest.TestCase):
"""Test various aspects of a mailing list's roster."""
@@ -200,3 +211,33 @@ class TestMembershipsRoster(unittest.TestCase):
self.assertEqual(
[record.address.email for record in memberships],
['[email protected]', '[email protected]'])
+
+
+
+class TestUserRoster(unittest.TestCase):
+ """Test aspects of rosters when users are subscribed."""
+
+ layer = ConfigLayer
+
+ def setUp(self):
+ self._mlist = create_list('[email protected]')
+ user_manager = getUtility(IUserManager)
+ self._anne = user_manager.create_user('[email protected]')
+ self._bart = user_manager.create_user('[email protected]')
+ self._cris = user_manager.create_user('[email protected]')
+ self._dave = user_manager.create_user('[email protected]')
+ _set_preferred(self._anne)
+ _set_preferred(self._bart)
+ _set_preferred(self._cris)
+ _set_preferred(self._dave)
+
+ def test_narrow_get_member(self):
+ # Ensure that when multiple users are subscribed to the same mailing
+ # list via their preferred address, only the member in question is
+ # returned from .get_member().
+ self._mlist.subscribe(self._anne)
+ self._mlist.subscribe(self._bart)
+ self._mlist.subscribe(self._cris)
+ self._mlist.subscribe(self._dave)
+ member = self._mlist.members.get_member('[email protected]')
+ self.assertEqual(member.user, self._bart)
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/6d14d8c5ae6e52a3970af6d0ad6489cfd153920d...14746ad252ce8d4bcea8a4b1d8bee392da281b04
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org