fix: добавить обработку ошибок в commands/morning.py
Если run_morning выбрасывает исключение, ошибка теперь перехватывается: логируется с exc_info, пользователю отправлено сообщение об ошибке. Тест обновлён — проверяется что исключение не пробрасывается наружу.
This commit is contained in:
parent
0f944eafe7
commit
78106e7b4c
@ -13,5 +13,10 @@ class Morning(commands.Cog):
|
|||||||
async def morning(self, ctx: commands.Context) -> None:
|
async def morning(self, ctx: commands.Context) -> None:
|
||||||
"""Погода, лучшие статьи за сутки и котик"""
|
"""Погода, лучшие статьи за сутки и котик"""
|
||||||
logger.info("%s: !morning запущен", ctx.author)
|
logger.info("%s: !morning запущен", ctx.author)
|
||||||
await run_morning(ctx.bot, ctx.channel)
|
try:
|
||||||
logger.info("%s: !morning завершен", ctx.author)
|
await run_morning(ctx.bot, ctx.channel)
|
||||||
|
except Exception:
|
||||||
|
logger.error("%s: !morning ошибка", ctx.author, exc_info=True)
|
||||||
|
await ctx.send("Ошибка при выполнении команды. Попробуйте позже.")
|
||||||
|
else:
|
||||||
|
logger.info("%s: !morning завершен", ctx.author)
|
||||||
|
|||||||
@ -72,7 +72,7 @@ class TestMorningCommand:
|
|||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_morning_run_morning_raises(self) -> None:
|
async def test_morning_run_morning_raises(self) -> None:
|
||||||
"""Ошибка в run_morning должна пробрасываться."""
|
"""Ошибка в run_morning ловится, пользователю отправлено сообщение."""
|
||||||
from commands.morning import Morning
|
from commands.morning import Morning
|
||||||
|
|
||||||
cog = Morning()
|
cog = Morning()
|
||||||
@ -80,5 +80,8 @@ class TestMorningCommand:
|
|||||||
|
|
||||||
with patch("commands.morning.run_morning", new_callable=AsyncMock) as mock_run:
|
with patch("commands.morning.run_morning", new_callable=AsyncMock) as mock_run:
|
||||||
mock_run.side_effect = Exception("api error")
|
mock_run.side_effect = Exception("api error")
|
||||||
with pytest.raises(Exception, match="api error"):
|
await cog.morning(cog, ctx)
|
||||||
await cog.morning(cog, ctx)
|
|
||||||
|
ctx.send.assert_awaited_once()
|
||||||
|
message = ctx.send.call_args[0][0]
|
||||||
|
assert "Ошибка" in message
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user