fix(tradein): молча задеселекченный тест починен, deselect снят (#2722) #2729
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2729
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2722-search-cache-deselect"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Побочный пункт #2722: «молча задеселекченный тест — тот же класс, что каталог вне CI». Оценил и починил — оказалось, что деселект держался на неверном объяснении.
Что утверждал комментарий в
ci-tradein.ymlЧто показал замер (окружение с реально установленными зависимостями,
uv sync --frozen)pytest tests/test_search_api.py::test_search_cache_hit)assert 401 == 200Обе половины объяснения неверны: тест падает всегда, ordering ни при чём. «Красное» здесь означает именно красное, а не «не собралось» — остальные 3749 тестов в том же прогоне зелёные.
Настоящая причина
test_search_cache_hit— единственный тест в своём файле, который ходит по HTTP: он поднимаетTestClient(app)и делаетPOST /api/v1/searchбез заголовкаX-Authenticated-User. RBAC-гард на запрос без него отвечает 401 — ровно тот инвариант, который отдельно зафиксирован вtests/test_estimate_idor.py(там есть тест с буквальным названием «No X-Authenticated-User header → 401»).Причина в тесте, а не в порядке и не в продукте. Правка — один заголовок по идиоме самого репозитория. Продуктовый код и конфигурация авторизации не тронуты.
Следствие
Deselect больше не нужен и снят из
ci-tradein.yml: полный прогон tradein-backend без единого исключения → 3750 passed, 9 skipped, 0 failed.В шаге pytest оставлено явное правило на будущее: не deselect'ить молча — чинить или помечать
xfailс причиной в коде, где её видно рядом с тестом.Что НЕ тронуто
Экземпляр того же deselect'а в
deploy-tradein.yml(post-merge test-job) — тот файл правит открытый #2680, лезть туда не стал. Расхождение безвредно: pre-merge гейт тест теперь гоняет, post-merge просто пропустит заведомо зелёный.Test plan
pytest tests/test_search_api.py→ 16 passed (был 1 failed)uv run pytest -qбез deselect'ов → 3750 passed, 9 skipped, 0 failedruff check+ruff format --checkизtradein-mvp/backend→ чистоCI Trade-In / backend-testsна этом PR — гоняет уже без deselect'аRefs #2722