AutoRpa/rpa_selection/tests/test_cli.py

105 lines
3.0 KiB
Python

from __future__ import annotations
import pytest
import main
from job import run_batch
from mall_config import YAOEX_MALL_NAME, YBM_MALL_NAME
from repo import MappingRow, MemorySelectRepo
from rules import Candidate, normalize_vendor
from search_yaoex import YaoexAuth
def test_old_excel_and_cart_flags_are_gone():
with pytest.raises(SystemExit):
main.parse_args(["--execute-cart"])
with pytest.raises(SystemExit):
main.parse_args(["--input", "x.xlsx"])
with pytest.raises(SystemExit):
main.parse_args(["--dry-run"])
def test_main_writes_cart_rows_from_mapping(monkeypatch):
repo = MemorySelectRepo(
[
MappingRow(
fid=1,
oms_id=2026100201,
bar_code="06901234567890",
sale_price=100.0,
plan_purchase_qty=10,
approval_no="国药准字H20100001",
goods_name="药A",
goods_spec="0.25g",
manufacturer="示例",
org_code="907",
deal_flag=0,
)
]
)
def fake_login_yaoex(*_args, **_kwargs):
return YaoexAuth(token="t", user_id="u", buyer_code="b")
def fake_login_ybm(*_args, **_kwargs):
return {"sid": "1"}
def fake_search_yaoex(*_args, **_kwargs):
vendor = "广东壹号药业有限公司"
return [
Candidate(
mall_name=YAOEX_MALL_NAME,
sku_id="S1",
name="药A",
spec="0.25g",
price=90.0,
expiry_raw="13",
expiry_months=13.0,
vendor_raw=vendor,
vendor_norm=normalize_vendor(vendor),
stock=20.0,
)
]
def fake_search_ybm(*_args, **_kwargs):
vendor = "某第三方"
return [
Candidate(
mall_name=YBM_MALL_NAME,
sku_id="Y1",
name="药A",
spec="0.25g",
price=70.0,
expiry_raw="13",
expiry_months=13.0,
vendor_raw=vendor,
vendor_norm=normalize_vendor(vendor),
stock=20.0,
)
]
monkeypatch.setattr(main, "login_yaoex", fake_login_yaoex)
monkeypatch.setattr(main, "login_ybm", fake_login_ybm)
monkeypatch.setattr(main, "search_yaoex_candidates", fake_search_yaoex)
monkeypatch.setattr(main, "search_ybm_candidates", fake_search_ybm)
main.main(["--fresh-login"], repo=repo)
assert repo.mapping[2026100201].deal_flag == 1
assert len(repo.cart) == 1
assert repo.cart[0]["platform_type"] == 66
assert repo.cart[0]["status"] == 1
assert repo.cart[0]["bar_code"] == "06901234567890"
def test_run_batch_empty_claim_is_noop():
repo = MemorySelectRepo([])
summary = run_batch(
repo,
platforms=[YAOEX_MALL_NAME],
searchers={},
login_errors={},
)
assert summary.claimed == 0
assert repo.cart == []