feat: 安全应用采购规格解析结果 (#257)
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user