diff options
| author | Stephen A. Goss | 2011-08-25 16:37:31 -0700 |
|---|---|---|
| committer | Stephen A. Goss | 2011-08-25 16:37:31 -0700 |
| commit | 5a38df15cd6ca0619e0e987624457e0453425dce (patch) | |
| tree | 946d8397154e2b801fb9090ccc4671cf362f79b6 /src/mailman/app | |
| parent | 043562c695387a12e655997abf41cef77cb3d3a4 (diff) | |
| download | mailman-5a38df15cd6ca0619e0e987624457e0453425dce.tar.gz mailman-5a38df15cd6ca0619e0e987624457e0453425dce.tar.zst mailman-5a38df15cd6ca0619e0e987624457e0453425dce.zip | |
LP: #834130 add moderators and owners through REST API w/tests
Diffstat (limited to 'src/mailman/app')
| -rw-r--r-- | src/mailman/app/membership.py | 10 | ||||
| -rw-r--r-- | src/mailman/app/subscriptions.py | 17 | ||||
| -rw-r--r-- | src/mailman/app/tests/test_membership.py | 14 |
3 files changed, 24 insertions, 17 deletions
diff --git a/src/mailman/app/membership.py b/src/mailman/app/membership.py index e7c2f40e3..ee4aa1769 100644 --- a/src/mailman/app/membership.py +++ b/src/mailman/app/membership.py @@ -43,7 +43,8 @@ from mailman.utilities.passwords import encrypt_password -def add_member(mlist, email, realname, password, delivery_mode, language): +def add_member(mlist, email, realname, password, delivery_mode, language, + role=MemberRole.member): """Add a member right now. The member's subscription must be approved by whatever policy the list @@ -70,9 +71,6 @@ def add_member(mlist, email, realname, password, delivery_mode, language): """ # Let's be extra cautious. getUtility(IEmailValidator).validate(email) - if mlist.members.get_member(email) is not None: - raise AlreadySubscribedError( - mlist.fqdn_listname, email, MemberRole.member) # Check to see if the email address is banned. if getUtility(IBanManager).is_banned(email, mlist.fqdn_listname): raise MembershipIsBannedError(mlist, email) @@ -99,7 +97,7 @@ def add_member(mlist, email, realname, password, delivery_mode, language): # scheme is recorded in the hashed password string. user.password = encrypt_password(password) user.preferences.preferred_language = language - member = mlist.subscribe(address, MemberRole.member) + member = mlist.subscribe(address, role) member.preferences.delivery_mode = delivery_mode else: # The user exists and is linked to the address. @@ -110,7 +108,7 @@ def add_member(mlist, email, realname, password, delivery_mode, language): raise AssertionError( 'User should have had linked address: {0}'.format(address)) # Create the member and set the appropriate preferences. - member = mlist.subscribe(address, MemberRole.member) + member = mlist.subscribe(address, role) member.preferences.preferred_language = language member.preferences.delivery_mode = delivery_mode return member diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py index f11494e75..6f9399520 100644 --- a/src/mailman/app/subscriptions.py +++ b/src/mailman/app/subscriptions.py @@ -37,7 +37,7 @@ from mailman.core.constants import system_preferences from mailman.interfaces.address import InvalidEmailAddressError from mailman.interfaces.listmanager import ( IListManager, ListDeletedEvent, NoSuchListError) -from mailman.interfaces.member import DeliveryMode +from mailman.interfaces.member import DeliveryMode, MemberRole from mailman.interfaces.subscriptions import ( ISubscriptionService, MissingUserError) from mailman.interfaces.usermanager import IUserManager @@ -138,16 +138,12 @@ class SubscriptionService: for member in self.get_members(): yield member - def join(self, fqdn_listname, subscriber, - real_name= None, delivery_mode=None): + def join(self, fqdn_listname, subscriber, real_name= None, + delivery_mode=DeliveryMode.regular, role=MemberRole.member): """See `ISubscriptionService`.""" mlist = getUtility(IListManager).get(fqdn_listname) if mlist is None: raise NoSuchListError(fqdn_listname) - # Convert from string to enum. - mode = (DeliveryMode.regular - if delivery_mode is None - else delivery_mode) # Is the subscriber a user or email address? if '@' in subscriber: # It's an email address, so we'll want a real name. @@ -163,14 +159,15 @@ class SubscriptionService: # it can't be retrieved. Note that none of these are used unless # the address is completely new to us. password = make_user_friendly_password() - return add_member(mlist, subscriber, real_name, password, mode, - system_preferences.preferred_language) + return add_member(mlist, subscriber, real_name, password, + delivery_mode, + system_preferences.preferred_language, role) else: # We have to assume it's a user id. user = getUtility(IUserManager).get_user_by_id(subscriber) if user is None: raise MissingUserError(subscriber) - return mlist.subscribe(user) + return mlist.subscribe(user, role) def leave(self, fqdn_listname, address): """See `ISubscriptionService`.""" diff --git a/src/mailman/app/tests/test_membership.py b/src/mailman/app/tests/test_membership.py index 2b69c7f39..df2f73134 100644 --- a/src/mailman/app/tests/test_membership.py +++ b/src/mailman/app/tests/test_membership.py @@ -34,7 +34,8 @@ from mailman.app.membership import add_member from mailman.config import config from mailman.core.constants import system_preferences from mailman.interfaces.bans import IBanManager -from mailman.interfaces.member import DeliveryMode, MembershipIsBannedError +from mailman.interfaces.member import (DeliveryMode, MembershipIsBannedError, + MemberRole) from mailman.interfaces.usermanager import IUserManager from mailman.testing.helpers import reset_the_world from mailman.testing.layers import ConfigLayer @@ -58,6 +59,7 @@ class AddMemberTest(unittest.TestCase): system_preferences.preferred_language) self.assertEqual(member.address.email, 'aperson@example.com') self.assertEqual(member.mailing_list, 'test@example.com') + self.assertEqual(member.role, MemberRole.member) def test_add_member_existing_user(self): # Test subscribing a user to a mailing list when the email address has @@ -124,6 +126,16 @@ class AddMemberTest(unittest.TestCase): system_preferences.preferred_language) self.assertEqual(member.address.email, 'anne@example.com') + def test_add_member_moderator(self): + # Test adding a moderator to a mailing list + member = add_member(self._mlist, 'aperson@example.com', + 'Anne Person', '123', DeliveryMode.regular, + system_preferences.preferred_language, + MemberRole.moderator) + self.assertEqual(member.address.email, 'aperson@example.com') + self.assertEqual(member.mailing_list, 'test@example.com') + self.assertEqual(member.role, MemberRole.moderator) + class AddMemberPasswordTest(unittest.TestCase): |
