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:
2025-09-02 22:20:34 +03:00
parent 1c6a37bc12
commit 1ab427a7ba
12 changed files with 340 additions and 232 deletions

View File

@@ -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 ошибок.