fix(tradein/browser): четыре теста сайдкара догоняют код — тест отстал, не код сломан (#2722) #2724

Merged
bot-backend merged 1 commit from fix/2722-browser-tests-in-ci into main 2026-08-06 11:13:17 +00:00
2 changed files with 15 additions and 10 deletions

View file

@ -372,7 +372,11 @@ def test_resource_block_handler_degrades_to_continue(monkeypatch: pytest.MonkeyP
def test_pace_provider_first_call_no_sleep(monkeypatch: pytest.MonkeyPatch) -> None:
"""Первый goto провайдера — без ожидания, но timestamp пишется."""
monkeypatch.setattr(server, "BROWSER_MIN_PAGE_INTERVAL_S", 2.0)
# Интервал задаём в _MIN_PAGE_INTERVAL_BY_PROVIDER — ИМЕННО его читает
# _pace_provider (per-provider override, #1812 follow-up). Модульный
# BROWSER_MIN_PAGE_INTERVAL_S там только фолбэк для провайдера вне словаря,
# так что патч глобала на известном провайдере не влияет ни на что.
monkeypatch.setitem(server._MIN_PAGE_INTERVAL_BY_PROVIDER, "avito", 2.0)
slept: list[float] = []
async def _fake_sleep(d: float) -> None:
@ -386,7 +390,7 @@ def test_pace_provider_first_call_no_sleep(monkeypatch: pytest.MonkeyPatch) -> N
def test_pace_provider_waits_remaining_interval(monkeypatch: pytest.MonkeyPatch) -> None:
"""Второй goto в пределах интервала → sleep на остаток (interval - elapsed)."""
monkeypatch.setattr(server, "BROWSER_MIN_PAGE_INTERVAL_S", 2.0)
monkeypatch.setitem(server._MIN_PAGE_INTERVAL_BY_PROVIDER, "cian", 2.0)
slept: list[float] = []
async def _fake_sleep(d: float) -> None:
@ -415,7 +419,7 @@ def test_pace_provider_waits_remaining_interval(monkeypatch: pytest.MonkeyPatch)
def test_pace_provider_no_sleep_when_interval_elapsed(monkeypatch: pytest.MonkeyPatch) -> None:
"""Если с прошлого goto прошло >= интервала → не спим."""
monkeypatch.setattr(server, "BROWSER_MIN_PAGE_INTERVAL_S", 2.0)
monkeypatch.setitem(server._MIN_PAGE_INTERVAL_BY_PROVIDER, "yandex", 2.0)
slept: list[float] = []
async def _fake_sleep(d: float) -> None:
@ -440,8 +444,8 @@ def test_pace_provider_no_sleep_when_interval_elapsed(monkeypatch: pytest.Monkey
def test_pace_provider_disabled_when_zero(monkeypatch: pytest.MonkeyPatch) -> None:
"""BROWSER_MIN_PAGE_INTERVAL_S <= 0 → пейсинг выключен, timestamp не пишется."""
monkeypatch.setattr(server, "BROWSER_MIN_PAGE_INTERVAL_S", 0.0)
"""Эффективный интервал провайдера <= 0 → пейсинг выключен, timestamp не пишется."""
monkeypatch.setitem(server._MIN_PAGE_INTERVAL_BY_PROVIDER, "avito", 0.0)
slept: list[float] = []
async def _fake_sleep(d: float) -> None:
@ -460,7 +464,8 @@ def test_pace_provider_disabled_when_zero(monkeypatch: pytest.MonkeyPatch) -> No
def test_pace_provider_independent_per_provider(monkeypatch: pytest.MonkeyPatch) -> None:
"""Timestamp независим по провайдерам — пейсинг avito не влияет на cian."""
monkeypatch.setattr(server, "BROWSER_MIN_PAGE_INTERVAL_S", 2.0)
monkeypatch.setitem(server._MIN_PAGE_INTERVAL_BY_PROVIDER, "avito", 2.0)
monkeypatch.setitem(server._MIN_PAGE_INTERVAL_BY_PROVIDER, "cian", 2.0)
slept: list[float] = []
async def _fake_sleep(d: float) -> None:

View file

@ -89,7 +89,7 @@ def test_fetch_returns_503_when_browser_unavailable(
Никакого реального camoufox-launch'а / direct-fetch.
"""
async def _no_ensure(provider: str) -> bool:
async def _no_ensure(provider: str, proxy_override: str | None = None) -> bool:
return False # прокси всё ещё недоступен → браузер остаётся None
monkeypatch.setattr(server, "_ensure_browser", _no_ensure)
@ -111,7 +111,7 @@ def test_login_returns_503_when_browser_unavailable(
) -> None:
"""/login тоже отдаёт 503 когда инстанс не поднят (без credential-логирования)."""
async def _no_ensure(provider: str) -> bool:
async def _no_ensure(provider: str, proxy_override: str | None = None) -> bool:
return False
monkeypatch.setattr(server, "_ensure_browser", _no_ensure)
@ -193,7 +193,7 @@ def test_fetch_opens_and_closes_own_page(monkeypatch: pytest.MonkeyPatch) -> Non
server._browsers["avito"] = _FakeBrowser(tracker)
monkeypatch.setattr(server, "BROWSER_RECYCLE_PAGES", 10_000)
async def _ensure(provider: str) -> bool:
async def _ensure(provider: str, proxy_override: str | None = None) -> bool:
return True
monkeypatch.setattr(server, "_ensure_browser", _ensure)
@ -221,7 +221,7 @@ def test_fetch_recycles_after_threshold(monkeypatch: pytest.MonkeyPatch) -> None
relaunched["n"] += 1
server._page_counters[provider] = 0
async def _ensure(provider: str) -> bool:
async def _ensure(provider: str, proxy_override: str | None = None) -> bool:
return True
monkeypatch.setattr(server, "_relaunch_browser", _fake_relaunch)