feat: 完善真实采购订单核对与恢复 (#100)
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
"""只读订单核对 XML 解析测试;不连接真实手机。"""
|
||||
|
||||
import unittest
|
||||
|
||||
from src.pdd_purchase_reconcile_adapter import PurchaseReconcileQuery
|
||||
from src.pdd_u2_purchase_reconcile_adapter import parse_order_candidates
|
||||
|
||||
|
||||
def query() -> PurchaseReconcileQuery:
|
||||
return PurchaseReconcileQuery(
|
||||
goods_id="737116531267",
|
||||
options={"color": "黑色", "size": "L"},
|
||||
quantity=2,
|
||||
unit_price_cent=4200,
|
||||
total_price_cent=8400,
|
||||
irreversible_action_at="2026-08-10T08:00:00Z",
|
||||
reconcile_started_at="2026-08-10T08:05:00Z",
|
||||
)
|
||||
|
||||
|
||||
def xml_card(text: str) -> str:
|
||||
return (
|
||||
'<?xml version="1.0" encoding="UTF-8"?>'
|
||||
'<hierarchy rotation="0">'
|
||||
f'<node text="" content-desc="{text}" bounds="[0,100][1080,900]" '
|
||||
'visible-to-user="true" enabled="true" />'
|
||||
"</hierarchy>"
|
||||
)
|
||||
|
||||
|
||||
class PddU2PurchaseReconcileAdapterTest(unittest.TestCase):
|
||||
def test_parser_extracts_only_required_unpaid_order_fields(self):
|
||||
candidates = parse_order_candidates(
|
||||
xml_card(
|
||||
"待付款 订单编号:ORDER-20260810 商品编号:737116531267 "
|
||||
"黑色 L 共2件 合计 ¥84.00 下单时间:2026-08-10 16:03:00"
|
||||
),
|
||||
query(),
|
||||
)
|
||||
|
||||
self.assertEqual(len(candidates), 1)
|
||||
candidate = candidates[0]
|
||||
self.assertEqual(candidate.order_no, "ORDER-20260810")
|
||||
self.assertEqual(candidate.goods_id, "737116531267")
|
||||
self.assertEqual(candidate.options, {"color": "黑色", "size": "L"})
|
||||
self.assertEqual(candidate.quantity, 2)
|
||||
self.assertEqual(candidate.total_price_cent, 8400)
|
||||
self.assertEqual(candidate.ordered_at, "2026-08-10T08:03:00Z")
|
||||
self.assertEqual(candidate.payment_status, "unpaid")
|
||||
self.assertFalse(hasattr(candidate, "recipient"))
|
||||
self.assertFalse(hasattr(candidate, "address"))
|
||||
|
||||
def test_paid_or_cancelled_text_never_becomes_unpaid(self):
|
||||
candidates = parse_order_candidates(
|
||||
xml_card(
|
||||
"待付款 已付款 订单编号:ORDER-PAID 商品编号:737116531267 "
|
||||
"黑色 L 共2件 合计 ¥84.00 下单时间:2026-08-10 16:03:00"
|
||||
),
|
||||
query(),
|
||||
)
|
||||
|
||||
self.assertEqual(candidates[0].payment_status, "other")
|
||||
|
||||
def test_missing_goods_id_and_time_are_kept_incomplete_for_manual_review(self):
|
||||
candidates = parse_order_candidates(
|
||||
xml_card("待付款 订单编号:ORDER-INCOMPLETE 黑色 L 共2件 合计 ¥84.00"),
|
||||
query(),
|
||||
)
|
||||
|
||||
self.assertEqual(candidates[0].goods_id, "")
|
||||
self.assertEqual(candidates[0].ordered_at, "")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user