Files
clickstream-ch-kafka-supers…/generator/tests/test_service_cleanup.py
T
Dmitry Dementiev 642789d484 refactor(generator): разнесён сервис генератора по src-пакету
- Зачем:
  - перед активными визитами нужно отделить генеративную модель от Kafka, состояния и сервисного цикла.
- Что:
  - перенесены модули генератора в пакет `src/clickstream_generator`.
  - `generator.py` оставлен фасадом и точкой входа с совместимыми импортами.
  - обновлены Dockerfile, тесты, README, спека и issue 02.5.
- Проверка:
  - `docker build -t generator:test generator`.
  - `docker run --rm -v /home/dmitry/sources/clickstream-ch-kafka-superset-demo:/workspace -w /workspace/generator generator:test pytest tests/ -q`.
  - `python -m py_compile generator.py src/clickstream_generator/*.py` в Docker.
2026-06-11 15:00:50 +03:00

56 lines
2.0 KiB
Python

"""
Контракт уборки сервиса генератора.
"""
from pathlib import Path
import subprocess
import sys
from generator import (
Config,
EventDictionary,
EventGenerator,
GeneratorService,
KafkaPublisher,
GeneratorState,
)
def test_dockerfile_copies_split_python_modules():
"""Контейнерный запуск видит все модули генератора после разбиения."""
dockerfile = (Path(__file__).parent.parent / "Dockerfile").read_text(encoding="utf-8")
assert "COPY src ./src" in dockerfile
assert 'ENV PYTHONPATH="/app/src"' in dockerfile
def test_generator_facade_imports_without_pythonpath():
"""Локальный фасад сам находит src-пакет без внешнего PYTHONPATH."""
generator_dir = Path(__file__).parent.parent
result = subprocess.run(
[sys.executable, "-c", "import generator"],
cwd=generator_dir,
env={"PATH": ""},
text=True,
capture_output=True,
check=False,
)
assert result.returncode == 0, result.stderr
def test_generator_facade_preserves_public_imports_after_split():
"""Старый импорт из generator работает, но классы живут в отдельных модулях."""
assert Config.__module__ == "clickstream_generator.config"
assert EventDictionary.__module__ == "clickstream_generator.dictionary"
assert EventGenerator.__module__ == "clickstream_generator.generation"
assert KafkaPublisher.__module__ == "clickstream_generator.kafka_io"
assert GeneratorState.__module__ == "clickstream_generator.state"
assert GeneratorService.__module__ == "clickstream_generator.service"
def test_tick_batch_is_not_part_of_pure_visit_generation():
"""Временная сборка тика вынесена из чистой модели одного визита."""
assert not hasattr(EventGenerator, "generate_tick_batch")