diff options
| author | Aurélien Bompard | 2015-03-25 17:04:52 +0100 |
|---|---|---|
| committer | Aurélien Bompard | 2015-03-25 17:04:52 +0100 |
| commit | e4527bd505ca3019de5d7bd699732b848b6f6afc (patch) | |
| tree | c794481e54e2860e380340b859ce9ddf8ad77ac7 /src | |
| parent | 0ab304f8fb2c853cc9e65eccd33274ed8618a5ce (diff) | |
| download | mailman-e4527bd505ca3019de5d7bd699732b848b6f6afc.tar.gz mailman-e4527bd505ca3019de5d7bd699732b848b6f6afc.tar.zst mailman-e4527bd505ca3019de5d7bd699732b848b6f6afc.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/app/subscriptions.py | 6 | ||||
| -rw-r--r-- | src/mailman/app/tests/test_subscriptions.py | 27 |
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() |
