test: тесты не зависят от LLM-настроек личного .env и сети WSL2

This commit is contained in:
Ivan Gerasimov 2026-09-27 15:35:21 +03:00
commit aa6860fc6c
3 changed files with 29 additions and 2 deletions

View file

@ -12,6 +12,20 @@ from pathlib import Path
from urllib.parse import urlparse from urllib.parse import urlparse
os.environ.setdefault("DEV_AUTH_BYPASS", "true") os.environ.setdefault("DEV_AUTH_BYPASS", "true")
# Тесты ждут локальную модель по умолчанию. Личный backend/.env с облачным
# провайдером иначе валит проверки офлайн-гарда; переменные окружения
# перекрывают .env, а живые проверки test_llm.py выставляют свои поверх.
# Рекомендации Vikhr выключены: на WSL2 подключение к закрытому loopback-порту
# висит до таймаута, и финиш занятия ждал бы 6 с. Тесты рекомендаций
# подменяют coach сами.
os.environ.update({
"LLM_PROVIDER": "local",
"LLM_BASE_URL": "http://127.0.0.1:18080/v1",
"LLM_API_KEY": "",
"LLM_MODEL_CALLER": "Qwen3-1.7B",
"LLM_MODEL_JUDGE": "",
"ASSESSMENT_FEEDBACK_ENABLED": "false",
})
import pytest # noqa: E402 import pytest # noqa: E402
@ -36,6 +50,19 @@ def postgres_access():
pytest.skip(f"PostgreSQL unavailable ({exc})") pytest.skip(f"PostgreSQL unavailable ({exc})")
@pytest.fixture(scope="module")
def template_caller():
"""Звонящий без модели: сквозные тесты занятия ждут заготовки и офлайн-
ответы. С моделью по умолчанию (loopback Qwen) фабрика выбрала бы
LlmCaller и ждала неподнятый сервер."""
from app.dialog import factory
settings = get_settings().model_copy(update={"llm_provider": "disabled"})
with pytest.MonkeyPatch.context() as patch:
patch.setattr(factory, "get_settings", lambda: settings)
yield
@pytest.fixture(autouse=True, scope="session") @pytest.fixture(autouse=True, scope="session")
def _dev_auth(): def _dev_auth():
"""Флаг обхода читается один раз при создании настроек.""" """Флаг обхода читается один раз при создании настроек."""

View file

@ -21,7 +21,7 @@ from app.session.hub import hub
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
def client(): def client(template_caller):
# Доступность базы проверяется подключением к порту: синхронного драйвера # Доступность базы проверяется подключением к порту: синхронного драйвера
# в проекте нет, и попытка проверить им даёт ложный пропуск теста. # в проекте нет, и попытка проверить им даёт ложный пропуск теста.
import socket import socket

View file

@ -22,7 +22,7 @@ from app.session.store import MemorySessionStore
@pytest.fixture @pytest.fixture
def client(monkeypatch): def client(monkeypatch, template_caller):
async def audit_in_memory(*_args, **_kwargs): async def audit_in_memory(*_args, **_kwargs):
return None return None