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('[email protected]', '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 ('[email protected]', '[email protected]'):
+ 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},
+ {'[email protected]',
+ '[email protected]',
+ '[email protected]',
+ })
+ # 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('[email protected]', '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
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org