Files
telegram-helper-bot/tests/README_post_repository_tests.md
Andrey 1c6a37bc12 Enhance bot functionality and refactor database interactions
- Added `ca-certificates` installation to Dockerfile for improved network security.
- Updated health check command in Dockerfile to include better timeout handling.
- Refactored `run_helper.py` to implement proper signal handling and logging during shutdown.
- Transitioned database operations to an asynchronous model in `async_db.py`, improving performance and responsiveness.
- Updated database schema to support new foreign key relationships and optimized indexing for better query performance.
- Enhanced various bot handlers to utilize async database methods, improving overall efficiency and user experience.
- Removed obsolete database and fix scripts to streamline the project structure.
2025-09-02 18:22:02 +03:00

143 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Тесты для 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 ошибок.