From 120526e313e2b92705e720bb7e9ffcffdcb135aa Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 12 Sep 2026 16:15:36 +0300 Subject: [PATCH] =?UTF-8?q?fix(tests):=20=D1=83=D0=B1=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BD=D0=B0=D1=81=D1=82=D0=BE=D1=8F=D1=89=D0=B8=D0=B9?= =?UTF-8?q?=20=D1=81=D0=BE=D0=BD=20=D0=B4=D0=BE=D1=81=D0=BB=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D1=89=D0=B8=D0=BA=D0=B0=20=D0=B0=D0=BB=D0=B5=D1=80=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B8=D0=B7=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Фоновый дослальщик GlitchTip спит по настоящим часам: три попытки по тридцать секунд. TestClient ждёт завершения background-задачи, привязанной к ответу, поэтому один тест на отказ доставки держал весь прогон минуту, а в CI прогон умирал по таймауту без единой строки об ошибке — набор выглядел «медленным», хотя на деле висел. Проверять надо, что дослальщик вызван и сколько раз, а не то, что интерпретатор умеет спать. Файл тестов вебхука: было зависание, стало 19 passed за 1.36с. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG --- tradein-mvp/backend/tests/conftest.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tradein-mvp/backend/tests/conftest.py b/tradein-mvp/backend/tests/conftest.py index 02b64a9f..2e9f9d5e 100644 --- a/tradein-mvp/backend/tests/conftest.py +++ b/tradein-mvp/backend/tests/conftest.py @@ -150,3 +150,20 @@ def pytest_sessionfinish(session, exitstatus) -> None: ) if exitstatus == 0: session.exitstatus = 1 + + +# ── Никакого НАСТОЯЩЕГО сна в тестах ───────────────────────────────────────── +# Фоновый дослальщик алертов GlitchTip (#3471) спит между попытками по +# настоящим часам: три попытки по 30 секунд. `TestClient` из Starlette ждёт +# завершения background-задачи, привязанной к ответу, поэтому один-единственный +# тест на отказ доставки держал весь прогон около минуты, а в CI прогон просто +# умирал по таймауту без единой строки об ошибке. +# +# Ставим паузу в ноль для ВСЕХ тестов: проверять надо, что дослальщик вызван и +# сколько раз, а не то, что интерпретатор умеет спать. Тест, которому нужна +# настоящая пауза, переопределяет значение сам. +@pytest.fixture(autouse=True) +def _no_real_retry_sleep(monkeypatch: pytest.MonkeyPatch) -> None: + from app.tasks import glitchtip_alert_retry + + monkeypatch.setattr(glitchtip_alert_retry, "_RETRY_DELAY_S", 0.0)