- 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 теста
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
"""Тесты для console_commands/reload.py."""
|
||
import importlib
|
||
from unittest.mock import MagicMock
|
||
|
||
|
||
class TestReloadCommand:
|
||
"""Тесты консольной команды reload."""
|
||
|
||
def _get_module(self):
|
||
"""Импортировать модуль reload."""
|
||
return importlib.reload(importlib.import_module("console_commands.reload"))
|
||
|
||
def test_reload_removes_and_adds_cogs(self, capfd):
|
||
"""Удаляет старые cogs и добавляет новые."""
|
||
stop_event = MagicMock()
|
||
stop_event.is_set.return_value = False
|
||
|
||
bot = MagicMock()
|
||
bot.cogs = {"TestCog1": MagicMock(), "TestCog2": MagicMock()}
|
||
|
||
cog_class1 = MagicMock()
|
||
cog_class1.__name__ = "TestCog1"
|
||
cog_instance1 = MagicMock()
|
||
cog_instance1.__class__.__name__ = "TestCog1"
|
||
cog_class1.return_value = cog_instance1
|
||
|
||
cog_class2 = MagicMock()
|
||
cog_class2.__name__ = "TestCog2"
|
||
cog_instance2 = MagicMock()
|
||
cog_instance2.__class__.__name__ = "TestCog2"
|
||
cog_class2.return_value = cog_instance2
|
||
|
||
mod = self._get_module()
|
||
original = mod.ALL_COMMANDS
|
||
try:
|
||
mod.ALL_COMMANDS = [cog_class1, cog_class2]
|
||
mod.reload(stop_event, bot)
|
||
finally:
|
||
mod.ALL_COMMANDS = original
|
||
|
||
assert bot.remove_cog.call_count == 2
|
||
assert bot.add_cog.call_count == 2
|
||
captured = capfd.readouterr()
|
||
assert "Перезагружено" in captured.out
|
||
|
||
def test_reload_stop_event(self):
|
||
"""Не выполняется если stop_event установлен."""
|
||
stop_event = MagicMock()
|
||
stop_event.is_set.return_value = True
|
||
bot = MagicMock()
|
||
|
||
mod = self._get_module()
|
||
result = mod.reload(stop_event, bot)
|
||
assert result is None
|