下单接口支持其他店铺
/api/order/get_shipping_fee 与购物车加入逻辑此前只认官方自营详情页,加盟店运费分桶 仅靠自由文本 supplier 判断,未与其他店铺列表的 tenpo_cd 打通。补充 OrderItem/ CargoItemRequest 的 tenpo_cd/branch_number 字段,运费计算优先按 tenpo_cd 分桶 (无则回退 supplier 保持兼容),cargo_service 加购 URL 同步带上店铺参数。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -59,3 +59,53 @@ class TestFetchOtherShops:
|
||||
client = _make_client()
|
||||
with pytest.raises(Exception):
|
||||
await client.fetch_other_shops(DetailRequest(id=None))
|
||||
|
||||
|
||||
class TestFetchDetailIncludeOtherShops:
|
||||
"""DetailRequest.include_other_shops 控制 fetch_detail 是否顺带抓取 other_shop_list。"""
|
||||
|
||||
MINIMAL_DETAIL_HTML = '<html><body><h1 id="item_title">测试商品</h1></body></html>'
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_flag_false_skips_other_shop_fetch(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
client = _make_client()
|
||||
monkeypatch.setattr(client, "_session_manager", _FakeSessionManager(self.MINIMAL_DETAIL_HTML))
|
||||
|
||||
called = False
|
||||
|
||||
async def fake_fetch_other_shop_list(goods_id: str) -> list[OtherShopItem]:
|
||||
nonlocal called
|
||||
called = True
|
||||
return []
|
||||
|
||||
monkeypatch.setattr(client, "_fetch_other_shop_list", fake_fetch_other_shop_list)
|
||||
|
||||
detail = await client.fetch_detail(DetailRequest(id="220035970"))
|
||||
|
||||
assert called is False
|
||||
assert detail.other_shop_list == []
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_flag_true_includes_other_shop_list(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
client = _make_client()
|
||||
monkeypatch.setattr(client, "_session_manager", _FakeSessionManager(self.MINIMAL_DETAIL_HTML))
|
||||
|
||||
fake_items = [OtherShopItem(tenpo_cd="400451", shop_name="駿河屋 山口大学前店", price=1370)]
|
||||
|
||||
async def fake_fetch_other_shop_list(goods_id: str) -> list[OtherShopItem]:
|
||||
assert goods_id == "220035970"
|
||||
return fake_items
|
||||
|
||||
monkeypatch.setattr(client, "_fetch_other_shop_list", fake_fetch_other_shop_list)
|
||||
|
||||
detail = await client.fetch_detail(DetailRequest(id="220035970", include_other_shops=True))
|
||||
|
||||
assert detail.other_shop_list == fake_items
|
||||
|
||||
|
||||
class _FakeSessionManager:
|
||||
def __init__(self, html: str) -> None:
|
||||
self._html = html
|
||||
|
||||
async def fetch_html(self, url: str):
|
||||
return self._html, None
|
||||
|
||||
Reference in New Issue
Block a user