diff options
| author | Barry Warsaw | 2015-04-13 18:05:26 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2015-04-13 18:05:26 -0400 |
| commit | f7a4e76d24898ec942a0f3a9a932916d9d0662bc (patch) | |
| tree | 7953a2772cfdddc3c6464b9e02b2dab8cd29f400 | |
| parent | 3126d190d9c8a9b37da952cba42ea6e3b838a2c3 (diff) | |
| download | mailman-f7a4e76d24898ec942a0f3a9a932916d9d0662bc.tar.gz mailman-f7a4e76d24898ec942a0f3a9a932916d9d0662bc.tar.zst mailman-f7a4e76d24898ec942a0f3a9a932916d9d0662bc.zip | |
| -rw-r--r-- | src/mailman/interfaces/workflow.py | 5 | ||||
| -rw-r--r-- | src/mailman/model/tests/test_workflow.py | 20 | ||||
| -rw-r--r-- | src/mailman/model/workflow.py | 19 |
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() |
