fix(tradein): молча задеселекченный тест починен, deselect снят (#2722) (#2729)
Some checks failed
Deploy Trade-In / test (push) Blocked by required conditions
Deploy Trade-In / build-backend (push) Blocked by required conditions
Deploy Trade-In / build-frontend (push) Blocked by required conditions
Deploy Trade-In / build-browser (push) Blocked by required conditions
Deploy Trade-In / deploy (push) Blocked by required conditions
Deploy Trade-In / changes (push) Has been cancelled

This commit is contained in:
bot-backend 2026-08-06 11:30:42 +00:00
parent 3527d2b608
commit 02b256288d
2 changed files with 20 additions and 10 deletions

View file

@ -103,15 +103,25 @@ jobs:
run: uv sync --frozen run: uv sync --frozen
- name: Run pytest (tradein-mvp/backend) - name: Run pytest (tradein-mvp/backend)
# DESELECT (актуализировано 2026-07-02, #2208): test_search_cache_hit падает # БЕЗ deselect'ов — сьют гоняется целиком (#2722).
# ТОЛЬКО в whole-suite ordering (401 vs 200; в изоляции проходит) — global-state #
# leak из другого test-модуля, pre-existing. Второй исторический deselect # Здесь два года жил `--deselect tests/test_search_api.py::test_search_cache_hit`
# (test_cian_valuation::test_cache_hit_returns_cached) убран — проходит в # с объяснением «падает ТОЛЬКО в whole-suite ordering, в изоляции проходит —
# полном прогоне (проверено локально: 2947 passed / 1 failed). Список обязан # global-state leak из другого модуля». Объяснение было неверным в обеих
# совпадать с test-job в deploy-tradein.yml. # половинах: тест падал и в изоляции тоже (401 vs 200), потому что он —
run: | # единственный HTTP-тест в своём файле — ходил в /api/v1/search БЕЗ заголовка
uv run pytest -q \ # X-Authenticated-User, а RBAC-гард отвечает на такое 401 (ровно то, что
--deselect "tests/test_search_api.py::test_search_cache_hit" # фиксирует tests/test_estimate_idor.py). Причина была в тесте, а не в порядке;
# заголовок добавлен, deselect снят, полный прогон зелёный.
#
# Не добавлять сюда новые deselect'ы: молча выключенный тест — это тот же
# класс дефекта, что каталог вне пайплайна (#2722). Тест либо чинится, либо
# помечается xfail с причиной В КОДЕ, где её видно рядом с самим тестом.
#
# NB: в deploy-tradein.yml (post-merge test-job) свой экземпляр этого
# deselect'а — он остаётся до #2680, который правит тот файл. Расхождение
# безвредно: pre-merge гейт тест гоняет, post-merge просто пропустит зелёный.
run: uv run pytest -q
# Тесты браузерного сайдкара (#2722). До этого job'а они не бежали НИГДЕ: # Тесты браузерного сайдкара (#2722). До этого job'а они не бежали НИГДЕ:
# ci-tradein гейтил только backend/frontend, deploy-tradein — тоже, а каталог # ci-tradein гейтил только backend/frontend, deploy-tradein — тоже, а каталог

View file

@ -164,7 +164,7 @@ def test_search_cache_hit(_reset_cache_singleton):
} }
_reset_cache_singleton.get = AsyncMock(return_value=cached_payload) _reset_cache_singleton.get = AsyncMock(return_value=cached_payload)
client = TestClient(app) client = TestClient(app)
r = client.post("/api/v1/search", json={"rooms": 2}) r = client.post("/api/v1/search", json={"rooms": 2}, headers={"X-Authenticated-User": "admin"})
assert r.status_code == 200 assert r.status_code == 200
assert r.json()["cache_hit"] is True assert r.json()["cache_hit"] is True
_reset_cache_singleton.set.assert_not_awaited() _reset_cache_singleton.set.assert_not_awaited()