#!/bin/bash # План тестирования Домовой Бот # Запуск: bash tests/run_tests.sh set -e echo "============================================================" echo "🧪 ПЛАН ТЕСТИРОВАНИЯ ДОМОВОЙ БОТ" echo "============================================================" echo "" cd /home/matrixhasyou/domovoy_bot # ============================================================================= # ЭТАП 1: АВТОМАТИЧЕСКИЕ ПРОВЕРКИ (15 мин) # ============================================================================= echo "============================================================" echo "📋 ЭТАП 1: АВТОМАТИЧЕСКИЕ ПРОВЕРКИ" echo "============================================================" echo "" # 1.1 Синтаксис Python echo "1.1 Проверка синтаксиса Python..." python3 -m py_compile main.py && echo "✅ main.py" python3 -m py_compile config.py && echo "✅ config.py" python3 -m py_compile handlers/admin.py && echo "✅ handlers/admin.py" python3 -m py_compile handlers/users.py && echo "✅ handlers/users.py" python3 -m py_compile keyboards/admin_menu.py && echo "✅ keyboards/admin_menu.py" python3 -m py_compile keyboards/inline.py && echo "✅ keyboards/inline.py" echo "" # 1.2 Импорты (через venv) echo "1.2 Проверка импортов..." venv/bin/python3 -c "from handlers.admin import router; print('✅ handlers.admin')" venv/bin/python3 -c "from handlers.users import router; print('✅ handlers.users')" venv/bin/python3 -c "from keyboards.admin_menu import get_admin_main_menu; print('✅ keyboards.admin_menu')" venv/bin/python3 -c "from keyboards.inline import get_main_menu; print('✅ keyboards.inline')" venv/bin/python3 -c "import config; print('✅ config')" echo "" # 1.3 Проверка callback_data на критичные дубликаты echo "1.3 Проверка уникальности callback_data..." echo "Ищем дубликаты (кроме шаблонных с ID)..." grep -r "callback_data=" handlers/ keyboards/ | cut -d'"' -f2 | grep -v "_[0-9]*$" | sort | uniq -d || echo "✅ Критичных дубликатов нет" echo "" # 1.4 Проверка БД echo "1.4 Проверка базы данных..." if [ -f "database/domovoy.db" ]; then echo "✅ Файл БД существует" sqlite3 database/domovoy.db "SELECT COUNT(*) FROM user;" 2>/dev/null && echo "✅ Таблица user существует" || echo "⚠️ Таблица user не найдена" else echo "⚠️ Файл БД не найден (это нормально для тестов)" fi echo "" # ============================================================================= # ЭТАП 2: РУЧНОЕ ТЕСТИРОВАНИЕ В TELEGRAM (60 мин) # ============================================================================= echo "============================================================" echo "📋 ЭТАП 2: РУЧНОЕ ТЕСТИРОВАНИЕ В TELEGRAM" echo "============================================================" echo "" echo "Запустите бота: ./start.sh" echo "" echo "Тесты для админа:" echo " 1. /admin - показать меню" echo " 2. Нажать '📊 Статистика' - должен показать статистику" echo " 3. Нажать '🕵️ Шпионы' - должен показать список" echo " 4. Нажать '👥 Пользователи' - должен показать список" echo " 5. Нажать '🏆 Рейтинг' - должен показать топ-10" echo " 6. Нажать '☠️ Токсичность' - должно показать подменю" echo " 7. Нажать '🔇 Муты' - должен показать список" echo " 8. Нажать '🚫 Баны' - должен показать список" echo " 9. Нажать '🔍 Поиск' - должно показать подменю" echo " 10. Нажать '👤 Действия' - должен показать список с пагинацией" echo " 11. Выбрать пользователя - должно показать меню действий" echo " 12. Нажать '🚫 Забанить' → '✅ Да' - должен забанить" echo " 13. Нажать '⚠️ Предупреждения' - должно показать подменю" echo " 14. Нажать '📋 Стоп-слова' - должен показать список" echo " 15. Нажать на слово - должно удалить" echo " 16. Нажать '➕ Добавить слово' → ввести слово - должно добавить" echo "" echo "Тесты для пользователя:" echo " 1. /start - показать главное меню" echo " 2. Нажать '🏆 Достижения' - должен показать достижения" echo " 3. Нажать '📅 События' - должен показать события" echo " 4. Нажать '💰 Платежи' - должен показать платежи" echo " 5. Нажать '📋 Опросы' - должен показать опросы" echo " 6. Нажать '📊 Токсичность' - должен показать топ" echo " 7. Нажать '🏠 Темы чата' - должен показать темы" echo " 8. Нажать '🙏 Поблагодарить' - должен показать список" echo " 9. Выбрать пользователя → подтвердить - должно начислить +10" echo " 10. Нажать '🔍 Моя квартира' - должно показать инфо" echo "" # ============================================================================= # ЭТАП 3: ПРОВЕРКА ЛОГОВ (5 мин) # ============================================================================= echo "============================================================" echo "📋 ЭТАП 3: ПРОВЕРКА ЛОГОВ" echo "============================================================" echo "" echo "Проверьте файл логов:" echo " tail -f logs/bot.log" echo "" echo "Ищите:" echo " - Ошибки (ERROR)" echo " - Предупреждения (WARNING)" echo " - Критичные исключения" echo "" # ============================================================================= # ЭТАП 4: НАГРУЗОЧНОЕ ТЕСТИРОВАНИЕ (15 мин) # ============================================================================= echo "============================================================" echo "📋 ЭТАП 4: НАГРУЗОЧНОЕ ТЕСТИРОВАНИЕ" echo "============================================================" echo "" echo "1. Проверка пагинации при 200+ пользователях:" echo " /admin → 👤 Действия → листать страницы" echo "" echo "2. Проверка пагинации при 500+ стоп-словах:" echo " /admin → ⚠️ Предупреждения → 📋 Стоп-слова → листать" echo "" echo "3. Проверка одновременных действий:" echo " Два админа одновременно жмут кнопки" echo "" # ============================================================================= # ЭТАП 5: ПРОВЕРКА БЕЗОПАСНОСТИ (10 мин) # ============================================================================= echo "============================================================" echo "📋 ЭТАП 5: ПРОВЕРКА БЕЗОПАСНОСТИ" echo "============================================================" echo "" echo "1. Обычный пользователь жмёт админ-кнопки:" echo " Ожидается: 'Нет прав'" echo "" echo "2. Ввод некорректных данных в FSM:" echo " Ожидается:Graceful error, не краш" echo "" echo "3. Пустые списки:" echo " Ожидается: 'Нет данных', не ошибка" echo "" # ============================================================================= # ИТОГ # ============================================================================= echo "" echo "============================================================" echo "✅ ПЛАН ТЕСТИРОВАНИЯ ЗАВЕРШЁН" echo "============================================================" echo "" echo "Время выполнения:" echo " - Этап 1 (авто): 15 мин" echo " - Этап 2 (ручное): 60 мин" echo " - Этап 3 (логи): 5 мин" echo " - Этап 4 (нагрузка): 15 мин" echo " - Этап 5 (безопасность): 10 мин" echo " - Итого: ~105 мин" echo "" echo "Результаты записывайте в файл tests/test_results.md" echo ""