feat: 批量重跑实时刷新任务状态 (#143)

This commit is contained in:
chengma
2026-08-11 11:20:22 +08:00
parent e3dc48e1e6
commit 6553ae9367
7 changed files with 134 additions and 5 deletions
+24
View File
@@ -207,6 +207,30 @@ class CollectTaskServiceTest(unittest.TestCase):
self.repository.get_task("COL-OTHER").status, TaskStatus.CLAIMED
)
def test_started_callback_runs_after_database_enters_running(self):
self.repository.add_claimed_task(
NewClaimedTask(
remote_task_id="COL-STARTED",
task_type=TaskType.COLLECT,
goods_url="https://example.test/COL-STARTED",
)
)
observed = []
service = CollectTaskService(
self.gateway,
self.repository,
self.client,
"USB-001",
started=lambda task_id: observed.append(
(task_id, self.repository.get_task(task_id).status)
),
collect_service_factory=lambda *_args: FakeCollector([]),
)
service.execute_selected("COL-STARTED")
self.assertEqual(observed, [("COL-STARTED", TaskStatus.RUNNING)])
def test_selected_task_cancelled_before_collector_starts_is_persisted(self):
self.repository.add_claimed_task(
NewClaimedTask(
+31
View File
@@ -1094,6 +1094,37 @@ class PDDTaskPageEventTest(unittest.TestCase):
self.assertEqual(row.goods_id, "")
self.assertFalse(hasattr(row, "pdd_data"))
def test_summary_to_row_uses_task_specific_running_text(self):
common = dict(
id=1,
goods_id=None,
title=None,
target_color=None,
target_size=None,
price_cent=None,
quantity=None,
status=TaskStatus.RUNNING,
updated_at="2026-08-11T08:00:00Z",
)
collect = summary_to_row(
TaskSummary(
remote_task_id="COL-RUNNING",
task_type=TaskType.COLLECT,
**common,
)
)
purchase = summary_to_row(
TaskSummary(
remote_task_id="PUR-RUNNING",
task_type=TaskType.PURCHASE,
**common,
)
)
self.assertEqual(collect.status, "采集中")
self.assertEqual(purchase.status, "采购中")
def test_main_window_keeps_event_object_alive(self):
window = MainWindow(
task_repository=self.repository,
+18
View File
@@ -217,6 +217,24 @@ class PurchaseTaskServiceTest(unittest.TestCase):
self.assertFalse(purchase["order_submitted"])
self.assertFalse(purchase["payment_attempted"])
def test_started_callback_runs_after_database_enters_running(self):
self._prepare_task(task_id="PUR-STARTED")
observed = []
service = PurchaseTaskService(
self.gateway,
self.repository,
self.client,
"USB-001",
lambda _address, _cancelled: RecordingDryRunAdapter(),
started=lambda task_id: observed.append(
(task_id, self.repository.get_task(task_id).status)
),
)
service.execute_selected("PUR-STARTED")
self.assertEqual(observed, [("PUR-STARTED", TaskStatus.RUNNING)])
def test_price_above_limit_stops_before_confirmation(self):
self._prepare_task()
adapter = RecordingDryRunAdapter(price_cent=5001)