"""只读订单核对 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 ( '' '' f'' "" ) 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()