Barry Warsaw pushed to branch master at mailman / Mailman
Commits: 96469964 by Aditya at 2016-05-31T10:51:24-07:00 Remove nonmember subscriptions if susbcribed as member. On subscribing an address as a member, we check if the related user is subscribed as a nonmember through any address. If yes, we remove the nonmember subscription. - - - - - 4836d06c by Aditya at 2016-05-31T11:00:10-07:00 Add test to check deletion of nonmmeber record. - - - - - bcf2514e by Barry Warsaw at 2016-06-03T11:49:23-07:00 Fixes #237 Nonmember subscriptions are removed when one of the addresses controlled by a user is subscribed as a member. Given by Aditya Divekar. (Closes #237) - - - - - 3 changed files: - src/mailman/app/membership.py - src/mailman/app/tests/test_membership.py - src/mailman/docs/NEWS.rst Changes: ===================================== src/mailman/app/membership.py ===================================== --- a/src/mailman/app/membership.py +++ b/src/mailman/app/membership.py @@ -90,6 +90,12 @@ def add_member(mlist, record, role=MemberRole.member): error.fqdn_listname, record.email, error.role) member.preferences.preferred_language = record.language member.preferences.delivery_mode = record.delivery_mode + # Check for and remove nonmember subscriptions of the user to this list. + if role is MemberRole.member: + for address in user.addresses: + nonmember = mlist.nonmembers.get_member(address.email) + if nonmember is not None: + nonmember.unsubscribe() return member ===================================== src/mailman/app/tests/test_membership.py ===================================== --- a/src/mailman/app/tests/test_membership.py +++ b/src/mailman/app/tests/test_membership.py @@ -29,6 +29,7 @@ from mailman.interfaces.member import ( from mailman.interfaces.subscriptions import RequestRecord from mailman.interfaces.usermanager import IUserManager from mailman.testing.layers import ConfigLayer +from mailman.utilities.datetime import now from zope.component import getUtility @@ -221,6 +222,42 @@ class TestAddMember(unittest.TestCase): system_preferences.preferred_language)) self.assertEqual(cm.exception.email, email.lower()) + def test_delete_nonmembers_on_adding_member(self): + # GL: #237 - When a new address is subscribed, any existing nonmember + # subscriptions for this address; or any addresses also controlled by + # this user, are deleted. + anne_nonmember = add_member( + self._mlist, + RequestRecord('aper...@example.com', 'Anne Person', + DeliveryMode.regular, + system_preferences.preferred_language), + MemberRole.nonmember) + # Add a few other validated addresses to this user, and subscribe them + # as nonmembers. + for email in ('anne.per...@example.com', 'a.per...@example.com'): + address = anne_nonmember.user.register(email) + address.verified_on = now() + self._mlist.subscribe(address, MemberRole.nonmember) + # There are now three nonmembers. + self.assertEqual( + {address.email for address in self._mlist.nonmembers.addresses}, + {'aper...@example.com', + 'anne.per...@example.com', + 'a.per...@example.com', + }) + # Let's now add one of Anne's addresses as a member. This deletes all + # of Anne's nonmember memberships. + anne_member = add_member( + self._mlist, + RequestRecord('a.per...@example.com', 'Anne Person', + DeliveryMode.regular, + system_preferences.preferred_language), + MemberRole.member) + self.assertEqual(self._mlist.nonmembers.member_count, 0) + members = list(self._mlist.members.members) + self.assertEqual(len(members), 1) + self.assertEqual(members[0], anne_member) + class TestDeleteMember(unittest.TestCase): layer = ConfigLayer ===================================== src/mailman/docs/NEWS.rst ===================================== --- a/src/mailman/docs/NEWS.rst +++ b/src/mailman/docs/NEWS.rst @@ -83,6 +83,8 @@ Bugs (Closes #226) * MIME digests now put the individual message/rfc822 messages inside a multipart/digest subpart. (Closes #234) + * Nonmember subscriptions are removed when one of the addresses controlled by + a user is subscribed as a member. Given by Aditya Divekar. (Closes #237) Configuration ------------- View it on GitLab: https://gitlab.com/mailman/mailman/compare/6e6d041cf0c069ba25ce174e6dc431595e0a7222...bcf2514e1484bdd824201decb5f25dc5788d0ca7
_______________________________________________ Mailman-checkins mailing list Mailman-checkins@python.org Unsubscribe: https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org