"""Tests for GitHub Search pagination / deep pool.""" from __future__ import annotations import os import unittest from unittest.mock import MagicMock, patch class SearchGithubReposPaginationTests(unittest.TestCase): def test_search_paginates_beyond_first_page_of_30(self): from daily.github.search import search_github_repos def make_items(start: int, n: int) -> list[dict]: return [ { "full_name": f"org/repo{i}", "html_url": f"https://github.com/org/repo{i}", "description": f"desc {i}", "language": "Python", "stargazers_count": 1000 - i, "created_at": "2026-01-01T00:00:00Z", } for i in range(start, start + n) ] responses = [ MagicMock(status_code=200, json=lambda: {"items": make_items(1, 100)}), MagicMock(status_code=200, json=lambda: {"items": make_items(101, 50)}), ] client = MagicMock() client.__enter__.return_value = client client.__exit__.return_value = False client.get.side_effect = responses with patch.dict(os.environ, {"GITHUB_TOKEN": "test-token"}, clear=False): with patch("daily.github.search.httpx.Client", return_value=client): with patch("daily.github.search.github_token", return_value="test-token"): repos = search_github_repos("stars:>50", 120, require_token=True) self.assertEqual(len(repos), 120) self.assertEqual(repos[0]["repo"], "org/repo1") self.assertEqual(repos[119]["repo"], "org/repo120") self.assertEqual(client.get.call_count, 2) first_params = client.get.call_args_list[0].kwargs["params"] self.assertEqual(first_params["per_page"], 100) self.assertEqual(first_params["page"], 1) class GithubBoardDeepPoolTests(unittest.TestCase): def test_board_select_fills_ten_when_deep_pool_has_fresh_repos(self): from daily.board_select import board_select recent = {f"old/r{i}" for i in range(1, 33)} items = [{"repo": f"old/r{i}"} for i in range(1, 31)] + [ {"repo": f"fresh/r{i}"} for i in range(1, 20) ] selected = board_select( board="github_trending", items=items, recent_keys=recent, limit=10, pool_size=100, kind="github", ) self.assertEqual(len(selected), 10) self.assertTrue(all(r["repo"].startswith("fresh/") for r in selected)) if __name__ == "__main__": unittest.main()