diff options
| author | Barry Warsaw | 2016-02-06 17:58:35 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2016-02-06 18:00:06 -0500 |
| commit | d87106191610b69387feb1e339ecdf6db9727c53 (patch) | |
| tree | 77496e828364f7dcc12fb86b93866359542b4258 /src | |
| parent | ad7c5f7c4c530a3587949c8eaf9ad064419a6e33 (diff) | |
| download | mailman-d87106191610b69387feb1e339ecdf6db9727c53.tar.gz mailman-d87106191610b69387feb1e339ecdf6db9727c53.tar.zst mailman-d87106191610b69387feb1e339ecdf6db9727c53.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/docs/NEWS.rst | 2 | ||||
| -rw-r--r-- | src/mailman/model/roster.py | 5 | ||||
| -rw-r--r-- | src/mailman/model/tests/test_roster.py | 31 |
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) |
