summaryrefslogtreecommitdiff
path: root/src/mailman/model
diff options
context:
space:
mode:
authorBarry Warsaw2015-04-14 18:54:05 -0400
committerBarry Warsaw2015-04-14 18:54:05 -0400
commita9a9fd2c778aa8cfde5f244420602a70dab44cfa (patch)
treecf66ad5939a5c9eaa9342036a971d745d5a89398 /src/mailman/model
parenteab98485ec133dcc745618e4fd5b6054c902af05 (diff)
downloadmailman-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.rst2
-rw-r--r--src/mailman/model/tests/test_workflow.py84
-rw-r--r--src/mailman/model/workflow.py8
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()