- Add 6 fixtures to integration conftest: superset_db_url, superset_secret_key, superset_admin_password, superset_container (init+web), superset_url, superset_admin_headers - Two-container architecture: init (db upgrade → create-admin → init) + web (superset run -p 8088) - Superset 4.1.2 pinned (6.x incompatible: no psycopg2, SUPERSET__ prefix required) - 8 integration tests cover health, form-login auth, SupersetClient construction - Document decision in ADR-0012 with architecture rationale, rejected alternatives, and migration path to Superset 6.x - Update docs/architecture.md with testing infrastructure overview
56 lines
2.6 KiB
Markdown
56 lines
2.6 KiB
Markdown
# [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]
|