summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Warsaw2015-04-13 18:05:26 -0400
committerBarry Warsaw2015-04-13 18:05:26 -0400
commitf7a4e76d24898ec942a0f3a9a932916d9d0662bc (patch)
tree7953a2772cfdddc3c6464b9e02b2dab8cd29f400
parent3126d190d9c8a9b37da952cba42ea6e3b838a2c3 (diff)
downloadmailman-f7a4e76d24898ec942a0f3a9a932916d9d0662bc.tar.gz
mailman-f7a4e76d24898ec942a0f3a9a932916d9d0662bc.tar.zst
mailman-f7a4e76d24898ec942a0f3a9a932916d9d0662bc.zip
-rw-r--r--src/mailman/interfaces/workflow.py5
-rw-r--r--src/mailman/model/tests/test_workflow.py20
-rw-r--r--src/mailman/model/workflow.py19
3 files changed, 36 insertions, 8 deletions
diff --git a/src/mailman/interfaces/workflow.py b/src/mailman/interfaces/workflow.py
index 4a4fb4412..b60537652 100644
--- a/src/mailman/interfaces/workflow.py
+++ b/src/mailman/interfaces/workflow.py
@@ -63,4 +63,9 @@ class IWorkflowStateManager(Interface):
:type name: str
:param token: A unique token identifying this workflow instance.
:type token: str
+ :raises LookupError: when there's no token associated with the given
+ name in the workflow table.
"""
+
+ def count():
+ """The number of saved workflows in the database."""
diff --git a/src/mailman/model/tests/test_workflow.py b/src/mailman/model/tests/test_workflow.py
index 6081e5b57..ccf618c2b 100644
--- a/src/mailman/model/tests/test_workflow.py
+++ b/src/mailman/model/tests/test_workflow.py
@@ -108,3 +108,23 @@ class TestWorkflow(unittest.TestCase):
self._manager.save(name, token)
workflow = self._manager.restore('ewe', 'fly')
self.assertIsNone(workflow)
+
+ def test_restore_removes_record(self):
+ name = 'ant'
+ token = 'bee'
+ self.assertEqual(self._manager.count(), 0)
+ self._manager.save(name, token)
+ self.assertEqual(self._manager.count(), 1)
+ self._manager.restore(name, token)
+ self.assertEqual(self._manager.count(), 0)
+
+ def test_save_after_restore(self):
+ name = 'ant'
+ token = 'bee'
+ self.assertEqual(self._manager.count(), 0)
+ self._manager.save(name, token)
+ self.assertEqual(self._manager.count(), 1)
+ self._manager.restore(name, token)
+ self.assertEqual(self._manager.count(), 0)
+ self._manager.save(name, token)
+ self.assertEqual(self._manager.count(), 1)
diff --git a/src/mailman/model/workflow.py b/src/mailman/model/workflow.py
index d9f23f53b..6ac3fa76a 100644
--- a/src/mailman/model/workflow.py
+++ b/src/mailman/model/workflow.py
@@ -51,15 +51,18 @@ class WorkflowStateManager:
@dbconnection
def save(self, store, name, token, step=None, data=None):
"""See `IWorkflowStateManager`."""
- state = store.query(WorkflowState).get((name, token))
- if state is None:
- state = WorkflowState(name=name, token=token, step=step, data=data)
- store.add(state)
- else:
- state.step = step
- state.data = data
+ state = WorkflowState(name=name, token=token, step=step, data=data)
+ store.add(state)
@dbconnection
def restore(self, store, name, token):
"""See `IWorkflowStateManager`."""
- return store.query(WorkflowState).get((name, token))
+ state = store.query(WorkflowState).get((name, token))
+ if state is not None:
+ store.delete(state)
+ return state
+
+ @dbconnection
+ def count(self, store):
+ """See `IWorkflowStateManager`."""
+ return store.query(WorkflowState).count()