- console_commands/logs.py — чтение последних строк лога (tail -20) - console_commands/reload.py — горячая перезагрузка всех cogs - console_commands/trigger_morning.py — ручной запуск morning-дайджеста - logs доступна через admin.py (docker exec) и интерактивный терминал - reload и trigger morning доступны через интерактивный терминал - сохранён bot._scheduler для доступа к планировщику - обновлены __init__.py, admin.py, README.md, ISSUES.md - добавлены тесты: test_console_logs.py (4), test_console_reload.py (2), test_console_trigger_morning.py (3) - итого 243 теста
54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
"""Тесты для console_commands/trigger_morning.py."""
|
||
import importlib
|
||
from unittest.mock import MagicMock, patch
|
||
|
||
|
||
class TestTriggerMorningCommand:
|
||
"""Тесты консольной команды trigger morning."""
|
||
|
||
def test_trigger_morning_no_scheduler(self, capfd):
|
||
"""Выводит сообщение если scheduler не найден."""
|
||
stop_event = MagicMock()
|
||
stop_event.is_set.return_value = False
|
||
bot = MagicMock()
|
||
# Убедимся что _scheduler не установлен через getattr
|
||
type(bot)._scheduler = None
|
||
|
||
mod = importlib.import_module("console_commands.trigger_morning")
|
||
mod.trigger_morning(stop_event, bot)
|
||
|
||
captured = capfd.readouterr()
|
||
assert "не запущен" in captured.out
|
||
|
||
def test_trigger_morning_stop_event(self):
|
||
"""Не выполняется если stop_event установлен."""
|
||
stop_event = MagicMock()
|
||
stop_event.is_set.return_value = True
|
||
bot = MagicMock()
|
||
|
||
mod = importlib.import_module("console_commands.trigger_morning")
|
||
result = mod.trigger_morning(stop_event, bot)
|
||
assert result is None
|
||
|
||
def test_trigger_morning_calls_scheduler(self, capfd):
|
||
"""Вызывает scheduler._run_morning()."""
|
||
stop_event = MagicMock()
|
||
stop_event.is_set.return_value = False
|
||
|
||
scheduler = MagicMock()
|
||
bot = MagicMock()
|
||
bot._scheduler = scheduler
|
||
|
||
mock_future = MagicMock()
|
||
mock_future.result.return_value = None
|
||
|
||
mod = importlib.import_module("console_commands.trigger_morning")
|
||
with patch.object(
|
||
mod, "asyncio",
|
||
MagicMock(run_coroutine_threadsafe=MagicMock(return_value=mock_future))
|
||
):
|
||
mod.trigger_morning(stop_event, bot)
|
||
|
||
captured = capfd.readouterr()
|
||
assert "запущен вручную" in captured.out
|