mirror of
https://github.com/agessaman/meshcore-bot.git
synced 2026-05-04 23:06:32 +00:00
ae57e651ea
Command tests: - tests/commands/: test_base_command, test_cmd_command, test_dice_command, test_hello_command, test_help_command, test_magic8_command, test_ping_command, test_roll_command - tests/test_bridge_bot_responses, test_channel_manager_logic, test_checkin_service, test_command_manager, test_command_prefix, test_config_merge, test_config_validation, test_db_manager, test_plugin_loader, test_profanity_filter, test_security_utils, test_service_plugin_loader, test_utils Integration and unit: - tests/integration/: test_path_graph_integration, test_path_resolution - tests/regression/: test_keyword_escapes - tests/unit/: test_mesh_graph, test_mesh_graph_edges, test_mesh_graph_multihop, test_mesh_graph_optimizations, test_mesh_graph_scoring, test_mesh_graph_validation, test_path_command_graph, test_path_command_graph_selection, test_path_command_multibyte Helpers: tests/conftest.py, tests/helpers.py
123 lines
5.6 KiB
Python
123 lines
5.6 KiB
Python
"""Tests for bridge bot-responses: channel_sent_listeners registration and cleanup."""
|
|
|
|
from configparser import ConfigParser
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
from modules.service_plugins.discord_bridge_service import DiscordBridgeService
|
|
from modules.service_plugins.telegram_bridge_service import TelegramBridgeService
|
|
|
|
|
|
@pytest.fixture
|
|
def bridge_mock_bot(mock_logger):
|
|
"""Mock bot for bridge service tests."""
|
|
bot = MagicMock()
|
|
bot.logger = mock_logger
|
|
bot.config = ConfigParser()
|
|
bot.config.add_section("DiscordBridge")
|
|
bot.config.set("DiscordBridge", "bridge_bot_responses", "true")
|
|
bot.config.add_section("TelegramBridge")
|
|
bot.config.set("TelegramBridge", "bridge_bot_responses", "true")
|
|
bot.config.set("TelegramBridge", "api_token", "test-token")
|
|
bot.channel_sent_listeners = []
|
|
bot.meshcore = MagicMock()
|
|
return bot
|
|
|
|
|
|
class TestDiscordBridgeBotResponses:
|
|
"""Discord bridge: register/unregister channel_sent_listeners and bridge_bot_responses config."""
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_start_registers_listener_when_bridge_bot_responses_true(self, bridge_mock_bot, mock_logger):
|
|
bridge_mock_bot.config.set("DiscordBridge", "bridge_bot_responses", "true")
|
|
with patch.object(DiscordBridgeService, "_load_channel_mappings", return_value=None):
|
|
service = DiscordBridgeService(bridge_mock_bot)
|
|
service.channel_webhooks = {"general": "https://discord.com/api/webhooks/123/abc"}
|
|
service.bridge_bot_responses = True
|
|
bridge_mock_bot.channel_sent_listeners = []
|
|
|
|
with patch.object(service, "http_session", None), patch(
|
|
"modules.service_plugins.discord_bridge_service.AIOHTTP_AVAILABLE", True
|
|
):
|
|
await service.start()
|
|
|
|
assert service._on_mesh_channel_message in bridge_mock_bot.channel_sent_listeners
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_stop_unregisters_listener(self, bridge_mock_bot, mock_logger):
|
|
with patch.object(DiscordBridgeService, "_load_channel_mappings", return_value=None):
|
|
service = DiscordBridgeService(bridge_mock_bot)
|
|
service.channel_webhooks = {"general": "https://discord.com/api/webhooks/123/abc"}
|
|
bridge_mock_bot.channel_sent_listeners = [service._on_mesh_channel_message]
|
|
|
|
await service.stop()
|
|
|
|
assert service._on_mesh_channel_message not in bridge_mock_bot.channel_sent_listeners
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_start_does_not_register_when_bridge_bot_responses_false(self, bridge_mock_bot, mock_logger):
|
|
bridge_mock_bot.config.set("DiscordBridge", "bridge_bot_responses", "false")
|
|
with patch.object(DiscordBridgeService, "_load_channel_mappings", return_value=None):
|
|
service = DiscordBridgeService(bridge_mock_bot)
|
|
service.channel_webhooks = {"general": "https://discord.com/api/webhooks/123/abc"}
|
|
service.bridge_bot_responses = False
|
|
bridge_mock_bot.channel_sent_listeners = []
|
|
|
|
with patch.object(service, "http_session", None), patch(
|
|
"modules.service_plugins.discord_bridge_service.AIOHTTP_AVAILABLE", True
|
|
):
|
|
await service.start()
|
|
|
|
assert len(bridge_mock_bot.channel_sent_listeners) == 0
|
|
|
|
|
|
class TestTelegramBridgeBotResponses:
|
|
"""Telegram bridge: register/unregister channel_sent_listeners and bridge_bot_responses config."""
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_start_registers_listener_when_bridge_bot_responses_true(self, bridge_mock_bot, mock_logger):
|
|
bridge_mock_bot.config.set("TelegramBridge", "bridge_bot_responses", "true")
|
|
with patch.object(TelegramBridgeService, "_load_channel_mappings", return_value=None):
|
|
service = TelegramBridgeService(bridge_mock_bot)
|
|
service.channel_chat_ids = {"general": "@general"}
|
|
service.bridge_bot_responses = True
|
|
bridge_mock_bot.channel_sent_listeners = []
|
|
service.api_token = "test-token"
|
|
|
|
with patch.object(service, "http_session", None), patch(
|
|
"modules.service_plugins.telegram_bridge_service.AIOHTTP_AVAILABLE", True
|
|
):
|
|
await service.start()
|
|
|
|
assert service._on_mesh_channel_message in bridge_mock_bot.channel_sent_listeners
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_stop_unregisters_listener(self, bridge_mock_bot, mock_logger):
|
|
with patch.object(TelegramBridgeService, "_load_channel_mappings", return_value=None):
|
|
service = TelegramBridgeService(bridge_mock_bot)
|
|
service.channel_chat_ids = {"general": "@general"}
|
|
service.api_token = "test-token"
|
|
bridge_mock_bot.channel_sent_listeners = [service._on_mesh_channel_message]
|
|
|
|
await service.stop()
|
|
|
|
assert service._on_mesh_channel_message not in bridge_mock_bot.channel_sent_listeners
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_start_does_not_register_when_bridge_bot_responses_false(self, bridge_mock_bot, mock_logger):
|
|
bridge_mock_bot.config.set("TelegramBridge", "bridge_bot_responses", "false")
|
|
with patch.object(TelegramBridgeService, "_load_channel_mappings", return_value=None):
|
|
service = TelegramBridgeService(bridge_mock_bot)
|
|
service.channel_chat_ids = {"general": "@general"}
|
|
service.api_token = "test-token"
|
|
service.bridge_bot_responses = False
|
|
bridge_mock_bot.channel_sent_listeners = []
|
|
|
|
with patch.object(service, "http_session", None), patch(
|
|
"modules.service_plugins.telegram_bridge_service.AIOHTTP_AVAILABLE", True
|
|
):
|
|
await service.start()
|
|
|
|
assert len(bridge_mock_bot.channel_sent_listeners) == 0
|