"""Тесты для команды !hp (help).""" import pytest from unittest.mock import AsyncMock, MagicMock class TestHelpCommandDiscord: """Тесты для команды help на Discord.""" @staticmethod def _make_mock_command(name, doc): """Создать mock-объект команды с name и docstring.""" cmd = MagicMock(spec=[]) cmd.name = name cmd.__doc__ = doc return cmd async def test_show_help_sends_simple_text(self): """Проверка, что команда отправляет простое текстовое сообщение.""" from commands.help import Help mock_ctx = MagicMock() mock_ctx.bot.commands = [] mock_ctx.send = AsyncMock(return_value=None) helper = Help() await helper._show_help(mock_ctx) mock_ctx.send.assert_awaited_once() async def test_show_help_message_content(self): """Проверка содержания отправленного сообщения.""" from commands.help import Help message_calls = [] def send_side_effect(text: str, *args, **kwargs): message_calls.append(text) return MagicMock() mock_ctx = MagicMock() mock_ctx.bot.commands = [ self._make_mock_command("pg", "Прогноз погоды в Магнитогорске"), self._make_mock_command("nw", "Топ-5 статей и топ-5 новостей AI с Habr"), self._make_mock_command("morning", "Утренний дайджест: погода + новости + котик"), self._make_mock_command("cat", "Случайный котик"), self._make_mock_command("msg", "Повторить текст в чате"), ] mock_ctx.send = AsyncMock(side_effect=send_side_effect) helper = Help() await helper._show_help(mock_ctx) assert len(message_calls) == 1 message = message_calls[0] # Проверка структуры сообщения assert "Discord Bot — Доступные команды" in message assert "=" * 40 in message # Проверяем наличие всех команд без кавычек commands = ["!pg", "!nw", "!morning", "!cat", "!msg"] for cmd in commands: assert cmd in message, f"Команда {cmd} не найдена" # Проверяем разделение тире между командой и описанием lines = [l.strip() for l in message.split("\n") if "—" in l] assert len(lines) >= 5 if __name__ == "__main__": pytest.main([__file__, "-v"])