Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core
Commits:
740d50e6 by Mark Sapiro at 2022-03-24T04:46:09+00:00
Subscription workflow sanity checks both User and Address for existing
- - - - -
54d087b7 by Mark Sapiro at 2022-03-24T04:46:09+00:00
Merge branch 'member' into 'master'
Subscription workflow sanity checks both User and Address for existing
Closes #994
See merge request mailman/mailman!997
- - - - -
3 changed files:
- src/mailman/app/subscriptions.py
- src/mailman/app/tests/test_subscriptions.py
- src/mailman/docs/NEWS.rst
Changes:
=====================================
src/mailman/app/subscriptions.py
=====================================
@@ -235,17 +235,10 @@ class SubscriptionWorkflow(_SubscriptionWorkflowCommon):
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: nocover
+ if ((self.user.preferred_address is not None and
+ self.mlist.is_subscribed(self.user)) or
+ self.mlist.is_subscribed(self.address)):
+ raise AlreadySubscribedError(
self.mlist.fqdn_listname,
self.address.email,
MemberRole.member)
=====================================
src/mailman/app/tests/test_subscriptions.py
=====================================
@@ -30,13 +30,14 @@ from mailman.interfaces.address import
InvalidEmailAddressError
from mailman.interfaces.bans import IBanManager
from mailman.interfaces.mailinglist import SubscriptionPolicy
from mailman.interfaces.member import (
+ AlreadySubscribedError,
DeliveryMode,
DeliveryStatus,
MemberRole,
MembershipIsBannedError,
)
from mailman.interfaces.pending import IPendings
-from mailman.interfaces.subscriptions import TokenOwner
+from mailman.interfaces.subscriptions import ISubscriptionManager, TokenOwner
from mailman.interfaces.usermanager import IUserManager
from mailman.testing.helpers import (
get_queue_messages,
@@ -204,6 +205,42 @@ class TestSubscriptionWorkflow(unittest.TestCase):
workflow = SubscriptionWorkflow(self._mlist, user)
self.assertRaises(AssertionError, workflow.run_thru, 'sanity_checks')
+ def test_sanity_checks_finds_address_for_user(self):
+ # Test raises AlreadySubscribedError for User when member is Address.
+ anne = self._user_manager.make_user(self._anne)
+ anne.addresses[0].verified_on = anne.created_on
+ anne.preferred_address = anne.addresses[0]
+ self._mlist.subscription_policy = SubscriptionPolicy.open
+ # Subscribe Address.
+ ISubscriptionManager(self._mlist).register(
+ anne.preferred_address,
+ pre_verified=True,
+ pre_confirmed=True,
+ pre_approved=True,
+ send_welcome_message=False
+ )
+ workflow = SubscriptionWorkflow(self._mlist, anne)
+ self.assertRaises(
+ AlreadySubscribedError, workflow.run_thru, 'sanity_checks')
+
+ def test_sanity_checks_finds_user_for_address(self):
+ # Test raises AlreadySubscribedError for Address when member is User.
+ anne = self._user_manager.make_user(self._anne)
+ anne.addresses[0].verified_on = anne.created_on
+ anne.preferred_address = anne.addresses[0]
+ self._mlist.subscription_policy = SubscriptionPolicy.open
+ # Subscribe User.
+ ISubscriptionManager(self._mlist).register(
+ anne,
+ pre_verified=True,
+ pre_confirmed=True,
+ pre_approved=True,
+ send_welcome_message=False
+ )
+ workflow = SubscriptionWorkflow(self._mlist, anne.preferred_address)
+ self.assertRaises(
+ AlreadySubscribedError, workflow.run_thru, 'sanity_checks')
+
def test_sanity_checks_globally_banned_address(self):
# An exception is raised if the address is globally banned.
anne = self._user_manager.create_address(self._anne)
=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -52,6 +52,8 @@ Bugs fixed
``template`` table. (Closes #988)
* DMARC munge from mitigation will now find a nonmember poster's display name.
(Closes #989)
+* Subscription workflow will now find an existing User when subscription is
+ for an Address and vice versa. (Closes #994)
REST
====
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/b39737eb90f41749cd7dfcec112d7b8043b46bd0...54d087b7e783c0cd026f5e0ad7cd9e33da56a290
--
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/b39737eb90f41749cd7dfcec112d7b8043b46bd0...54d087b7e783c0cd026f5e0ad7cd9e33da56a290
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: [email protected]