- bot.py: создан класс BotRunner (bot, stop_event, bot_ready, scheduler) - bot.py: добавлена _validate_config() — проверка MORNING_TIME (ЧЧ:ММ) и MORNING_CHANNEL_ID (int) - bot.py: убраны все глобальные переменные - Dockerfile: healthcheck через ps aux (проверка процесса python bot.py) - docker-compose.yml: добавлен MORNING_CHANNEL_ID - ISSUES.md: закрыто 3 задачи (валидация конфига, инкапсуляция, multi-stage) - tests/test_bot.py: адаптирован тест под BotRunner
57 lines
2.3 KiB
Python
57 lines
2.3 KiB
Python
"""
|
||
Тесты для bot.py — проверка обработки ошибок запуска бота.
|
||
|
||
Покрывают пункт 1.2 из PLAN_OF_WORKS.md:
|
||
- raise_exception=True в bot.run()
|
||
- Логирование и обработка исключений (LoginFailure, HTTPException)
|
||
"""
|
||
|
||
import sys
|
||
from pathlib import Path
|
||
from unittest.mock import MagicMock, patch
|
||
|
||
# Добавляем корень проекта в путь импорта
|
||
ROOT_DIR = Path(__file__).resolve().parent.parent
|
||
sys.path.insert(0, str(ROOT_DIR))
|
||
|
||
|
||
class TestBotInit:
|
||
"""Тесты для инициализации бота."""
|
||
|
||
def test_bot_created_with_default_prefix(self):
|
||
"""Проверка, что бот создан с правильным префиксом команд."""
|
||
import bot
|
||
|
||
runner = bot.BotRunner()
|
||
try:
|
||
assert runner.bot.command_prefix == "!", (
|
||
f"Команда должна быть с префиксом '!', а не '{runner.bot.command_prefix}'"
|
||
)
|
||
finally:
|
||
runner.stop_event.set()
|
||
|
||
|
||
class TestBotErrorHandlingCodeExists:
|
||
"""Тесты для проверки наличия кода обработки ошибок в bot.py."""
|
||
|
||
def test_error_handling_code_exists(self):
|
||
"""Проверка, что код обработки ошибок существует в файле bot.py."""
|
||
with open(ROOT_DIR / "bot.py", encoding="utf-8") as f:
|
||
content = f.read()
|
||
|
||
# Проверяем обработку ошибок в bot.run()
|
||
assert "bot.run(token)" in content, "В bot.py должен быть вызов bot.run(token)"
|
||
|
||
# Проверяем наличие обработки LoginFailure
|
||
assert "LoginFailure" in content, "В bot.py должна быть обработка LoginFailure"
|
||
|
||
# Проверяем наличие обработки HTTPException
|
||
assert "HTTPException" in content, "В bot.py должна быть обработка HTTPException"
|
||
|
||
# Проверяем наличие логирования ошибок
|
||
assert "logger.critical" in content, "В bot.py должно быть критическое логирование"
|
||
|
||
|
||
if __name__ == "__main__":
|
||
pytest.main([__file__, "-v"])
|