from decimal import Decimal from job import run_yaoex_pay from settle import CartCandidate, MallLine class MemoryPayRepo: def __init__(self, carts: list[CartCandidate], existing=None): self.carts = carts self.existing = existing or set() self.saved: list[dict] = [] def load_cart_candidates(self): return list(self.carts) def load_existing_pay_keys(self): return set(self.existing) def save_pay_rows(self, rows): self.saved.extend(rows) def _line(**overrides) -> MallLine: data = dict( order_no="ZQD1", parent_order_no="", supplier_name="广东壹号药业有限公司", status="待收货", goods_name="阿莫西林", product_code="2918", bar_code="6921665004933", unit_price=Decimal("10.00"), pay_price=Decimal("9.85"), qty=10, goods_amount=Decimal("100.00"), order_paid=Decimal("98.50"), pay_order_dtl_id="", ) data.update(overrides) return MallLine(**data) def test_job_attaches_dtl_matches_cart_and_inserts(): repo = MemoryPayRepo( [ CartCandidate( fid=1, oms_id=2026100201, supplier_name="广东壹号药业有限公司", bar_code="6921665004933", purchase_qty=10, org_code="901", multi_platform_flag=0, ) ] ) details = { "ZQD1": { "productList": [ { "orderDetailId": 881, "productName": "阿莫西林", "quantity": 10, "payPrice4": 9.85, } ] } } summary = run_yaoex_pay(repo, [_line()], details) assert summary.inserted == 1 assert repo.saved[0]["oms_id"] == 2026100201 assert repo.saved[0]["pay_order_dtl_id"] == "881" assert repo.saved[0]["purchase_total"] == Decimal("98.5000") def test_job_dry_run_does_not_insert(): repo = MemoryPayRepo( [ CartCandidate( fid=1, oms_id=1, supplier_name="广东壹号药业有限公司", bar_code="6921665004933", purchase_qty=10, org_code="901", multi_platform_flag=0, ) ] ) details = { "ZQD1": { "productList": [ { "orderDetailId": 881, "productName": "阿莫西林", "quantity": 10, "payPrice4": 9.85, } ] } } summary = run_yaoex_pay(repo, [_line()], details, dry_run=True) assert summary.inserted == 1 assert repo.saved == []