feat: удалить команду !hp вместе с тестами
This commit is contained in:
parent
48ed9aa07b
commit
d0a4f45e68
@ -2,8 +2,7 @@ from .pg import Pg
|
||||
from .news import News
|
||||
from .cat import Cat
|
||||
from .morning import Morning
|
||||
from .help import Help
|
||||
from .status import Status
|
||||
from .stats import Stats
|
||||
|
||||
ALL_COMMANDS = [Pg, News, Cat, Morning, Help, Status, Stats]
|
||||
ALL_COMMANDS = [Pg, News, Cat, Morning, Status, Stats]
|
||||
|
||||
@ -1,33 +0,0 @@
|
||||
from discord.ext import commands
|
||||
|
||||
|
||||
class Help(commands.Cog):
|
||||
"""Команда !hp — список всех команд бота"""
|
||||
|
||||
@commands.command(name="hp", hidden=True)
|
||||
async def hp(self, ctx: commands.Context) -> None:
|
||||
"""Показать список доступных команд"""
|
||||
await self._show_help(ctx)
|
||||
|
||||
async def _show_help(self, ctx: commands.Context):
|
||||
"""Вывести список команд в простом текстовом формате."""
|
||||
# Собираем команды автоматически из bot.commands
|
||||
# Используем cmd.help — discord.py берёт docstring из callback функции
|
||||
commands_list = []
|
||||
for cmd in ctx.bot.commands:
|
||||
if cmd.hidden:
|
||||
continue
|
||||
name = cmd.name
|
||||
desc = cmd.help or "Без описания"
|
||||
if desc == "Без описания":
|
||||
continue
|
||||
commands_list.append(f"!{name} — {desc}")
|
||||
|
||||
commands_list.sort()
|
||||
|
||||
message = "Discord Bot — Доступные команды\n"
|
||||
message += "=" * 40 + "\n\n"
|
||||
message += "\n".join(commands_list)
|
||||
message += "\n\n" + "=" * 40
|
||||
|
||||
await ctx.send(message)
|
||||
@ -1,72 +0,0 @@
|
||||
"""Тесты для команды !hp (help)."""
|
||||
|
||||
import pytest
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
from commands.help import Help
|
||||
|
||||
|
||||
class TestHelpCommandDiscord:
|
||||
"""Тесты для команды help на Discord."""
|
||||
|
||||
@staticmethod
|
||||
def _make_mock_command(name, doc, hidden=False):
|
||||
"""Создать mock-объект команды с name, help и hidden."""
|
||||
cmd = MagicMock(spec=[])
|
||||
cmd.name = name
|
||||
cmd.help = doc
|
||||
cmd.hidden = hidden
|
||||
return cmd
|
||||
|
||||
async def test_show_help_sends_simple_text(self) -> None:
|
||||
"""Проверка, что команда отправляет простое текстовое сообщение."""
|
||||
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) -> None:
|
||||
"""Проверка содержания отправленного сообщения."""
|
||||
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", "Случайный котик"),
|
||||
]
|
||||
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"]
|
||||
for cmd in commands:
|
||||
assert cmd in message, f"Команда {cmd} не найдена"
|
||||
|
||||
# Проверяем разделение тире между командой и описанием
|
||||
lines = [line.strip() for line in message.split("\n") if "—" in line]
|
||||
assert len(lines) >= 4
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main([__file__, "-v"])
|
||||
@ -39,7 +39,7 @@ class TestCogLoading:
|
||||
async def test_commands_registered(self, loaded_bot) -> None:
|
||||
"""Все команды должны быть зарегистрированы."""
|
||||
command_names = {cmd.name for cmd in loaded_bot.commands if cmd.cog is not None}
|
||||
expected = {"pg", "nw", "morning", "cat", "hp", "stats", "status"}
|
||||
expected = {"pg", "nw", "morning", "cat", "stats", "status"}
|
||||
assert command_names == expected
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user