"""Страж spec «Сервис не зависит от БД и фронта» (DECISION-4): ни зависимостей БД/SMB/шаблонной авторизации, ни каталогов фронта, миграций, моделей и репозиториев.""" import re from pathlib import Path import pytest REPO_ROOT = Path(__file__).resolve().parents[3] REQUIREMENTS = REPO_ROOT / "api" / "requirements.txt" FORBIDDEN_PACKAGES = ( "asyncpg", "sqlalchemy", "alembic", "smbprotocol", "argon2-cffi", "raisa_fastapi_protected_api", ) FORBIDDEN_DIRS = ("web", "api/alembic", "api/src/db", "api/src/models", "api/src/repositories") @pytest.mark.parametrize("package", FORBIDDEN_PACKAGES) def test_requirements_have_no_database_or_template_auth_packages(package: str) -> None: name = re.sub(r"[-_.]", "[-_.]", package) # имена пакетов сравниваются по PEP 503: -, _ и . равнозначны pattern = re.compile(rf"^\s*{name}\s*(?:[=<>!~;\[]|$)", re.IGNORECASE) lines = REQUIREMENTS.read_text(encoding="utf-8").splitlines() assert not [line for line in lines if pattern.match(line)] @pytest.mark.parametrize("directory", FORBIDDEN_DIRS) def test_no_frontend_or_database_directories(directory: str) -> None: assert not (REPO_ROOT / directory).exists()