Files
clickstream-ch-kafka-supers…/generator/tests/test_service.py
T
ddadminandDmitry Dementiev ffe81167c3 refactor(generator): удалён in-memory fallback для истории батчей
- Удалён класс InMemoryBatchHistory и вся fallback-логика
- Упрощён KafkaBatchHistory: убраны _initialized, get_stats(), обработка ошибок
- Обновлена документация (generator/README.md, docs/OPERATIONS.md)
- Упрощены тесты, удалены тесты для удалённого функционала
- Код стал честнее: без Kafka генератор падает при старте

Ревьюер: Prometheus даёт достаточно visibility, fallback избыточен
2026-06-09 17:27:16 +03:00

93 lines
3.2 KiB
Python

"""
Тесты для GeneratorService и интеграционных сценариев.
"""
from unittest.mock import MagicMock, patch
import pytest
from generator import (
Config, EventDictionary, GeneratorService, KafkaBatchHistory
)
class TestBatchRecordWithDictConversion:
"""Тесты конвертации BatchRecord в dict."""
def test_dict_contains_all_batch_info(self):
"""Словарь содержит всю информацию о батче."""
from datetime import datetime, timezone
from generator import BatchRecord
started = datetime(2024, 6, 15, 12, 0, 0, tzinfo=timezone.utc)
finished = datetime(2024, 6, 15, 12, 0, 5, tzinfo=timezone.utc)
record = BatchRecord(
batch_id="batch_001",
started_at=started,
finished_at=finished,
sent_total=400,
sent_browser=100,
sent_location=100,
sent_device=100,
sent_geo=100,
status="success",
error_message=None,
)
data = record.to_dict()
# Проверяем структуру JSON
assert isinstance(data, dict)
assert data["batch_id"] == "batch_001"
assert data["sent_total"] == 400
assert data["status"] == "success"
assert "started_at" in data
assert "finished_at" in data
# Проверяем что можно сериализовать в JSON
import json
json_str = json.dumps(data)
assert isinstance(json_str, str)
# Проверяем что можно десериализовать
restored = json.loads(json_str)
assert restored["batch_id"] == "batch_001"
class TestGeneratorServiceInit:
"""Тесты инициализации GeneratorService."""
def test_service_initializes_dictionary(self, base_config):
"""Service загружает словарь при инициализации."""
service = GeneratorService(base_config)
assert service.dictionary is not None
assert len(service.dictionary.browser_events) == 1000
assert service.generator is not None
assert service.config == base_config
def test_service_history_is_none_before_start(self, base_config):
"""История None до вызова start."""
service = GeneratorService(base_config)
# История и publisher инициализируются в start()
assert service.history is None
assert service.publisher is None
class TestGeneratorServiceDisabled:
"""Тесты отключенного генератора."""
def test_disabled_generator_logs_warning(self, base_config, caplog):
"""Отключенный генератор логирует warning."""
from dataclasses import replace
import logging
disabled_config = replace(base_config, enabled=False)
service = GeneratorService(disabled_config)
with caplog.at_level(logging.WARNING):
service.start()
assert "disabled" in caplog.text.lower() or "GEN_ENABLED" in caplog.text