Files
telegram-helper-bot/tests/test_callback_dependency_factory.py
2026-02-02 00:46:44 +03:00

108 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Тесты для helper_bot.handlers.callback.dependency_factory.
"""
from unittest.mock import MagicMock, patch
import pytest
from helper_bot.handlers.callback.dependency_factory import (
get_ban_service, get_post_publish_service)
from helper_bot.handlers.callback.services import (BanService,
PostPublishService)
@pytest.mark.unit
class TestGetPostPublishService:
"""Тесты для get_post_publish_service."""
def test_returns_post_publish_service_with_dependencies_from_factory(self):
"""Возвращается PostPublishService с db, settings, s3_storage, scoring_manager из get_global_instance."""
mock_db = MagicMock()
mock_settings = {
"Telegram": {
"group_for_posts": "-100",
"main_public": "@ch",
"important_logs": "-200",
}
}
mock_s3 = MagicMock()
mock_scoring = MagicMock()
mock_bdf = MagicMock()
mock_bdf.get_db.return_value = mock_db
mock_bdf.settings = mock_settings
mock_bdf.get_s3_storage.return_value = mock_s3
mock_bdf.get_scoring_manager.return_value = mock_scoring
with patch(
"helper_bot.handlers.callback.dependency_factory.get_global_instance",
return_value=mock_bdf,
):
service = get_post_publish_service()
assert isinstance(service, PostPublishService)
assert service.bot is None
assert service.db is mock_db
assert service.settings is mock_settings
assert service.s3_storage is mock_s3
assert service.scoring_manager is mock_scoring
mock_bdf.get_db.assert_called_once()
mock_bdf.get_s3_storage.assert_called_once()
mock_bdf.get_scoring_manager.assert_called_once()
def test_post_publish_service_get_bot_from_message_when_bot_none(self):
"""PostPublishService._get_bot возвращает message.bot когда self.bot is None."""
mock_db = MagicMock()
mock_settings = {
"Telegram": {
"group_for_posts": "-100",
"main_public": "@ch",
"important_logs": "-200",
}
}
mock_bdf = MagicMock()
mock_bdf.get_db.return_value = mock_db
mock_bdf.settings = mock_settings
mock_bdf.get_s3_storage.return_value = None
mock_bdf.get_scoring_manager.return_value = None
with patch(
"helper_bot.handlers.callback.dependency_factory.get_global_instance",
return_value=mock_bdf,
):
service = get_post_publish_service()
message = MagicMock()
message.bot = MagicMock()
bot = service._get_bot(message)
assert bot is message.bot
@pytest.mark.unit
class TestGetBanService:
"""Тесты для get_ban_service."""
def test_returns_ban_service_with_dependencies_from_factory(self):
"""Возвращается BanService с db и settings из get_global_instance."""
mock_db = MagicMock()
mock_settings = {
"Telegram": {
"group_for_posts": "-100",
"important_logs": "-200",
}
}
mock_bdf = MagicMock()
mock_bdf.get_db.return_value = mock_db
mock_bdf.settings = mock_settings
with patch(
"helper_bot.handlers.callback.dependency_factory.get_global_instance",
return_value=mock_bdf,
):
service = get_ban_service()
assert isinstance(service, BanService)
assert service.bot is None
assert service.db is mock_db
assert service.settings is mock_settings
mock_bdf.get_db.assert_called_once()