105 lines
3.0 KiB
Python
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="901",
|
|
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 == []
|