支持其他店铺
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
"""SurugayaClient 中「指定店铺」相关能力的单元测试:
|
||||
|
||||
- _build_product_url 携带 tenpo_cd/branch_number 构造跳转到指定店铺报价的详情页 URL
|
||||
- fetch_other_shops 独立于 fetch_detail,仅返回 other_shop_list(解耦双倍抓取成本)
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from app.core.config import Settings
|
||||
from app.models.scrape import DetailRequest, OtherShopItem
|
||||
from app.services.surugaya_client import SurugayaClient
|
||||
|
||||
|
||||
def _make_client() -> SurugayaClient:
|
||||
return SurugayaClient(
|
||||
settings=Settings(_env_file=None),
|
||||
browser_pool=None,
|
||||
session_manager=None,
|
||||
session_store=None,
|
||||
)
|
||||
|
||||
|
||||
class TestBuildProductUrl:
|
||||
def test_without_shop_params(self) -> None:
|
||||
client = _make_client()
|
||||
assert client._build_product_url("220035970") == "https://www.suruga-ya.jp/product/detail/220035970"
|
||||
|
||||
def test_with_tenpo_cd_and_branch_number(self) -> None:
|
||||
client = _make_client()
|
||||
url = client._build_product_url("220035970", tenpo_cd="400451", branch_number="0003")
|
||||
assert url == "https://www.suruga-ya.jp/product/detail/220035970?tenpo_cd=400451&branch_number=0003"
|
||||
|
||||
def test_missing_product_id_raises(self) -> None:
|
||||
client = _make_client()
|
||||
with pytest.raises(Exception):
|
||||
client._build_product_url(None)
|
||||
|
||||
|
||||
class TestFetchOtherShops:
|
||||
@pytest.mark.asyncio
|
||||
async def test_returns_goods_id_and_shop_list(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
client = _make_client()
|
||||
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)
|
||||
|
||||
result = await client.fetch_other_shops(DetailRequest(id="220035970"))
|
||||
|
||||
assert result.goods_id == "220035970"
|
||||
assert result.other_shop_list == fake_items
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_empty_id_raises(self) -> None:
|
||||
client = _make_client()
|
||||
with pytest.raises(Exception):
|
||||
await client.fetch_other_shops(DetailRequest(id=None))
|
||||
Reference in New Issue
Block a user