fix: 允许等待重试任务手动重新执行 (#70)
This commit is contained in:
@@ -563,6 +563,65 @@ class PDDTaskPageEventTest(unittest.TestCase):
|
||||
events.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_retry_wait_failure_shows_paused_recovery_actions(self):
|
||||
self._add_task(1)
|
||||
started = self.repository.start_collect_run("PDD-001", "USB-001")
|
||||
event = self.repository.save_collect_failure(
|
||||
"PDD-001",
|
||||
started.attempt_id,
|
||||
TaskStatus.RETRY_WAIT,
|
||||
"DEVICE_OFFLINE",
|
||||
"设备离线",
|
||||
True,
|
||||
)
|
||||
self.repository.mark_outbox_sent(event.id)
|
||||
page = PDDTaskPage()
|
||||
events = PDDTaskPageEvent(
|
||||
page,
|
||||
self.repository,
|
||||
claim_gateway=RecordingClaimGateway(None),
|
||||
settings_repository=self._saved_settings(),
|
||||
)
|
||||
|
||||
events._on_collect_outcome(
|
||||
"failed",
|
||||
"任务 PDD-001 采集未完成",
|
||||
"PDD-001",
|
||||
)
|
||||
|
||||
self.assertIn("重试已暂停", events._stop_status)
|
||||
self.assertIn("重新执行", events._stop_status)
|
||||
self.assertIn("重新启动获取任务", events._stop_status)
|
||||
events.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_failed_task_does_not_show_retry_paused_status(self):
|
||||
self._add_task(1)
|
||||
started = self.repository.start_collect_run("PDD-001", "USB-001")
|
||||
event = self.repository.save_collect_failure(
|
||||
"PDD-001",
|
||||
started.attempt_id,
|
||||
TaskStatus.FAILED,
|
||||
"GOODS_OFF_SHELF",
|
||||
"商品已下架",
|
||||
False,
|
||||
)
|
||||
self.repository.mark_outbox_sent(event.id)
|
||||
page = PDDTaskPage()
|
||||
events = PDDTaskPageEvent(
|
||||
page,
|
||||
self.repository,
|
||||
claim_gateway=RecordingClaimGateway(None),
|
||||
settings_repository=self._saved_settings(),
|
||||
)
|
||||
|
||||
events._on_collect_outcome("failed", "商品已下架", "PDD-001")
|
||||
|
||||
self.assertEqual(events._stop_status, "商品已下架")
|
||||
self.assertNotIn("重试已暂停", events._stop_status)
|
||||
events.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_duplicate_task_is_normal_status(self):
|
||||
task = collect_admin_task()
|
||||
self.repository.add_claimed_task(admin_task_to_new_claimed_task(task))
|
||||
|
||||
@@ -267,6 +267,48 @@ class TaskRepositoryTests(unittest.TestCase):
|
||||
with self.assertRaisesRegex(CollectRerunError, "未发送"):
|
||||
self.repository.validate_collect_rerun("UNSENT-RERUN")
|
||||
|
||||
def test_retry_wait_can_rerun_only_after_failure_outbox_is_sent(self):
|
||||
self.repository.add_claimed_task(self._task("RETRY-RERUN"))
|
||||
first = self.repository.start_collect_run("RETRY-RERUN", "USB-001")
|
||||
event = self.repository.save_collect_failure(
|
||||
"RETRY-RERUN",
|
||||
first.attempt_id,
|
||||
TaskStatus.RETRY_WAIT,
|
||||
"DEVICE_OFFLINE",
|
||||
"设备离线",
|
||||
True,
|
||||
)
|
||||
|
||||
with self.assertRaisesRegex(CollectRerunError, "未发送"):
|
||||
self.repository.validate_collect_rerun("RETRY-RERUN")
|
||||
|
||||
self.repository.mark_outbox_sent(event.id)
|
||||
prepared = self.repository.prepare_collect_rerun("RETRY-RERUN")
|
||||
second = self.repository.start_collect_run("RETRY-RERUN", "USB-001")
|
||||
|
||||
self.assertEqual(prepared.status, TaskStatus.CLAIMED)
|
||||
self.assertEqual(second.attempt_no, 2)
|
||||
|
||||
def test_retry_wait_explains_permanently_failed_outbox(self):
|
||||
self.repository.add_claimed_task(self._task("RETRY-REJECTED"))
|
||||
started = self.repository.start_collect_run(
|
||||
"RETRY-REJECTED", "USB-001"
|
||||
)
|
||||
event = self.repository.save_collect_failure(
|
||||
"RETRY-REJECTED",
|
||||
started.attempt_id,
|
||||
TaskStatus.RETRY_WAIT,
|
||||
"DEVICE_OFFLINE",
|
||||
"设备离线",
|
||||
True,
|
||||
)
|
||||
self.repository.mark_outbox_failed(event.id, "任务不存在")
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
CollectRerunError, "上次结果提交失败:任务不存在"
|
||||
):
|
||||
self.repository.validate_collect_rerun("RETRY-REJECTED")
|
||||
|
||||
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