import pytest from cryptography.fernet import Fernet from app import db, security from app.config import get_settings from app.services import backups # секреты для тестов: значения, проходящие проверку insecure_settings (см. app/config.py), но не боевые API_TOKEN = "test-api-token-0123456789abcdef0" # 32 символа ADMIN_PASSWORD = "test-admin-pass123" # 12+ символов SESSION_SECRET = "test-session-secret-0123456789ab" # 32 символа @pytest.fixture(autouse=True) def env(tmp_path, monkeypatch): monkeypatch.setenv("DATABASE_URL", f"sqlite:///{tmp_path}/test.db") monkeypatch.setenv("SECRET_KEY", Fernet.generate_key().decode()) monkeypatch.setenv("SESSION_SECRET", SESSION_SECRET) monkeypatch.setenv("API_TOKEN", API_TOKEN) monkeypatch.setenv("S3_BUCKET", "test-bucket") monkeypatch.setenv("S3_ACCESS_KEY", "") # без ключей S3: сверка бакета при старте отключена monkeypatch.setenv("POLL_INTERVAL", "0") # фоновый опрос в тестах выключен monkeypatch.setenv("ADMIN_USER", "admin") # не зависеть от реального .env monkeypatch.setenv("ADMIN_PASSWORD", ADMIN_PASSWORD) get_settings.cache_clear() security.reset_all_failures() # блокировки входа/очистки журнала — в памяти процесса, по всем ключам backups.invalidate() # кэш списка бакета — модульное состояние, не должен переживать тест db.init_db() yield get_settings.cache_clear()