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
Collaborator

Summary

Пункт 2 из #2722 — починка ДО включения в CI, чтобы новый job не был красным с первого дня.

На чистом origin/main в tradein-mvp/browser/: 4 failed / 104 passed. Все четыре — устаревшие тесты, а не сломанный код. Поведение сервиса корректно, проверено мутацией: возврат кода к дотестовому виду снова красит эти проверки.

Тест Красный с Диагноз
test_server.py::test_pace_provider_disabled_when_zero 2026-06-20 (3f30c1c9) тест патчит BROWSER_MIN_PAGE_INTERVAL_S, а _pace_provider с того коммита читает _MIN_PAGE_INTERVAL_BY_PROVIDER; глобал остался лишь фолбэком для провайдера вне словаря
test_server_smoke.py::test_fetch_returns_503_when_browser_unavailable 2026-07-02 (ca473a00, #2164 P4) подделка _ensure_browser одноаргументная, код зовёт с proxy_override= → TypeError на server.py:709
test_server_smoke.py::test_fetch_opens_and_closes_own_page 2026-07-02 то же
test_server_smoke.py::test_fetch_recycles_after_threshold 2026-07-02 то же

Попутно: соседние четыре пейсинг-теста патчили тот же мёртвый символ, но значением 2.0 — ровно дефолт словаря, поэтому зеленели вхолостую, не управляя тем, что проверяют. Переведены на monkeypatch.setitem того словаря, который код действительно читает.

Косвенное подтверждение, что тесты сайдкара не бежит никто: test_server_smoke.py правился дважды ПОСЛЕ 2026-07-02 (#2430, #2433) — краснота не остановила ни одну правку.

Кода сервиса этот PR не трогает — только два тестовых файла.

Test plan

  • python -m pytest -q -o asyncio_mode=auto из tradein-mvp/browser/108 passed (было 4 failed / 104 passed)
  • Фальсификация: мутация _pace_provider обратно на глобал → test_pace_provider_disabled_when_zero снова красный; мутация подписи _ensure_browser → красный test_server_proxy_override.py (5 тестов), т.е. подпись покрыта там, где положено
  • server.py восстановлен байт-в-байт после мутаций (git checkout, 0 маркеров)

Включение каталога в пайплайн + аудит охвата — следующим PR.

Refs #2722

## Summary Пункт 2 из #2722 — починка ДО включения в CI, чтобы новый job не был красным с первого дня. На чистом `origin/main` в `tradein-mvp/browser/`: **4 failed / 104 passed**. Все четыре — **устаревшие тесты, а не сломанный код**. Поведение сервиса корректно, проверено мутацией: возврат кода к дотестовому виду снова красит эти проверки. | Тест | Красный с | Диагноз | |---|---|---| | `test_server.py::test_pace_provider_disabled_when_zero` | 2026-06-20 (`3f30c1c9`) | тест патчит `BROWSER_MIN_PAGE_INTERVAL_S`, а `_pace_provider` с того коммита читает `_MIN_PAGE_INTERVAL_BY_PROVIDER`; глобал остался лишь фолбэком для провайдера вне словаря | | `test_server_smoke.py::test_fetch_returns_503_when_browser_unavailable` | 2026-07-02 (`ca473a00`, #2164 P4) | подделка `_ensure_browser` одноаргументная, код зовёт с `proxy_override=` → TypeError на `server.py:709` | | `test_server_smoke.py::test_fetch_opens_and_closes_own_page` | 2026-07-02 | то же | | `test_server_smoke.py::test_fetch_recycles_after_threshold` | 2026-07-02 | то же | Попутно: соседние четыре пейсинг-теста патчили тот же мёртвый символ, но значением `2.0` — ровно дефолт словаря, поэтому зеленели вхолостую, не управляя тем, что проверяют. Переведены на `monkeypatch.setitem` того словаря, который код действительно читает. Косвенное подтверждение, что тесты сайдкара не бежит никто: `test_server_smoke.py` правился дважды ПОСЛЕ 2026-07-02 (#2430, #2433) — краснота не остановила ни одну правку. **Кода сервиса этот PR не трогает** — только два тестовых файла. ## Test plan - [x] `python -m pytest -q -o asyncio_mode=auto` из `tradein-mvp/browser/` → **108 passed** (было 4 failed / 104 passed) - [x] Фальсификация: мутация `_pace_provider` обратно на глобал → `test_pace_provider_disabled_when_zero` снова красный; мутация подписи `_ensure_browser` → красный `test_server_proxy_override.py` (5 тестов), т.е. подпись покрыта там, где положено - [x] `server.py` восстановлен байт-в-байт после мутаций (`git checkout`, 0 маркеров) Включение каталога в пайплайн + аудит охвата — следующим PR. Refs #2722
bot-backend added 1 commit 2026-08-06 11:07:17 +00:00
fix(tradein/browser): четыре теста сайдкара догоняют код — тест отстал, не код сломан (#2722)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2fcca81144
Все четыре падения на main — устаревшие тесты, поведение сервиса корректно.
Проверено мутацией: возврат кода к старому виду снова красит эти тесты.

1) test_pace_provider_disabled_when_zero (красный с 2026-06-20, 3f30c1c9).
   Тот коммит перевёл _pace_provider на _MIN_PAGE_INTERVAL_BY_PROVIDER
   (per-provider override), добавил под это новый test_server_pacing.py — и
   не тронул старый тест, который патчит модульный BROWSER_MIN_PAGE_INTERVAL_S.
   Глобал теперь читается только как фолбэк для провайдера ВНЕ словаря, поэтому
   на "avito" патч не влияет ни на что: тест ставил 0.0 и получал дефолтные 2.0.
   Через окружение выключение работает (BROWSER_MIN_PAGE_INTERVAL_S=0 → словарь
   собирается нулями на импорте), то есть заявленное поведение живо.
   Соседние четыре пейсинг-теста патчили тот же мёртвый символ, но ставили 2.0 —
   ровно дефолт словаря, и потому зеленели вхолостую: они не управляли тем, что
   проверяли. Переведены на setitem туда же.

2-4) test_fetch_returns_503_when_browser_unavailable, test_fetch_opens_and_closes_own_page,
   test_fetch_recycles_after_threshold (красные с 2026-07-02, ca473a00 / #2164 P4).
   Тот коммит добавил _ensure_browser(proxy_override=...) и обновил подделки в
   test_server.py и test_server_fetch_json.py, а четыре подделки в
   test_server_smoke.py остались одноаргументными → TypeError на server.py:709.
   Подписи подделок приведены к реальной. Подделка в /login-тесте тоже, хотя
   login_handler зовёт _ensure_browser позиционно: расхождение подписи мока с
   оригиналом и есть причина этой поломки, чинить её стоит целиком.

Файл test_server_smoke.py правился дважды ПОСЛЕ 2026-07-02 (#2430, #2433) и
краснота никого не остановила — тесты сайдкара не бежит ни один пайплайн.
Включение их в CI — отдельным PR, после этой починки (порядок из #2722).

Refs #2722
bot-backend merged commit 3231233b73 into main 2026-08-06 11:13:17 +00:00
bot-backend deleted branch fix/2722-browser-tests-in-ci 2026-08-06 11:13:18 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2724
No description provided.