diff options
| author | Barry Warsaw | 2015-04-14 18:54:05 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2015-04-14 18:54:05 -0400 |
| commit | a9a9fd2c778aa8cfde5f244420602a70dab44cfa (patch) | |
| tree | cf66ad5939a5c9eaa9342036a971d745d5a89398 /src/mailman/model | |
| parent | eab98485ec133dcc745618e4fd5b6054c902af05 (diff) | |
| download | mailman-a9a9fd2c778aa8cfde5f244420602a70dab44cfa.tar.gz mailman-a9a9fd2c778aa8cfde5f244420602a70dab44cfa.tar.zst mailman-a9a9fd2c778aa8cfde5f244420602a70dab44cfa.zip | |
Full test suite passes.
* Make sure Registrar.discard() removces any workflow state manager state
associated with the token, and that this is flushed to SA.
* Adjust the email commands to the new IRegistrar API.
* Update the IRegistrar interface.
* Add IWorkflowStateManager.discard() and make `count` an attribute/property.
* Mark two tests as expected failures due to LP: #1444184.
Diffstat (limited to 'src/mailman/model')
| -rw-r--r-- | src/mailman/model/docs/registration.rst | 2 | ||||
| -rw-r--r-- | src/mailman/model/tests/test_workflow.py | 84 | ||||
| -rw-r--r-- | src/mailman/model/workflow.py | 8 |
3 files changed, 61 insertions, 33 deletions
diff --git a/src/mailman/model/docs/registration.rst b/src/mailman/model/docs/registration.rst index fc7ad6f1a..5a4935355 100644 --- a/src/mailman/model/docs/registration.rst +++ b/src/mailman/model/docs/registration.rst @@ -48,6 +48,7 @@ list. In this case, verifying implies that she also confirms her wish to join the mailing list. >>> registrar.confirm(token) + True >>> mlist.members.get_member('anne@example.com') <Member: Anne Person <anne@example.com> on ant@example.com as MemberRole.member> @@ -85,6 +86,7 @@ subscribed to the mailing list. When the moderator confirms Bart's subscription, he joins the mailing list. >>> registrar.confirm(token) + True >>> mlist.members.get_member('bart@example.com') <Member: Bart Person <bart@example.com> on ant@example.com as MemberRole.member> diff --git a/src/mailman/model/tests/test_workflow.py b/src/mailman/model/tests/test_workflow.py index ccf618c2b..88ed506bd 100644 --- a/src/mailman/model/tests/test_workflow.py +++ b/src/mailman/model/tests/test_workflow.py @@ -43,11 +43,11 @@ class TestWorkflow(unittest.TestCase): step = 'cat' data = 'dog' self._manager.save(name, token, step, data) - workflow = self._manager.restore(name, token) - self.assertEqual(workflow.name, name) - self.assertEqual(workflow.token, token) - self.assertEqual(workflow.step, step) - self.assertEqual(workflow.data, data) + state = self._manager.restore(name, token) + self.assertEqual(state.name, name) + self.assertEqual(state.token, token) + self.assertEqual(state.step, step) + self.assertEqual(state.data, data) def test_save_restore_workflow_without_step(self): # Save and restore a workflow that contains no step. @@ -55,11 +55,11 @@ class TestWorkflow(unittest.TestCase): token = 'bee' data = 'dog' self._manager.save(name, token, data=data) - workflow = self._manager.restore(name, token) - self.assertEqual(workflow.name, name) - self.assertEqual(workflow.token, token) - self.assertIsNone(workflow.step) - self.assertEqual(workflow.data, data) + state = self._manager.restore(name, token) + self.assertEqual(state.name, name) + self.assertEqual(state.token, token) + self.assertIsNone(state.step) + self.assertEqual(state.data, data) def test_save_restore_workflow_without_data(self): # Save and restore a workflow that contains no data. @@ -67,38 +67,38 @@ class TestWorkflow(unittest.TestCase): token = 'bee' step = 'cat' self._manager.save(name, token, step) - workflow = self._manager.restore(name, token) - self.assertEqual(workflow.name, name) - self.assertEqual(workflow.token, token) - self.assertEqual(workflow.step, step) - self.assertIsNone(workflow.data) + state = self._manager.restore(name, token) + self.assertEqual(state.name, name) + self.assertEqual(state.token, token) + self.assertEqual(state.step, step) + self.assertIsNone(state.data) def test_save_restore_workflow_without_step_or_data(self): # Save and restore a workflow that contains no step or data. name = 'ant' token = 'bee' self._manager.save(name, token) - workflow = self._manager.restore(name, token) - self.assertEqual(workflow.name, name) - self.assertEqual(workflow.token, token) - self.assertIsNone(workflow.step) - self.assertIsNone(workflow.data) + state = self._manager.restore(name, token) + self.assertEqual(state.name, name) + self.assertEqual(state.token, token) + self.assertIsNone(state.step) + self.assertIsNone(state.data) def test_restore_workflow_with_no_matching_name(self): # Try to restore a workflow that has no matching name in the database. name = 'ant' token = 'bee' self._manager.save(name, token) - workflow = self._manager.restore('ewe', token) - self.assertIsNone(workflow) + state = self._manager.restore('ewe', token) + self.assertIsNone(state) def test_restore_workflow_with_no_matching_token(self): # Try to restore a workflow that has no matching token in the database. name = 'ant' token = 'bee' self._manager.save(name, token) - workflow = self._manager.restore(name, 'fly') - self.assertIsNone(workflow) + state = self._manager.restore(name, 'fly') + self.assertIsNone(state) def test_restore_workflow_with_no_matching_token_or_name(self): # Try to restore a workflow that has no matching token or name in the @@ -106,25 +106,43 @@ class TestWorkflow(unittest.TestCase): name = 'ant' token = 'bee' self._manager.save(name, token) - workflow = self._manager.restore('ewe', 'fly') - self.assertIsNone(workflow) + state = self._manager.restore('ewe', 'fly') + self.assertIsNone(state) def test_restore_removes_record(self): name = 'ant' token = 'bee' - self.assertEqual(self._manager.count(), 0) + self.assertEqual(self._manager.count, 0) self._manager.save(name, token) - self.assertEqual(self._manager.count(), 1) + self.assertEqual(self._manager.count, 1) self._manager.restore(name, token) - self.assertEqual(self._manager.count(), 0) + self.assertEqual(self._manager.count, 0) def test_save_after_restore(self): name = 'ant' token = 'bee' - self.assertEqual(self._manager.count(), 0) + self.assertEqual(self._manager.count, 0) self._manager.save(name, token) - self.assertEqual(self._manager.count(), 1) + self.assertEqual(self._manager.count, 1) self._manager.restore(name, token) - self.assertEqual(self._manager.count(), 0) + self.assertEqual(self._manager.count, 0) self._manager.save(name, token) - self.assertEqual(self._manager.count(), 1) + self.assertEqual(self._manager.count, 1) + + def test_discard(self): + # Discard some workflow state. This is use by IRegistrar.discard(). + self._manager.save('ant', 'token', 'one') + self._manager.save('bee', 'token', 'two') + self._manager.save('ant', 'nekot', 'three') + self._manager.save('bee', 'nekot', 'four') + self.assertEqual(self._manager.count, 4) + self._manager.discard('bee', 'token') + self.assertEqual(self._manager.count, 3) + state = self._manager.restore('ant', 'token') + self.assertEqual(state.step, 'one') + state = self._manager.restore('bee', 'token') + self.assertIsNone(state) + state = self._manager.restore('ant', 'nekot') + self.assertEqual(state.step, 'three') + state = self._manager.restore('bee', 'nekot') + self.assertEqual(state.step, 'four') diff --git a/src/mailman/model/workflow.py b/src/mailman/model/workflow.py index 6ac3fa76a..392ab0798 100644 --- a/src/mailman/model/workflow.py +++ b/src/mailman/model/workflow.py @@ -63,6 +63,14 @@ class WorkflowStateManager: return state @dbconnection + def discard(self, store, name, token): + """See `IWorkflowStateManager`.""" + state = store.query(WorkflowState).get((name, token)) + if state is not None: + store.delete(state) + + @property + @dbconnection def count(self, store): """See `IWorkflowStateManager`.""" return store.query(WorkflowState).count() |
