Barry Warsaw pushed to branch master at mailman / Mailman
Commits: 0c5c9def by Barry Warsaw at 2017-04-22T20:42:31+00:00 Fix two problems and close #260 - - - - - 23be50d1 by Barry Warsaw at 2017-04-22T20:42:32+00:00 Merge branch 'issue260' into 'master' Fix two problems and close #260 Closes #260 See merge request !261 - - - - - 3 changed files: - src/mailman/app/subscriptions.py - src/mailman/rest/members.py - src/mailman/rest/tests/test_membership.py Changes: ===================================== src/mailman/app/subscriptions.py ===================================== --- a/src/mailman/app/subscriptions.py +++ b/src/mailman/app/subscriptions.py @@ -32,7 +32,9 @@ from mailman.interfaces.address import IAddress from mailman.interfaces.bans import IBanManager from mailman.interfaces.listmanager import ListDeletingEvent from mailman.interfaces.mailinglist import SubscriptionPolicy -from mailman.interfaces.member import MembershipIsBannedError, NotAMemberError +from mailman.interfaces.member import ( + AlreadySubscribedError, MemberRole, MembershipIsBannedError, + NotAMemberError) from mailman.interfaces.pending import IPendable, IPendings from mailman.interfaces.subscriptions import ( ISubscriptionManager, ISubscriptionService, @@ -198,6 +200,21 @@ class SubscriptionWorkflow(_SubscriptionWorkflowCommon): self.address = addresses[0] assert self.user is not None and self.address is not None, ( 'Insane sanity check results') + # Is this subscriber already a member? + if (self.which is WhichSubscriber.user and + self.user.preferred_address is not None): + subscriber = self.user + else: + subscriber = self.address + if self.mlist.is_subscribed(subscriber): + # 2017-04-22 BAW: This branch actually *does* get covered, as I've + # verified by a full coverage run, but diffcov for some reason + # claims that the test added in the branch that added this code + # does not cover the change. That seems like a bug in diffcov. + raise AlreadySubscribedError( # pragma: no cover + self.mlist.fqdn_listname, + self.address.email, + MemberRole.member) # Is this email address banned? if IBanManager(self.mlist).is_banned(self.address.email): raise MembershipIsBannedError(self.mlist, self.address.email) ===================================== src/mailman/rest/members.py ===================================== --- a/src/mailman/rest/members.py +++ b/src/mailman/rest/members.py @@ -17,6 +17,7 @@ """REST for members.""" +from lazr.config import as_boolean from mailman.app.membership import add_member, delete_member from mailman.interfaces.action import Action from mailman.interfaces.address import IAddress @@ -204,9 +205,9 @@ class AllMembers(_MemberBase): display_name=str, delivery_mode=enum_validator(DeliveryMode), role=enum_validator(MemberRole), - pre_verified=bool, - pre_confirmed=bool, - pre_approved=bool, + pre_verified=as_boolean, + pre_confirmed=as_boolean, + pre_approved=as_boolean, _optional=('delivery_mode', 'display_name', 'role', 'pre_verified', 'pre_confirmed', 'pre_approved')) arguments = validator(request) ===================================== src/mailman/rest/tests/test_membership.py ===================================== --- a/src/mailman/rest/tests/test_membership.py +++ b/src/mailman/rest/tests/test_membership.py @@ -98,6 +98,21 @@ class TestMembership(unittest.TestCase): self.assertEqual(cm.exception.code, 409) self.assertEqual(cm.exception.reason, 'Member already subscribed') + def test_try_to_join_a_list_twice_issue260(self): + with transaction(): + anne = self._usermanager.create_address('a...@example.com') + self._mlist.subscribe(anne) + with self.assertRaises(HTTPError) as cm: + call_api('http://localhost:9001/3.0/members', { + 'list_id': 'test.example.com', + 'subscriber': 'a...@example.com', + 'pre_verified': False, + 'pre_confirmed': False, + 'pre_approved': False, + }) + self.assertEqual(cm.exception.code, 409) + self.assertEqual(cm.exception.reason, 'Member already subscribed') + def test_subscribe_user_without_preferred_address(self): with transaction(): getUtility(IUserManager).create_user('a...@example.com') View it on GitLab: https://gitlab.com/mailman/mailman/compare/c975738f775398c255f63f0a9853212d7f024262...23be50d1555977438e295ab219109ee1d934d14a --- View it on GitLab: https://gitlab.com/mailman/mailman/compare/c975738f775398c255f63f0a9853212d7f024262...23be50d1555977438e295ab219109ee1d934d14a You're receiving this email because of your account on gitlab.com.
_______________________________________________ Mailman-checkins mailing list Mailman-checkins@python.org Unsubscribe: https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org