diff options
| -rw-r--r-- | src/mailman/app/subscriptions.py | 9 | ||||
| -rw-r--r-- | src/mailman/app/tests/test_subscriptions.py | 74 |
2 files changed, 46 insertions, 37 deletions
diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py index fc07a754e..0fc10572a 100644 --- a/src/mailman/app/subscriptions.py +++ b/src/mailman/app/subscriptions.py @@ -63,7 +63,7 @@ class Workflow: """Generic workflow.""" # TODO: move this class to a more generic module - _save_key = None + _save_key = "" _save_attributes = [] _initial_state = [] @@ -113,10 +113,9 @@ class Workflow: state_manager = getUtility(IWorkflowStateManager) state = state_manager.restore(self.__class__.__name__, self._save_key) if state is not None: - if not state.step: - self._next.clear() - else: - self._next[0] = state.step + self._next.clear() + if state.step: + self._next.append(state.step) if state.data is not None: for attr, value in json.loads(state.data).items(): setattr(self, attr, value) diff --git a/src/mailman/app/tests/test_subscriptions.py b/src/mailman/app/tests/test_subscriptions.py index 05646c929..325126214 100644 --- a/src/mailman/app/tests/test_subscriptions.py +++ b/src/mailman/app/tests/test_subscriptions.py @@ -27,7 +27,7 @@ import uuid import unittest from mailman.app.lifecycle import create_list -from mailman.app.subscriptions import SubscriptionWorkflow +from mailman.app.subscriptions import Workflow, SubscriptionWorkflow from mailman.interfaces.address import InvalidEmailAddressError from mailman.interfaces.member import MemberRole, MissingPreferredAddressError from mailman.interfaces.requests import IListRequests, RequestType @@ -37,6 +37,7 @@ 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 mock import Mock from zope.component import getUtility @@ -74,46 +75,55 @@ class TestJoin(unittest.TestCase): -class TestSubscriptionWorkflow(unittest.TestCase): +class TestWorkflow(unittest.TestCase): layer = ConfigLayer def setUp(self): - self._mlist = create_list('test@example.com') - self._anne = 'anne@example.com' - self._user_manager = getUtility(IUserManager) + self.workflow = Workflow() + self.workflow._test_attribute = "test-value" + self.workflow._step_test = Mock() + self.workflow._next.append("test") + + def test_iter_steps(self): + next(self.workflow) + self.assertTrue(self.workflow._step_test.called) + self.assertEqual(len(self.workflow._next), 0) + try: + next(self.workflow) + except StopIteration: + pass + else: + self.fail() def test_save_restore(self): - anne = self._user_manager.create_address(self._anne, 'Anne Person') - workflow = SubscriptionWorkflow( - self._mlist, anne, - pre_verified=True, pre_confirmed=False, pre_approved=False) - next(workflow) - next_step = workflow._next[0] - workflow.save_state() + self.workflow.save_state() # Now create a new instance and restore - workflow = SubscriptionWorkflow( - self._mlist, anne, - pre_verified=None, pre_confirmed=None, pre_approved=None) - workflow.restore_state() - self.assertEqual(next_step, workflow._next[0]) - self.assertEqual(workflow.pre_verified, True) - self.assertEqual(workflow.pre_confirmed, False) - self.assertEqual(workflow.pre_approved, False) + new_workflow = Workflow() + self.assertEqual(len(new_workflow._next), 0) + self.assertFalse(hasattr(new_workflow, "_test_attribute")) + new_workflow.restore_state() + self.assertEqual(len(new_workflow._next), 1) + self.assertEqual(new_workflow._next[0], "test") + self.assertEqual(self.workflow._test_attribute, "test-value") def test_save_restore_no_next_step(self): - anne = self._user_manager.create_address(self._anne, 'Anne Person') - workflow = SubscriptionWorkflow( - self._mlist, anne, - pre_verified=True, pre_confirmed=False, pre_approved=False) - workflow._next.pop() - self.assertEqual(len(workflow._next), 0) - workflow.save_state() + self.workflow._next.clear() + self.workflow.save_state() # Now create a new instance and restore - workflow = SubscriptionWorkflow( - self._mlist, anne, - pre_verified=None, pre_confirmed=None, pre_approved=None) - workflow.restore_state() - self.assertEqual(len(workflow._next), 0) + new_workflow = Workflow() + new_workflow._next.append("test") + new_workflow.restore_state() + self.assertEqual(len(new_workflow._next), 0) + + + +class TestSubscriptionWorkflow(unittest.TestCase): + layer = ConfigLayer + + def setUp(self): + self._mlist = create_list('test@example.com') + self._anne = 'anne@example.com' + self._user_manager = getUtility(IUserManager) def test_preverified_address_joins_open_list(self): # The mailing list has an open subscription policy, so the subscriber |
