feat: 安全应用采购规格解析结果 (#257)

This commit is contained in:
chengma
2026-08-17 17:43:25 +08:00
parent 484ce4e8ec
commit afc1cdf719
19 changed files with 1669 additions and 24 deletions
@@ -11,6 +11,8 @@ from src.pdd_collect_service import DimensionValue, PddCollectError, SpecDimensi
from src.pdd_purchase_adapter import (
PddPurchaseError,
PddPurchaseSpecResolutionRequired,
PurchaseSizeObservation,
PurchaseSpecCandidateSnapshot,
)
from src.performance_timing import TaskPerformanceTrace
from src.pdd_u2_purchase_adapter import (
@@ -991,6 +993,76 @@ class U2PddPurchaseAdapterTest(unittest.TestCase):
)
adapter.close()
def test_apply_resolved_size_rechecks_same_snapshot_before_exact_selection(self):
device = FakeDevice()
selected = []
snapshot = PurchaseSpecCandidateSnapshot.build(
goods_id="753136429979",
selected_color="黑色",
target_size="XXL",
dimension_name="尺码",
observations=(
PurchaseSizeObservation("3XL【140-165斤】", True),
),
observed_at="2026-08-17T08:00:00Z",
)
adapter = U2PddPurchaseAdapter(
"USB-001",
device_service=PddDeviceService(connector=lambda _serial: device),
sleeper=lambda _seconds: None,
select_size_fn=lambda _device, _xml, target, **_kwargs: (
selected.append(target) or True
),
size_candidate_collector=lambda _device: SpecDimension(
"size",
"尺码",
(DimensionValue("3XL【140-165斤】", True),),
),
)
adapter.open_goods(GOODS_URL)
device.click(790, 2214)
adapter.apply_resolved_size(snapshot, snapshot.candidates[0])
self.assertEqual(selected, ["3XL【140-165斤】"])
self.assertEqual(
adapter.read_state().selected_options,
{"size": "3XL【140-165斤】"},
)
adapter.close()
def test_apply_resolved_size_stops_when_candidate_snapshot_changed(self):
device = FakeDevice()
selections = []
snapshot = PurchaseSpecCandidateSnapshot.build(
goods_id="753136429979",
selected_color="黑色",
target_size="XXL",
dimension_name="尺码",
observations=(PurchaseSizeObservation("M", True),),
observed_at="2026-08-17T08:00:00Z",
)
adapter = U2PddPurchaseAdapter(
"USB-001",
device_service=PddDeviceService(connector=lambda _serial: device),
sleeper=lambda _seconds: None,
select_size_fn=lambda *_args, **_kwargs: selections.append(True),
size_candidate_collector=lambda _device: SpecDimension(
"size", "尺码", (DimensionValue("L", True),)
),
)
adapter.open_goods(GOODS_URL)
device.click(790, 2214)
with self.assertRaises(PddPurchaseError) as raised:
adapter.apply_resolved_size(snapshot, snapshot.candidates[0])
self.assertEqual(
raised.exception.code, "PURCHASE_SPEC_CANDIDATES_CHANGED"
)
self.assertEqual(selections, [])
adapter.close()
def test_candidate_snapshot_is_not_used_when_target_exists_but_click_fails(self):
device = FakeDevice()
adapter = U2PddPurchaseAdapter(