# tests/test_board_select.py from __future__ import annotations import unittest from daily.board_select import board_select def _gh(repo: str) -> dict: return {"repo": repo, "description": repo} class BoardSelectTests(unittest.TestCase): def test_filters_recent_and_keeps_order(self): pool = [_gh(f"o/r{i}") for i in range(20)] recent = {"o/r0", "o/r1", "o/r2"} out = board_select( board="github_trending", items=pool, recent_keys=recent, limit=5, pool_size=20, kind="github", ) keys = [x["repo"] for x in out] self.assertEqual(keys, ["o/r3", "o/r4", "o/r5", "o/r6", "o/r7"]) def test_deep_pool_fills_after_filter(self): pool = [_gh(f"o/r{i}") for i in range(8)] recent = {f"o/r{i}" for i in range(6)} # 前 6 全封 out = board_select( board="github_emerging", items=pool, recent_keys=recent, limit=5, pool_size=8, kind="github", ) self.assertEqual([x["repo"] for x in out], ["o/r6", "o/r7"]) # 短榜 def test_skill_uses_skill_id(self): items = [ {"id": "a/b/s1", "source": "a/b", "title": "s1", "installs": 10}, {"id": "c/d/s2", "source": "c/d", "title": "s2", "installs": 9}, ] out = board_select( board="skills_trending", items=items, recent_keys={"a/b/s1"}, limit=10, pool_size=50, kind="skill", ) self.assertEqual([x["id"] for x in out], ["c/d/s2"]) if __name__ == "__main__": unittest.main()