# [DEF:DocArchitecture:Module] # @TIER: STANDARD # @PURPOSE: Placeholder architecture document reserved for future normalized project architecture guidance. # @RELATION: DEPENDS_ON -> [DEF:Std:Architecture:Standard] Architecture guidance currently lives in `.ai/standards/architecture.md` and `.ai/MODULE_MAP.md`. --- ## Интеграционное тестирование с Testcontainers Проект использует [Testcontainers](https://testcontainers-python.readthedocs.io/) для интеграционных тестов, требующих реальных сервисов (PostgreSQL, ClickHouse, Apache Superset). ### Принцип Каждая тестовая сессия получает изолированные Docker-контейнеры на случайных портах. Контейнеры уничтожаются после завершения сессии. Это гарантирует отсутствие утечек состояния между запусками. ### Поддерживаемые сервисы | Сервис | Образ | Scope | Конфигурация | |--------|-------|-------|-------------| | PostgreSQL | `postgres:16-alpine` | session | `backend/tests/integration/conftest.py` | | ClickHouse | `clickhouse/clickhouse-server:24.3` | module | `test_translate_clickhouse.py` | | Apache Superset | `apache/superset:4.1.2` | session | `backend/tests/integration/conftest.py` | ### Apache Superset Testcontainers **Решение:** [ADR-0012 — Superset Testcontainers](./adr/ADR-0012-superset-testcontainers.md) **Архитектура:** ``` Test Session ├── PostgresContainer (общий) # DB: superset_meta ├── Init Container (краткоживущий) # db upgrade → create-admin → init └── Web Container (на всю сессию) # superset run -p 8088 ``` **Запуск:** ```bash cd backend && source .venv/bin/activate python -m pytest tests/integration/test_superset_integration.py -v # 8 passed in ~25s ``` **Доступные fixtures:** - `superset_db_url` — PostgreSQL URI для метаданных Superset - `superset_container` — запущенный веб-сервер Superset - `superset_url` — `http://host:port` - `superset_admin_headers` — авторизованная сессия (admin:admin123) **Ограничения:** - JWT-авторизация (`/api/v1/security/login`) требует дополнительной конфигурации FAB-permission'ов - Метаданные хранятся в SQLite (образ 4.1.2 не содержит psycopg2) # [/DEF:DocArchitecture:Module]