From 6e6d912a50f03fd01b1e924321c944604800f155 Mon Sep 17 00:00:00 2001 From: Hermes Team Date: Mon, 31 Aug 2026 01:35:57 +0700 Subject: [PATCH] =?UTF-8?q?fix(tests):=20=D0=B0=D0=B4=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B0=D0=B9=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B8=D0=B7=20=D0=BE=D0=BA=D1=80=D1=83=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BB=D0=BE=D0=BC=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=20=D0=BD=D0=B0=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=88=D0=B8=D0=BD=D0=B5=20=D0=B2=D0=BB=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D1=86=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На машине владельца задана ANTHROPIC_BASE_URL=https://api.anthropic.com, и из-за неё test_claude_health_check_real_probe падал: адаптер строил ".../models" вместо ".../v1/models". Код при этом верен — подставлялось значение из окружения вместо умолчания. Проверено: со снятой переменной 486 passed, с заданной — одно падение. Набор обязан давать одинаковый результат на любой машине; это то же требование герметичности, ради которого делался A33. Добавлена автоматическая фикстура, убирающая восемь переменных *_BASE_URL на время каждого теста. После правки прогон с заданной переменной даёт 486 passed. Co-Authored-By: Claude Opus 5 --- tests/conftest.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index fd71d5f..10ec69e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -99,3 +99,27 @@ def block_external_network_in_hermetic_tests(request, monkeypatch): def pytest_configure(config): config.addinivalue_line("markers", "ui: mark test as requiring UI environment") +# Переменные окружения провайдеров не должны протекать в тесты. +# +# На машине владельца задана ANTHROPIC_BASE_URL=https://api.anthropic.com, и +# из-за неё test_claude_health_check_real_probe падал: адаптер строил +# ".../models" вместо ".../v1/models", хотя код верен, а подставилось значение +# из окружения. Набор обязан давать одинаковый результат на любой машине — +# это то же требование герметичности, ради которого делался A33. +_PROVIDER_BASE_URL_VARS = ( + "ANTHROPIC_BASE_URL", + "CODEX_BASE_URL", + "DEEPSEEK_BASE_URL", + "LOCAL_LLM_BASE_URL", + "NVIDIA_BASE_URL", + "OLLAMA_BASE_URL", + "OPENCODE_GO_BASE_URL", + "OPENROUTER_BASE_URL", +) + + +@pytest.fixture(autouse=True) +def _isolate_provider_base_urls(monkeypatch): + """Убрать адреса провайдеров из окружения на время каждого теста.""" + for name in _PROVIDER_BASE_URL_VARS: + monkeypatch.delenv(name, raising=False)