Задача
Написать тесты для модуля tools/heartbeat/. Сейчас coverage = 0%.
Файлы для тестирования
tools/heartbeat/config.py — проверить что TOPICS и ALL_KEYWORDS корректны
tools/heartbeat/sources.py — тесты для fetch_hn_stories(), fetch_github_trending(), fetch_reddit_posts(), _matches_keywords()
tools/heartbeat/formatter.py — тест format_raw_digest() с mock-данными
tools/heartbeat/analyzer.py — тест read_project_context()
tools/heartbeat/main.py — тест CLI аргументов
Что нужно сделать
- Создать
tools/heartbeat/tests/ директорию
- Добавить
pytest в dev-зависимости: uv add --dev pytest
- Написать тесты с mock для HTTP-вызовов (не делать реальные запросы к API)
- Использовать
unittest.mock.patch для мока _http_get_json
- Целевой coverage: 80%+
Acceptance Criteria
Контекст
- Python 3.12+, uv, beartype
- pyproject.toml:
tools/heartbeat/pyproject.toml
- Dataclass-ы: HNStory, GitHubRepo, RedditPost в sources.py
Задача
Написать тесты для модуля
tools/heartbeat/. Сейчас coverage = 0%.Файлы для тестирования
tools/heartbeat/config.py— проверить что TOPICS и ALL_KEYWORDS корректныtools/heartbeat/sources.py— тесты для fetch_hn_stories(), fetch_github_trending(), fetch_reddit_posts(), _matches_keywords()tools/heartbeat/formatter.py— тест format_raw_digest() с mock-даннымиtools/heartbeat/analyzer.py— тест read_project_context()tools/heartbeat/main.py— тест CLI аргументовЧто нужно сделать
tools/heartbeat/tests/директориюpytestв dev-зависимости:uv add --dev pytestunittest.mock.patchдля мока_http_get_jsonAcceptance Criteria
tools/heartbeat/tests/test_sources.py— тесты fetch функций с мокамиtools/heartbeat/tests/test_formatter.py— тест форматированияtools/heartbeat/tests/test_config.py— тест конфигурацииtools/heartbeat/tests/__init__.py— пустойcd tools/heartbeat && uv run pytestfrom __future__ import annotationsи@beartypeгде применимоКонтекст
tools/heartbeat/pyproject.toml