Пункт 12 ревью 2026-09-28 17:35 (docs/changes/026): tests/test_app.py (936 строк) разнесён на test_security, test_devices, test_operations, test_backups, test_events, test_ids_migrations, test_architecture; общие хелперы — tests/helpers.py. Тела тестов не менялись (AST совпадает). security.reset_all_failures() — фикстура сбрасывает счётчики попыток по всем ключам, тесты не зависят от порядка. Тесты: 36 из 36 полным прогоном, каждый модуль отдельно и в обратном порядке; тест-линтер после переноса проверен мутацией. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
1.6 KiB
Python
31 lines
1.6 KiB
Python
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()
|