discordBot/tests/test_bot.py
deadzilla 071e313015 refactor: инкапсулировать глобальные переменные в BotRunner + валидация конфига
- 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
2026-06-09 23:09:02 +05:00

57 lines
2.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Тесты для 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"])