# Тесты для 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 ошибок.