discordBot/tests/test_bot.py
deadzilla 71bcd66794 feat: закрываю Sprint 1 — все 3 задачи выполнены
Задачи Sprint 1 (Critical Fixes):
- [1.1] Fallback в пустом embed (!morning) — добавлена проверка has_real_data и fallback сообщение при отключении внешних API
- [1.2] Обработка ошибок токена/сети в bot.run() — raise_exception=True + логирование LoginFailure, HTTPException, Exception
- [1.3] Рефакторинг парсинга погоды — вынесено в format_weather_data_for_console(), убран дублирующий код из 2 файлов

Изменения:
• utils/morning_runner.py — добавлена проверка has_real_data после формирования description_lines
• bot.py — обработчики исключений для запуска бота с детализированным логированием и пользовательскими сообщениями
• utils/pogoda.py — новая функция format_weather_data_for_console() для центрального форматирования погодных данных
• console_commands/pogoda.py — замена 15 строк дублирующейся логики на вызов единой функции (24→8 строк)
• console_commands/morning.py — аналогичные изменения для команды morning (19→13 строк с погодой)
• tests/test_morning_runner.py — +2 теста для fallback сценариев empty embed и only weather data
• tests/test_bot.py — новый файл с 2 тестами на проверку кода обработки ошибок
• tests/test_pogoda.py — +6 тестов для format_weather_data_for_console()

Статистика тестирования:
• Общее количество тестов: 200 (было 190)
• Новые тесты: 10
• Все тесты проходят успешно

Примечания:
- Сообщения без восклицательных знаков согласно preferencem
2026-06-01 16:32:02 +05:00

55 lines
2.2 KiB
Python
Raw 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
assert bot.bot.command_prefix == "!", (
f"Команда должна быть с префиксом '!', а не '{bot.bot.command_prefix}'"
)
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()
# Проверяем наличие raise_exception=True
assert "raise_exception=True" in content, (
"В bot.py должен присутствовать параметр raise_exception=True"
)
# Проверяем наличие обработки 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"])