Implement user-specific question numbering and update database schema. Added triggers for automatic question numbering and adjustments upon deletion. Enhanced CRUD operations to manage user_question_number effectively.
This commit is contained in:
319
tests/IMPLEMENTATION_PLAN.md
Normal file
319
tests/IMPLEMENTATION_PLAN.md
Normal file
@@ -0,0 +1,319 @@
|
||||
# 📋 План реализации тестов для AnonBot
|
||||
|
||||
## 🎯 Общая информация
|
||||
|
||||
**Всего файлов для тестирования: 25-30 файлов**
|
||||
**Цель покрытия: 80%+**
|
||||
**Время реализации: 6-9 дней**
|
||||
|
||||
## 📊 Статус реализации
|
||||
|
||||
### ✅ Создано (структура)
|
||||
- [x] Базовая структура тестов
|
||||
- [x] Конфигурация pytest
|
||||
- [x] Фикстуры и моки
|
||||
- [x] Все файлы тестов (заглушки)
|
||||
- [x] Документация тестов
|
||||
- [x] Примеры тестов
|
||||
|
||||
### 🔄 В процессе
|
||||
- [ ] Реализация unit тестов для моделей
|
||||
- [ ] Реализация unit тестов для валидации
|
||||
- [ ] Реализация unit тестов для авторизации
|
||||
- [ ] Реализация unit тестов для CRUD
|
||||
- [ ] Реализация unit тестов для бизнес-сервисов
|
||||
|
||||
### ⏳ Планируется
|
||||
- [ ] Реализация unit тестов для обработчиков
|
||||
- [ ] Реализация unit тестов для middleware
|
||||
- [ ] Реализация unit тестов для инфраструктурных сервисов
|
||||
- [ ] Реализация unit тестов для утилит
|
||||
- [ ] Реализация unit тестов для конфигурации
|
||||
- [ ] Реализация интеграционных тестов
|
||||
|
||||
## 🚀 Этапы реализации
|
||||
|
||||
### Этап 1: Критически важные компоненты (3-4 дня)
|
||||
|
||||
#### 1.1 Модели данных (1 день)
|
||||
- [ ] `test_user.py` - полная реализация
|
||||
- [ ] `test_question.py` - полная реализация
|
||||
- [ ] `test_user_block.py` - полная реализация
|
||||
- [ ] `test_user_settings.py` - полная реализация
|
||||
|
||||
#### 1.2 Валидация (1 день)
|
||||
- [ ] `test_input_validator.py` - полная реализация
|
||||
- [ ] `test_validation_middleware.py` - полная реализация
|
||||
|
||||
#### 1.3 Авторизация (1 день)
|
||||
- [ ] `test_auth_service.py` - полная реализация
|
||||
- [ ] `test_permissions.py` - полная реализация
|
||||
|
||||
#### 1.4 CRUD операции (1 день)
|
||||
- [ ] `test_crud.py` - полная реализация
|
||||
|
||||
### Этап 2: Важные компоненты (2-3 дня)
|
||||
|
||||
#### 2.1 Бизнес-сервисы (1 день)
|
||||
- [ ] `test_user_service.py` - полная реализация
|
||||
- [ ] `test_question_service.py` - полная реализация
|
||||
- [ ] `test_message_service.py` - полная реализация
|
||||
- [ ] `test_pagination_service.py` - полная реализация
|
||||
|
||||
#### 2.2 Обработчики (1 день)
|
||||
- [ ] `test_start.py` - полная реализация
|
||||
- [ ] `test_questions.py` - полная реализация
|
||||
- [ ] `test_answers.py` - полная реализация
|
||||
- [ ] `test_admin.py` - полная реализация
|
||||
|
||||
#### 2.3 Middleware (0.5 дня)
|
||||
- [ ] `test_validation_middleware.py` - полная реализация
|
||||
- [ ] `test_rate_limit_middleware.py` - полная реализация
|
||||
|
||||
#### 2.4 Инфраструктурные сервисы (0.5 дня)
|
||||
- [ ] `test_database.py` - полная реализация
|
||||
- [ ] `test_metrics.py` - полная реализация
|
||||
|
||||
### Этап 3: Дополнительные компоненты (1-2 дня)
|
||||
|
||||
#### 3.1 Утилиты (0.5 дня)
|
||||
- [ ] `test_utils.py` - полная реализация
|
||||
|
||||
#### 3.2 Конфигурация (0.5 дня)
|
||||
- [ ] `test_config.py` - полная реализация
|
||||
- [ ] `test_constants.py` - полная реализация
|
||||
|
||||
#### 3.3 Интеграционные тесты (1 день)
|
||||
- [ ] `test_database_integration.py` - полная реализация
|
||||
- [ ] `test_bot_integration.py` - полная реализация
|
||||
|
||||
## 📝 Детальный план по файлам
|
||||
|
||||
### Модели данных
|
||||
|
||||
#### `test_user.py`
|
||||
- [ ] `test_user_creation_basic()` - создание пользователя
|
||||
- [ ] `test_user_creation_with_all_fields()` - создание со всеми полями
|
||||
- [ ] `test_user_validation_telegram_id()` - валидация ID
|
||||
- [ ] `test_user_display_name()` - отображение имени
|
||||
- [ ] `test_user_profile_link_generation()` - генерация ссылки
|
||||
- [ ] `test_user_html_escaping()` - HTML экранирование
|
||||
- [ ] `test_user_serialization()` - сериализация
|
||||
- [ ] `test_user_deserialization()` - десериализация
|
||||
|
||||
#### `test_question.py`
|
||||
- [ ] `test_question_creation_basic()` - создание вопроса
|
||||
- [ ] `test_question_status_values()` - статусы вопросов
|
||||
- [ ] `test_question_validation_message_text()` - валидация текста
|
||||
- [ ] `test_question_mark_as_answered()` - отметка как отвеченный
|
||||
- [ ] `test_question_formatting_methods()` - методы форматирования
|
||||
|
||||
#### `test_user_block.py`
|
||||
- [ ] `test_user_block_creation_basic()` - создание блокировки
|
||||
- [ ] `test_user_block_validation_different_ids()` - валидация ID
|
||||
- [ ] `test_user_block_created_at_timestamp()` - временная метка
|
||||
- [ ] `test_user_block_serialization()` - сериализация
|
||||
|
||||
#### `test_user_settings.py`
|
||||
- [ ] `test_user_settings_creation_basic()` - создание настроек
|
||||
- [ ] `test_user_settings_default_values()` - значения по умолчанию
|
||||
- [ ] `test_user_settings_validation_language()` - валидация языка
|
||||
- [ ] `test_user_settings_boolean_flags()` - булевы флаги
|
||||
|
||||
### Валидация
|
||||
|
||||
#### `test_input_validator.py`
|
||||
- [ ] `test_validate_telegram_id_valid()` - валидация ID
|
||||
- [ ] `test_validate_username_valid()` - валидация username
|
||||
- [ ] `test_validate_text_content_valid()` - валидация текста
|
||||
- [ ] `test_validate_deep_link_valid()` - валидация deep link
|
||||
- [ ] `test_validate_callback_data_valid()` - валидация callback
|
||||
- [ ] `test_sanitize_html_basic()` - HTML санитизация
|
||||
- [ ] `test_is_spam_repeating_characters()` - спам-фильтры
|
||||
|
||||
#### `test_validation_middleware.py`
|
||||
- [ ] `test_validate_callback_query_valid()` - валидация callback
|
||||
- [ ] `test_validate_message_valid()` - валидация сообщений
|
||||
- [ ] `test_validation_error_handling()` - обработка ошибок
|
||||
- [ ] `test_sanitized_data_injection()` - инъекция данных
|
||||
|
||||
### Авторизация
|
||||
|
||||
#### `test_auth_service.py`
|
||||
- [ ] `test_is_admin_valid_admin()` - проверка админа
|
||||
- [ ] `test_is_superuser_valid_superuser()` - проверка суперпользователя
|
||||
- [ ] `test_get_user_role_admin()` - получение роли
|
||||
- [ ] `test_has_permission_valid_permission()` - проверка разрешений
|
||||
|
||||
#### `test_permissions.py`
|
||||
- [ ] `test_admin_permission_check_valid_admin()` - проверка админского разрешения
|
||||
- [ ] `test_superuser_permission_check_valid_superuser()` - проверка суперпользовательского разрешения
|
||||
- [ ] `test_permission_registry_creation()` - создание реестра
|
||||
- [ ] `test_require_permission_decorator()` - декоратор разрешений
|
||||
|
||||
### CRUD операции
|
||||
|
||||
#### `test_crud.py`
|
||||
- [ ] `test_create_user_basic()` - создание пользователя
|
||||
- [ ] `test_create_question_basic()` - создание вопроса
|
||||
- [ ] `test_create_batch_users()` - batch создание
|
||||
- [ ] `test_get_by_telegram_id_existing()` - получение по ID
|
||||
- [ ] `test_update_user_existing()` - обновление
|
||||
- [ ] `test_delete_user_existing()` - удаление
|
||||
- [ ] `test_cursor_pagination()` - cursor пагинация
|
||||
|
||||
### Бизнес-сервисы
|
||||
|
||||
#### `test_user_service.py`
|
||||
- [ ] `test_create_or_update_user_new_user()` - создание пользователя
|
||||
- [ ] `test_get_user_by_id_existing()` - получение по ID
|
||||
- [ ] `test_user_exists_true()` - проверка существования
|
||||
- [ ] `test_format_user_info()` - форматирование
|
||||
|
||||
#### `test_question_service.py`
|
||||
- [ ] `test_create_question_basic()` - создание вопроса
|
||||
- [ ] `test_answer_question_valid()` - ответ на вопрос
|
||||
- [ ] `test_edit_answer_valid()` - редактирование ответа
|
||||
- [ ] `test_delete_question_existing()` - удаление вопроса
|
||||
|
||||
#### `test_message_service.py`
|
||||
- [ ] `test_send_message_basic()` - отправка сообщения
|
||||
- [ ] `test_send_message_with_keyboard()` - отправка с клавиатурой
|
||||
- [ ] `test_send_error_message()` - отправка ошибки
|
||||
- [ ] `test_format_message_basic()` - форматирование
|
||||
|
||||
#### `test_pagination_service.py`
|
||||
- [ ] `test_offset_pagination_basic()` - offset пагинация
|
||||
- [ ] `test_cursor_pagination_basic()` - cursor пагинация
|
||||
- [ ] `test_validate_pagination_params_valid()` - валидация параметров
|
||||
- [ ] `test_format_pagination_info_basic()` - форматирование
|
||||
|
||||
### Обработчики
|
||||
|
||||
#### `test_start.py`
|
||||
- [ ] `test_cmd_start_basic()` - команда /start
|
||||
- [ ] `test_cmd_start_with_deep_link()` - /start с deep link
|
||||
- [ ] `test_handle_deep_link_valid()` - обработка deep link
|
||||
- [ ] `test_process_start_command_new_user()` - обработка для нового пользователя
|
||||
|
||||
#### `test_questions.py`
|
||||
- [ ] `test_process_anonymous_question_valid()` - обработка вопроса
|
||||
- [ ] `test_my_questions_button_with_questions()` - кнопка вопросов
|
||||
- [ ] `test_answer_question_callback_valid()` - callback ответа
|
||||
- [ ] `test_format_questions_list_basic()` - форматирование списка
|
||||
|
||||
#### `test_answers.py`
|
||||
- [ ] `test_process_new_answer_valid()` - обработка ответа
|
||||
- [ ] `test_view_question_callback_valid()` - просмотр вопроса
|
||||
- [ ] `test_edit_answer_callback_valid()` - редактирование ответа
|
||||
- [ ] `test_delete_answer_callback_valid()` - удаление ответа
|
||||
|
||||
#### `test_admin.py`
|
||||
- [ ] `test_admin_menu_basic()` - админское меню
|
||||
- [ ] `test_admin_stats_basic()` - админская статистика
|
||||
- [ ] `test_assign_superuser_callback_valid()` - назначение суперпользователя
|
||||
- [ ] `test_permission_checking_admin_required()` - проверка прав
|
||||
|
||||
### Middleware
|
||||
|
||||
#### `test_validation_middleware.py`
|
||||
- [ ] `test_validate_callback_query_valid()` - валидация callback
|
||||
- [ ] `test_validate_message_valid()` - валидация сообщений
|
||||
- [ ] `test_validation_error_handling()` - обработка ошибок
|
||||
- [ ] `test_sanitized_data_injection()` - инъекция данных
|
||||
|
||||
#### `test_rate_limit_middleware.py`
|
||||
- [ ] `test_apply_rate_limit_to_message()` - применение rate limiting
|
||||
- [ ] `test_skip_rate_limit_for_callback_query()` - пропуск для callback
|
||||
- [ ] `test_handle_telegram_retry_after()` - обработка retry after
|
||||
- [ ] `test_rate_limit_success()` - успешный rate limiting
|
||||
|
||||
### Инфраструктурные сервисы
|
||||
|
||||
#### `test_database.py`
|
||||
- [ ] `test_database_service_initialization()` - инициализация
|
||||
- [ ] `test_connect_to_database_success()` - подключение
|
||||
- [ ] `test_create_tables_success()` - создание таблиц
|
||||
- [ ] `test_connection_pool_management()` - управление пулом
|
||||
|
||||
#### `test_metrics.py`
|
||||
- [ ] `test_metrics_service_initialization()` - инициализация
|
||||
- [ ] `test_create_counter_metric()` - создание счетчика
|
||||
- [ ] `test_increment_counter()` - инкремент счетчика
|
||||
- [ ] `test_export_metrics_prometheus_format()` - экспорт метрик
|
||||
|
||||
### Утилиты
|
||||
|
||||
#### `test_utils.py`
|
||||
- [ ] `test_format_user_data_basic()` - форматирование данных пользователя
|
||||
- [ ] `test_is_valid_question_text_valid()` - валидация текста вопроса
|
||||
- [ ] `test_escape_html_basic()` - HTML экранирование
|
||||
- [ ] `test_generate_profile_link()` - генерация ссылки
|
||||
|
||||
### Конфигурация
|
||||
|
||||
#### `test_config.py`
|
||||
- [ ] `test_config_initialization()` - инициализация
|
||||
- [ ] `test_load_config_from_env()` - загрузка из .env
|
||||
- [ ] `test_config_validation_telegram_token()` - валидация токена
|
||||
- [ ] `test_config_error_handling()` - обработка ошибок
|
||||
|
||||
#### `test_constants.py`
|
||||
- [ ] `test_question_constants()` - константы вопросов
|
||||
- [ ] `test_answer_constants()` - константы ответов
|
||||
- [ ] `test_validation_constants()` - константы валидации
|
||||
- [ ] `test_constants_consistency()` - консистентность
|
||||
|
||||
### Интеграционные тесты
|
||||
|
||||
#### `test_database_integration.py`
|
||||
- [ ] `test_full_user_lifecycle()` - полный жизненный цикл пользователя
|
||||
- [ ] `test_full_question_lifecycle()` - полный жизненный цикл вопроса
|
||||
- [ ] `test_database_transactions()` - транзакции
|
||||
- [ ] `test_database_performance()` - производительность
|
||||
|
||||
#### `test_bot_integration.py`
|
||||
- [ ] `test_bot_initialization()` - инициализация бота
|
||||
- [ ] `test_full_start_command_flow()` - полный поток /start
|
||||
- [ ] `test_full_question_flow()` - полный поток вопроса
|
||||
- [ ] `test_middleware_chain()` - цепочка middleware
|
||||
|
||||
## 🎯 Критерии готовности
|
||||
|
||||
### Unit тесты
|
||||
- [ ] Все тесты проходят
|
||||
- [ ] Покрытие кода 80%+
|
||||
- [ ] Все граничные случаи покрыты
|
||||
- [ ] Обработка ошибок протестирована
|
||||
- [ ] Производительность приемлема
|
||||
|
||||
### Интеграционные тесты
|
||||
- [ ] Все сценарии работают
|
||||
- [ ] Интеграция компонентов протестирована
|
||||
- [ ] End-to-end тесты проходят
|
||||
- [ ] Производительность приемлема
|
||||
|
||||
### Общие критерии
|
||||
- [ ] Документация обновлена
|
||||
- [ ] Примеры тестов созданы
|
||||
- [ ] CI/CD настроен
|
||||
- [ ] Отчеты о покрытии генерируются
|
||||
|
||||
## 🚀 Следующие шаги
|
||||
|
||||
1. **Начать с моделей данных** - это основа для всех остальных тестов
|
||||
2. **Реализовать валидацию** - критически важно для безопасности
|
||||
3. **Добавить авторизацию** - важно для контроля доступа
|
||||
4. **Покрыть CRUD операции** - основа работы с данными
|
||||
5. **Тестировать бизнес-сервисы** - основная логика приложения
|
||||
6. **Добавить обработчики** - пользовательский интерфейс
|
||||
7. **Покрыть middleware** - инфраструктурные компоненты
|
||||
8. **Добавить интеграционные тесты** - полные сценарии
|
||||
|
||||
## 📊 Метрики успеха
|
||||
|
||||
- **Покрытие кода**: 80%+
|
||||
- **Время выполнения тестов**: < 30 секунд
|
||||
- **Количество тестов**: 200+ unit тестов, 20+ интеграционных
|
||||
- **Прохождение тестов**: 100%
|
||||
- **Документация**: Полная и актуальная
|
||||
Reference in New Issue
Block a user