From c1918b404de4cc86bb4e6b7db3bd942ce7465913 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Thu, 27 Aug 2026 16:16:26 +0300 Subject: [PATCH] =?UTF-8?q?test(tradein/avito):=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BA=D1=80=D0=B5=D0=BF=D0=BB=D1=8F=D0=BB=20?= =?UTF-8?q?=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=BE=D0=B4=D0=BA=D0=B8=20=D0=BF=D1=83?= =?UTF-8?q?=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `assert_called_once_with(source=..., endpoint=...)` требует, чтобы других аргументов у вызова НЕ БЫЛО. Тем самым тест закреплял ровно тот дефект, который чинит этот PR: браузерный фетчер обязан был строиться без проводки пула, иначе CI краснел. Заменено на проверку вхождения: source и endpoint по-прежнему сверяются, плюс явно требуется наличие proxy_provider/use_pool/environment — то, без чего прогон уходит мимо пула (proxy_lease_id=None, 5 блоков из 5 при здоровом пуле). Прогон: 277 тестов зелёные, ruff чист. --- .../tests/tasks/test_avito_detail_backfill.py | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/tradein-mvp/backend/tests/tasks/test_avito_detail_backfill.py b/tradein-mvp/backend/tests/tasks/test_avito_detail_backfill.py index 29cc9f48..cabec75c 100644 --- a/tradein-mvp/backend/tests/tasks/test_avito_detail_backfill.py +++ b/tradein-mvp/backend/tests/tasks/test_avito_detail_backfill.py @@ -777,10 +777,23 @@ async def test_backfill_use_curl_false_creates_browser_fetcher() -> None: ) # BrowserFetcher должен быть создан (source="avito", endpoint из settings — #2310 - # kit BrowserFetcher требует endpoint= обязательным keyword-only параметром) - mock_bf_cls.assert_called_once_with( - source="avito", endpoint=fake_settings.browser_http_endpoint - ) + # kit BrowserFetcher требует endpoint= обязательным keyword-only параметром). + # + # Проверяем ВХОЖДЕНИЕ аргументов, а не полное равенство вызова. Прежняя + # форма `assert_called_once_with(source=..., endpoint=...)` требовала, чтобы + # других аргументов НЕ БЫЛО, и тем самым закрепляла дефект: именно + # отсутствие проводки пула (#3045) уводило браузерный прогон мимо прокси — + # 5 блоков из 5 попыток при полностью здоровом пуле. Проводка проверяется + # отдельно ниже. + mock_bf_cls.assert_called_once() + _bf_kwargs = mock_bf_cls.call_args.kwargs + assert _bf_kwargs["source"] == "avito" + assert _bf_kwargs["endpoint"] == fake_settings.browser_http_endpoint + # #3045: без этих трёх фетчер не кладёт "proxy" в тело POST /fetch, и + # сайдкар уходит на свой env-прокси мимо пула (proxy_lease_id=None). + assert _bf_kwargs.get("proxy_provider") is not None, "пул не подключён" + assert "use_pool" in _bf_kwargs, "флаг пула не доезжает до фетчера" + assert "environment" in _bf_kwargs, "без него отказ «пул пуст» мёртв (#2616)" # fetch_detail вызван с browser_fetcher установленным (не None) assert mock_fetch.call_count == 1 _, kwargs = mock_fetch.call_args