""" Тесты для 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()