feat: 增加采集任务重新执行入口 (#63)
This commit is contained in:
@@ -14,7 +14,7 @@ from src.task_models import (
|
||||
TaskStatus,
|
||||
TaskType,
|
||||
)
|
||||
from src.task_repository import DuplicateTaskError, TaskRepository
|
||||
from src.task_repository import CollectRerunError, DuplicateTaskError, TaskRepository
|
||||
|
||||
|
||||
class TaskRepositoryTests(unittest.TestCase):
|
||||
@@ -209,6 +209,64 @@ class TaskRepositoryTests(unittest.TestCase):
|
||||
TaskStatus.SUCCEEDED,
|
||||
)
|
||||
|
||||
def test_prepare_rerun_preserves_old_result_and_creates_new_attempt(self):
|
||||
self.repository.add_claimed_task(self._task("TASK-RERUN"))
|
||||
first = self.repository.start_collect_run("TASK-RERUN", "USB-001")
|
||||
first_data = {"goods_id": "10001", "title": "旧标题", "skus": []}
|
||||
first_event = self.repository.save_collect_result(
|
||||
"TASK-RERUN", first.attempt_id, first_data
|
||||
)
|
||||
self.repository.mark_outbox_sent(first_event.id)
|
||||
|
||||
prepared = self.repository.prepare_collect_rerun("TASK-RERUN")
|
||||
second = self.repository.start_collect_run("TASK-RERUN", "USB-001")
|
||||
second_data = {"goods_id": "10001", "title": "新标题", "skus": []}
|
||||
self.repository.save_collect_result(
|
||||
"TASK-RERUN", second.attempt_id, second_data
|
||||
)
|
||||
|
||||
connection = open_database(self.db_path)
|
||||
try:
|
||||
rows = connection.execute(
|
||||
"SELECT attempt_id, result_data FROM task_runs"
|
||||
" WHERE task_id = ? ORDER BY attempt_no",
|
||||
(prepared.id,),
|
||||
).fetchall()
|
||||
finally:
|
||||
connection.close()
|
||||
self.assertEqual(second.attempt_no, 2)
|
||||
self.assertIn("旧标题", rows[0]["result_data"])
|
||||
self.assertIn("新标题", rows[1]["result_data"])
|
||||
self.assertEqual(self.repository.get_task("TASK-RERUN").title, "新标题")
|
||||
|
||||
def test_rerun_rejects_purchase_active_and_unsent_tasks(self):
|
||||
self.repository.add_claimed_task(
|
||||
self._task("PURCHASE-RERUN", TaskType.PURCHASE)
|
||||
)
|
||||
with self.assertRaisesRegex(CollectRerunError, "采购任务"):
|
||||
self.repository.validate_collect_rerun("PURCHASE-RERUN")
|
||||
|
||||
self.repository.add_claimed_task(self._task("ACTIVE-RERUN"))
|
||||
with self.assertRaisesRegex(CollectRerunError, "待执行"):
|
||||
self.repository.validate_collect_rerun("ACTIVE-RERUN")
|
||||
|
||||
self.repository.add_claimed_task(self._task("UNSENT-RERUN"))
|
||||
started = self.repository.start_collect_run("UNSENT-RERUN", "USB-001")
|
||||
self.repository.save_collect_result(
|
||||
"UNSENT-RERUN", started.attempt_id, {"title": "结果", "skus": []}
|
||||
)
|
||||
connection = open_database(self.db_path)
|
||||
try:
|
||||
with connection:
|
||||
connection.execute(
|
||||
"UPDATE pdd_tasks SET status = 'failed'"
|
||||
" WHERE remote_task_id = 'UNSENT-RERUN'"
|
||||
)
|
||||
finally:
|
||||
connection.close()
|
||||
with self.assertRaisesRegex(CollectRerunError, "未发送"):
|
||||
self.repository.validate_collect_rerun("UNSENT-RERUN")
|
||||
|
||||
def test_recovery_restores_sending_and_interrupted_running(self):
|
||||
self.repository.add_claimed_task(self._task("TASK-RECOVER"))
|
||||
started = self.repository.start_collect_run("TASK-RECOVER", "USB-001")
|
||||
|
||||
Reference in New Issue
Block a user