summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mailman/docs/NEWS.rst2
-rw-r--r--src/mailman/model/roster.py5
-rw-r--r--src/mailman/model/tests/test_roster.py31
3 files changed, 36 insertions, 2 deletions
diff --git a/src/mailman/docs/NEWS.rst b/src/mailman/docs/NEWS.rst
index 4d08e770e..909c5365b 100644
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -56,6 +56,8 @@ Bugs
subscribed address that is not linked to a user. Given by Aurélien Bompard.
* Fix a REST server crash when trying to subscribe a user without a preferred
address. (Closes #185)
+ * Fix membership query when multiple users are subscribed to a mailing list.
+ Reported by Darrell Kresge. (Closes: #190)
Configuration
-------------
diff --git a/src/mailman/model/roster.py b/src/mailman/model/roster.py
index 6890debf4..450c5ee84 100644
--- a/src/mailman/model/roster.py
+++ b/src/mailman/model/roster.py
@@ -109,8 +109,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):
diff --git a/src/mailman/model/tests/test_roster.py b/src/mailman/model/tests/test_roster.py
index 259069824..8264a7be8 100644
--- a/src/mailman/model/tests/test_roster.py
+++ b/src/mailman/model/tests/test_roster.py
@@ -20,6 +20,7 @@
__all__ = [
'TestMailingListRoster',
'TestMembershipsRoster',
+ 'TestUserRoster',
]
@@ -204,3 +205,33 @@ class TestMembershipsRoster(unittest.TestCase):
users = list(self._anne.memberships.users)
self.assertEqual(len(users), 1)
self.assertEqual(users[0], self._anne)
+
+
+
+class TestUserRoster(unittest.TestCase):
+ """Test aspects of rosters when users are subscribed."""
+
+ layer = ConfigLayer
+
+ def setUp(self):
+ self._mlist = create_list('ant@example.com')
+ user_manager = getUtility(IUserManager)
+ self._anne = user_manager.create_user('anne@example.com')
+ self._bart = user_manager.create_user('bart@example.com')
+ self._cris = user_manager.create_user('cris@example.com')
+ self._dave = user_manager.create_user('dave@example.com')
+ 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('bart@example.com')
+ self.assertEqual(member.user, self._bart)