feat: annuleren taak toegevoegd
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -109,6 +109,38 @@ class TaskRecoveryServiceTest(unittest.TestCase):
|
||||
self.assertEqual(task["status"], "failed")
|
||||
self.assertEqual(task["error_code"], "task_interrupted")
|
||||
|
||||
def test_reconcile_persisted_incomplete_tasks_marks_stale_cancelling_task_failed(self) -> None:
|
||||
self.task_repo.insert_task_for_testing(
|
||||
{
|
||||
"id": "task-cancelling",
|
||||
"operation": "duplicate",
|
||||
"status": "cancelling",
|
||||
"source": "2 items",
|
||||
"destination": "same directory",
|
||||
"created_at": "2026-03-10T10:00:00Z",
|
||||
"started_at": "2026-03-10T10:00:01Z",
|
||||
"current_item": "storage1/report.txt",
|
||||
}
|
||||
)
|
||||
self.history_repo.create_entry(
|
||||
entry_id="task-cancelling",
|
||||
operation="duplicate",
|
||||
status="queued",
|
||||
source="2 items",
|
||||
destination="same directory",
|
||||
created_at="2026-03-10T10:00:00Z",
|
||||
)
|
||||
|
||||
changed = reconcile_persisted_incomplete_tasks(self.task_repo, self.history_repo)
|
||||
|
||||
self.assertEqual(changed, ["task-cancelling"])
|
||||
task = self.task_repo.get_task("task-cancelling")
|
||||
self.assertEqual(task["status"], "failed")
|
||||
self.assertEqual(task["error_code"], "task_interrupted")
|
||||
history = self.history_repo.list_history(limit=5)[0]
|
||||
self.assertEqual(history["id"], "task-cancelling")
|
||||
self.assertEqual(history["status"], "failed")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -107,6 +107,68 @@ class TaskRepositoryTest(unittest.TestCase):
|
||||
self.assertEqual(task["status"], "cancelled")
|
||||
self.assertIsNotNone(task["finished_at"])
|
||||
|
||||
def test_request_cancellation_moves_running_file_task_to_cancelling(self) -> None:
|
||||
created = self.repo.create_task(
|
||||
operation="copy",
|
||||
source="storage1/docs/a.txt",
|
||||
destination="storage1/docs-copy/a.txt",
|
||||
)
|
||||
self.repo.mark_running(
|
||||
created["id"],
|
||||
done_items=0,
|
||||
total_items=2,
|
||||
current_item="storage1/docs/a.txt",
|
||||
)
|
||||
|
||||
task = self.repo.request_cancellation(created["id"])
|
||||
|
||||
self.assertIsNotNone(task)
|
||||
self.assertEqual(task["status"], "cancelling")
|
||||
self.assertEqual(task["current_item"], "storage1/docs/a.txt")
|
||||
self.assertIsNone(task["finished_at"])
|
||||
|
||||
def test_request_cancellation_moves_queued_file_task_to_cancelled(self) -> None:
|
||||
created = self.repo.create_task(
|
||||
operation="delete",
|
||||
source="storage1/docs/a.txt",
|
||||
destination="",
|
||||
)
|
||||
|
||||
task = self.repo.request_cancellation(created["id"])
|
||||
|
||||
self.assertIsNotNone(task)
|
||||
self.assertEqual(task["status"], "cancelled")
|
||||
self.assertIsNone(task["current_item"])
|
||||
self.assertIsNotNone(task["finished_at"])
|
||||
|
||||
def test_finalize_cancelled_transitions_cancelling_task(self) -> None:
|
||||
created = self.repo.create_task(
|
||||
operation="move",
|
||||
source="storage1/docs/a.txt",
|
||||
destination="storage1/archive/a.txt",
|
||||
)
|
||||
self.repo.mark_running(
|
||||
created["id"],
|
||||
done_items=0,
|
||||
total_items=3,
|
||||
current_item="storage1/docs/a.txt",
|
||||
)
|
||||
self.repo.request_cancellation(created["id"])
|
||||
|
||||
changed = self.repo.finalize_cancelled(
|
||||
created["id"],
|
||||
done_items=1,
|
||||
total_items=3,
|
||||
)
|
||||
task = self.repo.get_task(created["id"])
|
||||
|
||||
self.assertTrue(changed)
|
||||
self.assertEqual(task["status"], "cancelled")
|
||||
self.assertEqual(task["done_items"], 1)
|
||||
self.assertEqual(task["total_items"], 3)
|
||||
self.assertIsNone(task["current_item"])
|
||||
self.assertIsNotNone(task["finished_at"])
|
||||
|
||||
def test_reconcile_incomplete_tasks_marks_non_terminal_failed(self) -> None:
|
||||
self.repo.insert_task_for_testing(
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user