fix: 修正规格返回后的繁简体复核 (#260)
This commit is contained in:
@@ -1031,6 +1031,102 @@ class U2PddPurchaseAdapterTest(unittest.TestCase):
|
||||
)
|
||||
adapter.close()
|
||||
|
||||
def test_apply_resolved_size_accepts_selected_simplified_color_for_traditional_target(self):
|
||||
device = FakeDevice()
|
||||
selected = []
|
||||
traditional_color = "縹緲仙姬綰【黑色】"
|
||||
simplified_color = "缥缈仙姬绾【黑色】"
|
||||
resolved_size = "均码【80-120斤】"
|
||||
snapshot = PurchaseSpecCandidateSnapshot.build(
|
||||
goods_id="753136429979",
|
||||
selected_color=traditional_color,
|
||||
target_size="均碼【40.0-60.0公斤】",
|
||||
dimension_name="尺码",
|
||||
observations=(PurchaseSizeObservation(resolved_size, True),),
|
||||
observed_at="2026-08-18T01:01:36Z",
|
||||
)
|
||||
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(resolved_size, True),)
|
||||
),
|
||||
)
|
||||
adapter.open_goods(GOODS_URL)
|
||||
device.mode = "special"
|
||||
device.special_xml = panel_xml().replace(
|
||||
"黑色", simplified_color
|
||||
).replace("3XL【140-165斤】", resolved_size)
|
||||
|
||||
adapter.apply_resolved_size(snapshot, snapshot.candidates[0])
|
||||
|
||||
self.assertEqual(selected, [resolved_size])
|
||||
adapter._requested_options = {
|
||||
"color": traditional_color,
|
||||
"size": resolved_size,
|
||||
}
|
||||
self.assertEqual(
|
||||
adapter.read_state().selected_options,
|
||||
{"color": traditional_color, "size": resolved_size},
|
||||
)
|
||||
adapter.close()
|
||||
|
||||
def test_apply_resolved_size_distinguishes_page_and_color_context_changes(self):
|
||||
resolved_size = "均码【80-120斤】"
|
||||
snapshot = PurchaseSpecCandidateSnapshot.build(
|
||||
goods_id="753136429979",
|
||||
selected_color="縹緲仙姬綰【黑色】",
|
||||
target_size="均碼【40.0-60.0公斤】",
|
||||
dimension_name="尺码",
|
||||
observations=(PurchaseSizeObservation(resolved_size, True),),
|
||||
observed_at="2026-08-18T01:01:36Z",
|
||||
)
|
||||
|
||||
cases = (
|
||||
("page_kind", home_xml(), "页面已离开规格确认页"),
|
||||
(
|
||||
"selected_color",
|
||||
panel_xml().replace("selected=\"true\"", "selected=\"false\"")
|
||||
.replace("已选: 黑色", "已选: 白色")
|
||||
.replace("黑色", "缥缈仙姬绾【白色】")
|
||||
.replace("3XL【140-165斤】", resolved_size),
|
||||
"已选颜色发生变化",
|
||||
),
|
||||
)
|
||||
for context_check, current_xml, expected_message in cases:
|
||||
with self.subTest(context_check=context_check):
|
||||
device = FakeDevice()
|
||||
adapter = U2PddPurchaseAdapter(
|
||||
"USB-001",
|
||||
device_service=PddDeviceService(
|
||||
connector=lambda _serial, current=device: current
|
||||
),
|
||||
sleeper=lambda _seconds: None,
|
||||
select_size_fn=lambda *_args, **_kwargs: True,
|
||||
size_candidate_collector=lambda _device: SpecDimension(
|
||||
"size", "尺码", (DimensionValue(resolved_size, True),)
|
||||
),
|
||||
)
|
||||
adapter.open_goods(GOODS_URL)
|
||||
device.mode = "special"
|
||||
device.special_xml = current_xml
|
||||
|
||||
with self.assertRaises(PddPurchaseError) as raised:
|
||||
adapter.apply_resolved_size(snapshot, snapshot.candidates[0])
|
||||
|
||||
self.assertEqual(
|
||||
raised.exception.code, "PURCHASE_SPEC_CONTEXT_CHANGED"
|
||||
)
|
||||
self.assertIn(expected_message, raised.exception.message)
|
||||
self.assertEqual(
|
||||
raised.exception.diagnostics["context_check"], context_check
|
||||
)
|
||||
adapter.close()
|
||||
|
||||
def test_apply_resolved_size_stops_when_candidate_snapshot_changed(self):
|
||||
device = FakeDevice()
|
||||
selections = []
|
||||
|
||||
Reference in New Issue
Block a user