- Заменён dict на _WEATHER_MAPPING (list of tuples, отсортирован по длине ключей)
- Длинные фразы проверяются первыми, исключая ложные подстроочные совпадения
- "Moderate or heavy rain at times" теперь корректно -> "Дождь" вместо "Сильный дождь"
- Обновлены тесты: test_translate_known и test_translate_longer_key_priority
230 тестов проходят.
Задачи 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