summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurélien Bompard2015-03-25 17:04:52 +0100
committerAurélien Bompard2015-03-25 17:04:52 +0100
commite4527bd505ca3019de5d7bd699732b848b6f6afc (patch)
treec794481e54e2860e380340b859ce9ddf8ad77ac7
parent0ab304f8fb2c853cc9e65eccd33274ed8618a5ce (diff)
downloadmailman-e4527bd505ca3019de5d7bd699732b848b6f6afc.tar.gz
mailman-e4527bd505ca3019de5d7bd699732b848b6f6afc.tar.zst
mailman-e4527bd505ca3019de5d7bd699732b848b6f6afc.zip
-rw-r--r--src/mailman/app/subscriptions.py6
-rw-r--r--src/mailman/app/tests/test_subscriptions.py27
2 files changed, 28 insertions, 5 deletions
diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py
index 481fb17b3..5ff4f3a3e 100644
--- a/src/mailman/app/subscriptions.py
+++ b/src/mailman/app/subscriptions.py
@@ -48,7 +48,6 @@ from mailman.model.member import Member
from mailman.utilities.datetime import now
-
def _membership_sort_key(member):
"""Sort function for find_members().
@@ -58,7 +57,6 @@ def _membership_sort_key(member):
return (member.list_id, member.address.email, member.role.value)
-
class SubscriptionWorkflow:
"""Workflow of a subscription request."""
@@ -163,14 +161,13 @@ class SubscriptionWorkflow:
request = RequestRecord(
self.address.email, self.subscriber.display_name,
DeliveryMode.regular, 'en')
- hold_subscription(self._mlist, request)
+ hold_subscription(self.mlist, request)
def _do_subscription(self):
# We can immediately subscribe the user to the mailing list.
self.mlist.subscribe(self.subscriber)
-
@implementer(ISubscriptionService)
class SubscriptionService:
"""Subscription services for the REST API."""
@@ -287,7 +284,6 @@ class SubscriptionService:
delete_member(mlist, email, False, False)
-
def handle_ListDeletingEvent(event):
"""Delete a mailing list's members when the list is being deleted."""
diff --git a/src/mailman/app/tests/test_subscriptions.py b/src/mailman/app/tests/test_subscriptions.py
index 72892b886..7bb59bb45 100644
--- a/src/mailman/app/tests/test_subscriptions.py
+++ b/src/mailman/app/tests/test_subscriptions.py
@@ -30,11 +30,13 @@ from mailman.app.lifecycle import create_list
from mailman.app.subscriptions import SubscriptionWorkflow
from mailman.interfaces.address import InvalidEmailAddressError
from mailman.interfaces.member import MemberRole, MissingPreferredAddressError
+from mailman.interfaces.requests import IListRequests, RequestType
from mailman.interfaces.subscriptions import (
MissingUserError, ISubscriptionService)
from mailman.testing.layers import ConfigLayer
from mailman.interfaces.mailinglist import SubscriptionPolicy
from mailman.interfaces.usermanager import IUserManager
+from mailman.utilities.datetime import now
from zope.component import getUtility
@@ -98,3 +100,28 @@ class TestSubscriptionWorkflow(unittest.TestCase):
self.assertIsNotNone(anne.verified_on)
self.assertIsNotNone(anne.user)
self.assertIsNotNone(self._mlist.subscribers.get_member(self._anne))
+
+ def test_verified_address_joins_moderated_list(self):
+ # The mailing list is moderated but the subscriber is not a verified
+ # address and the subscription request is not pre-verified.
+ # A confirmation email must be sent, it will serve as the verification
+ # email too.
+ anne = self._user_manager.create_address(self._anne, 'Anne Person')
+ request_db = IListRequests(self._mlist)
+ def _do_check():
+ anne.verified_on = now()
+ self.assertIsNone(self._mlist.subscribers.get_member(self._anne))
+ workflow = SubscriptionWorkflow(
+ self._mlist, anne,
+ pre_verified=False, pre_confirmed=True, pre_approved=False)
+ # Run the state machine to the end.
+ list(workflow)
+ # Look in the requests db
+ requests = list(request_db.of_type(RequestType.subscription))
+ self.assertEqual(len(requests), 1)
+ self.assertEqual(requests[0].key, anne.email)
+ request_db.delete_request(requests[0].id)
+ self._mlist.subscription_policy = SubscriptionPolicy.moderate
+ _do_check()
+ self._mlist.subscription_policy = SubscriptionPolicy.confirm_then_moderate
+ _do_check()