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

9.2 KiB
Raw Blame History

Тесты для 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:

pytest tests/test_post_repository.py -v
pytest tests/test_post_repository_integration.py -v

Запуск с покрытием:

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

Запуск конкретного теста:

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 файл

Отладка тестов

Для отладки тестов используйте:

pytest tests/test_post_repository.py -v -s --tb=long

Флаг -s позволяет видеть print statements, --tb=long показывает полный traceback ошибок.