feat: 实现受控真实下单安全边界 (#99)
This commit is contained in:
@@ -32,10 +32,12 @@ class TaskRepositoryTests(unittest.TestCase):
|
||||
task_type: TaskType = TaskType.COLLECT,
|
||||
title: str = "测试商品",
|
||||
goods_id: str = "10001",
|
||||
execution_mode: str = "dry_run",
|
||||
) -> NewClaimedTask:
|
||||
return NewClaimedTask(
|
||||
remote_task_id=remote_task_id,
|
||||
task_type=task_type,
|
||||
execution_mode=execution_mode,
|
||||
goods_id=goods_id,
|
||||
goods_url=f"https://example.test/goods/{goods_id}",
|
||||
title=title,
|
||||
@@ -96,6 +98,43 @@ class TaskRepositoryTests(unittest.TestCase):
|
||||
self.assertEqual(detail.admin_payload["task_id"], "TASK-001")
|
||||
self.assertEqual(detail.pdd_data["schema_version"], 1)
|
||||
|
||||
def test_live_mode_and_irreversible_marker_are_persisted_once(self) -> None:
|
||||
self.repository.add_claimed_task(
|
||||
self._task(
|
||||
"PURCHASE-LIVE",
|
||||
TaskType.PURCHASE,
|
||||
execution_mode="live",
|
||||
)
|
||||
)
|
||||
detail = self.repository.get_task("PURCHASE-LIVE")
|
||||
self.assertEqual(detail.execution_mode, "live")
|
||||
|
||||
started = self.repository.start_purchase_run(
|
||||
"PURCHASE-LIVE", "192.168.0.173:5555"
|
||||
)
|
||||
marked_at = self.repository.mark_purchase_irreversible(
|
||||
"PURCHASE-LIVE", started.attempt_id
|
||||
)
|
||||
run = self.repository.latest_task_run("PURCHASE-LIVE")
|
||||
self.assertEqual(run.irreversible_action_at, marked_at)
|
||||
with self.assertRaisesRegex(ValueError, "已经存在"):
|
||||
self.repository.mark_purchase_irreversible(
|
||||
"PURCHASE-LIVE", started.attempt_id
|
||||
)
|
||||
|
||||
def test_dry_run_cannot_enter_irreversible_stage(self) -> None:
|
||||
self.repository.add_claimed_task(
|
||||
self._task("PURCHASE-DRY", TaskType.PURCHASE)
|
||||
)
|
||||
started = self.repository.start_purchase_run(
|
||||
"PURCHASE-DRY", "USB-001"
|
||||
)
|
||||
|
||||
with self.assertRaisesRegex(ValueError, "演练任务"):
|
||||
self.repository.mark_purchase_irreversible(
|
||||
"PURCHASE-DRY", started.attempt_id
|
||||
)
|
||||
|
||||
def test_duplicate_remote_task_id_does_not_overwrite(self) -> None:
|
||||
self.repository.add_claimed_task(self._task("TASK-001"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user