Enhance admin handlers with improved logging and error handling
- Added detailed logging for user ban processing in `process_ban_target` and `process_ban_reason` functions, including user data and error messages. - Improved error handling for user input validation and database interactions. - Updated `return_to_admin_menu` function to log user return actions. - Enhanced media group handling in `PostPublishService` with better error logging and author ID retrieval. - Added new button options in voice handlers and updated keyboard layouts for improved user interaction. - Refactored album middleware to better handle media group messages and added documentation for clarity.
This commit is contained in:
@@ -1,142 +0,0 @@
|
||||
# Тесты для PostRepository
|
||||
|
||||
Этот документ описывает тесты для `PostRepository` - репозитория для работы с постами из Telegram.
|
||||
|
||||
## Структура тестов
|
||||
|
||||
### 1. `test_post_repository.py` - Unit тесты
|
||||
Содержит модульные тесты с моками для всех методов `PostRepository`:
|
||||
|
||||
- **`test_create_tables`** - тест создания таблиц БД
|
||||
- **`test_add_post_with_date`** - тест добавления поста с датой
|
||||
- **`test_add_post_without_date`** - тест добавления поста без даты (автогенерация)
|
||||
- **`test_add_post_logs_correctly`** - тест логирования при добавлении поста
|
||||
- **`test_update_helper_message`** - тест обновления helper сообщения
|
||||
- **`test_add_post_content_success`** - тест успешного добавления контента
|
||||
- **`test_add_post_content_exception`** - тест обработки исключений
|
||||
- **`test_get_post_content_by_helper_id`** - тест получения контента по helper ID
|
||||
- **`test_get_post_text_by_helper_id_found`** - тест получения текста поста (найден)
|
||||
- **`test_get_post_text_by_helper_id_not_found`** - тест получения текста поста (не найден)
|
||||
- **`test_get_post_ids_by_helper_id`** - тест получения ID сообщений
|
||||
- **`test_get_author_id_by_message_id_found`** - тест получения ID автора по message ID (найден)
|
||||
- **`test_get_author_id_by_message_id_not_found`** - тест получения ID автора по message ID (не найден)
|
||||
- **`test_get_author_id_by_helper_message_id_found`** - тест получения ID автора по helper message ID (найден)
|
||||
- **`test_get_author_id_by_helper_message_id_not_found`** - тест получения ID автора по helper message ID (не найден)
|
||||
- **`test_create_tables_logs_success`** - тест логирования успешного создания таблиц
|
||||
|
||||
### 2. `test_post_repository_integration.py` - Интеграционные тесты
|
||||
Содержит тесты с реальной базой данных SQLite:
|
||||
|
||||
- **`test_create_tables_integration`** - интеграционный тест создания таблиц
|
||||
- **`test_add_post_integration`** - интеграционный тест добавления поста
|
||||
- **`test_add_post_without_date_integration`** - интеграционный тест добавления поста без даты
|
||||
- **`test_update_helper_message_integration`** - интеграционный тест обновления helper сообщения
|
||||
- **`test_add_post_content_integration`** - интеграционный тест добавления контента поста
|
||||
- **`test_add_post_content_with_helper_message_integration`** - интеграционный тест добавления контента с helper сообщением
|
||||
- **`test_get_post_text_by_helper_id_integration`** - интеграционный тест получения текста поста
|
||||
- **`test_get_post_text_by_helper_id_not_found_integration`** - интеграционный тест получения текста несуществующего поста
|
||||
- **`test_get_post_ids_by_helper_id_integration`** - интеграционный тест получения ID сообщений
|
||||
- **`test_get_author_id_by_message_id_integration`** - интеграционный тест получения ID автора по message ID
|
||||
- **`test_get_author_id_by_message_id_not_found_integration`** - интеграционный тест получения ID автора несуществующего поста
|
||||
- **`test_get_author_id_by_helper_message_id_integration`** - интеграционный тест получения ID автора по helper message ID
|
||||
- **`test_get_author_id_by_helper_message_id_not_found_integration`** - интеграционный тест получения ID автора несуществующего helper сообщения
|
||||
- **`test_multiple_posts_integration`** - интеграционный тест работы с несколькими постами
|
||||
- **`test_post_content_relationships_integration`** - интеграционный тест связей между постами и контентом
|
||||
|
||||
### 3. `conftest_post_repository.py` - Общие фикстуры
|
||||
Содержит фикстуры для всех тестов:
|
||||
|
||||
- **`mock_post_repository`** - мок PostRepository для unit тестов
|
||||
- **`sample_telegram_post`** - тестовый объект TelegramPost
|
||||
- **`sample_telegram_post_with_helper`** - тестовый объект TelegramPost с helper сообщением
|
||||
- **`sample_telegram_post_no_date`** - тестовый объект TelegramPost без даты
|
||||
- **`sample_post_content`** - тестовый объект PostContent
|
||||
- **`sample_message_content_link`** - тестовый объект MessageContentLink
|
||||
- **`mock_db_execute_query`** - мок для _execute_query
|
||||
- **`mock_db_execute_query_with_result`** - мок для _execute_query_with_result
|
||||
- **`mock_logger`** - мок для logger
|
||||
- **`temp_db_file`** - временный файл БД для интеграционных тестов
|
||||
- **`real_post_repository`** - реальный PostRepository с временной БД
|
||||
- **`sample_posts_batch`** - набор тестовых постов для batch тестов
|
||||
- **`sample_content_batch`** - набор тестового контента для batch тестов
|
||||
- **`mock_database_connection`** - мок для DatabaseConnection
|
||||
- **`sample_helper_message_ids`** - набор тестовых helper message ID
|
||||
- **`sample_message_ids`** - набор тестовых message ID
|
||||
- **`sample_author_ids`** - набор тестовых author ID
|
||||
- **`mock_sql_queries`** - мок для SQL запросов
|
||||
|
||||
## Запуск тестов
|
||||
|
||||
### Запуск всех тестов для PostRepository:
|
||||
```bash
|
||||
pytest tests/test_post_repository.py -v
|
||||
pytest tests/test_post_repository_integration.py -v
|
||||
```
|
||||
|
||||
### Запуск с покрытием:
|
||||
```bash
|
||||
pytest tests/test_post_repository.py --cov=database.repositories.post_repository --cov-report=html
|
||||
pytest tests/test_post_repository_integration.py --cov=database.repositories.post_repository --cov-report=html
|
||||
```
|
||||
|
||||
### Запуск конкретного теста:
|
||||
```bash
|
||||
pytest tests/test_post_repository.py::TestPostRepository::test_add_post_with_date -v
|
||||
```
|
||||
|
||||
## Требования
|
||||
|
||||
- `pytest` - фреймворк для тестирования
|
||||
- `pytest-asyncio` - поддержка асинхронных тестов
|
||||
- `pytest-cov` - для измерения покрытия кода (опционально)
|
||||
|
||||
## Особенности тестирования
|
||||
|
||||
### Unit тесты
|
||||
- Используют моки для изоляции тестируемого кода
|
||||
- Проверяют логику методов без зависимости от БД
|
||||
- Быстрые и надежные
|
||||
|
||||
### Интеграционные тесты
|
||||
- Используют реальную SQLite БД в памяти
|
||||
- Проверяют взаимодействие с БД
|
||||
- Создают временные файлы БД для каждого теста
|
||||
- Автоматически очищают ресурсы после тестов
|
||||
|
||||
### Фикстуры
|
||||
- Переиспользуемые объекты для тестов
|
||||
- Автоматическая очистка ресурсов
|
||||
- Разделение на unit и integration фикстуры
|
||||
|
||||
## Покрытие тестами
|
||||
|
||||
Тесты покрывают все публичные методы `PostRepository`:
|
||||
|
||||
- ✅ `create_tables()` - создание таблиц БД
|
||||
- ✅ `add_post()` - добавление поста
|
||||
- ✅ `update_helper_message()` - обновление helper сообщения
|
||||
- ✅ `add_post_content()` - добавление контента поста
|
||||
- ✅ `get_post_content_by_helper_id()` - получение контента по helper ID
|
||||
- ✅ `get_post_text_by_helper_id()` - получение текста поста по helper ID
|
||||
- ✅ `get_post_ids_by_helper_id()` - получение ID сообщений по helper ID
|
||||
- ✅ `get_author_id_by_message_id()` - получение ID автора по message ID
|
||||
- ✅ `get_author_id_by_helper_message_id()` - получение ID автора по helper message ID
|
||||
|
||||
## Добавление новых тестов
|
||||
|
||||
При добавлении новых методов в `PostRepository`:
|
||||
|
||||
1. Добавьте unit тест в `test_post_repository.py`
|
||||
2. Добавьте интеграционный тест в `test_post_repository_integration.py`
|
||||
3. Добавьте необходимые фикстуры в `conftest_post_repository.py`
|
||||
4. Обновите этот README файл
|
||||
|
||||
## Отладка тестов
|
||||
|
||||
Для отладки тестов используйте:
|
||||
|
||||
```bash
|
||||
pytest tests/test_post_repository.py -v -s --tb=long
|
||||
```
|
||||
|
||||
Флаг `-s` позволяет видеть print statements, `--tb=long` показывает полный traceback ошибок.
|
||||
Reference in New Issue
Block a user