From 5aae7907295edd68f9910faa22e075368d65a218 Mon Sep 17 00:00:00 2001 From: lekss361 Date: Sat, 30 May 2026 12:31:20 +0300 Subject: [PATCH] test(tradein): add auth header to /houses test broken by IDOR guard (#690) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI test-job красный на main с мержа #690 (#702): IDOR-guard навесил обязательный X-Authenticated-User на /houses, но существующий тест звал эндпоинт без заголовка → _assert_estimate_access_by_id доходит до auth → 401 вместо 200 → deploy skipped. Добавлен header X-Authenticated-User: admin (admin байпасит ownership → 200 []). Заодно # noqa: E402 на module-level импорты (после weasyprint-мока — pre-existing lint, всплыл при правке). --- .../backend/tests/test_api_avito_stage4a.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tradein-mvp/backend/tests/test_api_avito_stage4a.py b/tradein-mvp/backend/tests/test_api_avito_stage4a.py index fd034286..b4424a8d 100644 --- a/tradein-mvp/backend/tests/test_api_avito_stage4a.py +++ b/tradein-mvp/backend/tests/test_api_avito_stage4a.py @@ -18,9 +18,9 @@ sys.modules.setdefault("weasyprint", _wp_mock) sys.modules.setdefault("weasyprint.CSS", _wp_mock) sys.modules.setdefault("weasyprint.HTML", _wp_mock) -import pytest -from fastapi import FastAPI -from fastapi.testclient import TestClient +import pytest # noqa: E402 — импорт после weasyprint-мока (намеренно, см. выше) +from fastapi import FastAPI # noqa: E402 +from fastapi.testclient import TestClient # noqa: E402 @pytest.fixture @@ -77,7 +77,13 @@ def test_get_estimate_houses_returns_empty_when_no_coords(app): app.dependency_overrides[get_db] = override_db_no_coords client = TestClient(app) - r = client.get("/api/v1/trade-in/estimate/00000000-0000-0000-0000-000000000000/houses") + # #690: /houses теперь скоупится по владельцу (X-Authenticated-User). Мок отдаёт + # непустой row (fake_target) → guard доходит до auth-проверки и без заголовка + # вернул бы 401. admin байпасит ownership → эндпоинт исполняется как раньше. + r = client.get( + "/api/v1/trade-in/estimate/00000000-0000-0000-0000-000000000000/houses", + headers={"X-Authenticated-User": "admin"}, + ) assert r.status_code == 200 assert r.json() == []