feat: удалить команду !hp вместе с тестами
This commit is contained in:
parent
48ed9aa07b
commit
d0a4f45e68
@ -2,8 +2,7 @@ from .pg import Pg
|
|||||||
from .news import News
|
from .news import News
|
||||||
from .cat import Cat
|
from .cat import Cat
|
||||||
from .morning import Morning
|
from .morning import Morning
|
||||||
from .help import Help
|
|
||||||
from .status import Status
|
from .status import Status
|
||||||
from .stats import Stats
|
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:
|
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}
|
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
|
assert command_names == expected
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user