"""Проверки сборки образов: все нужные файлы должны копироваться. Ошибка «в Dockerfile забыли COPY какого-то модуля» роняет контейнер на импорте, а тесты из исходников её не видят (они запускаются из рабочей копии). Ловим статически, без docker. """ from pathlib import Path ROOT = Path(__file__).resolve().parents[1] DOCKERFILE = ROOT / "Dockerfile" COMPOSE = ROOT / "docker-compose.yml" def _stage(name: str) -> str: dockerfile = DOCKERFILE.read_text(encoding="utf-8") part = dockerfile.split(f"FROM base AS {name}", 1)[1] for other in ("api", "frontend"): if other != name: part = part.split(f"FROM base AS {other}", 1)[0] return part def test_api_image_copies_every_backend_module(): stage = _stage("api") for module in sorted((ROOT / "src" / "backend").glob("*.py")): assert module.name in stage, f"{module.name} не копируется в образ api" assert "src/backend/schedule" in stage, "пакет schedule не копируется в образ api" def test_frontend_image_copies_static(): stage = _stage("frontend") for path in ("src/frontend/main.py", "src/frontend/static"): assert path in stage, f"{path} не копируется в образ frontend" def test_compose_passes_required_env(): compose = COMPOSE.read_text(encoding="utf-8") for var in ("SCHEDULE_LINK", "SCHEDULE_INTERVAL_MINUTES", "SCHEDULE_API"): assert var in compose, f"{var} не передаётся контейнерам"