test(collector): add filtering optimization and edge case tests
- test_filtered_repos_have_no_api_calls: prouve que get_latest_release et get_milestones ne sont pas appelés pour les repos exclus par le filtre include - test_collect_all_include_empty_list: documente le contrat implicite où include=[] est équivalent à include=None (tous les repos inclus) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
6
docs/technical/findings-history.md
Normal file
6
docs/technical/findings-history.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# Findings History
|
||||
|
||||
| Version | Severity | Category | File | Pattern | Resolution |
|
||||
|---------|----------|----------|------|---------|------------|
|
||||
| v1.1.0 | minor | testing | tests/test_collector.py | Pas de test prouvant que les repos filtrés n'entraînent pas d'appels API inutiles (get_latest_release / get_milestones) | Ajout de `test_filtered_repos_have_no_api_calls` : vérifie que `assert_called_once_with` cible uniquement le repo qui a passé le filtre |
|
||||
| v1.1.0 | minor | testing | tests/test_collector.py | Pas de test pour `include=[]` (liste vide) — contrat implicite `if include:` traite `[]` comme `None` | Ajout de `test_collect_all_include_empty_list` : compare le résultat de `collect_all(client, include=[])` avec `collect_all(client)` |
|
||||
@@ -206,3 +206,26 @@ class TestCollectAllFiltering:
|
||||
result = collect_all(client, exclude=["alpha", "beta"])
|
||||
|
||||
assert result == []
|
||||
|
||||
def test_filtered_repos_have_no_api_calls(self):
|
||||
"""Repos excluded by include filter must not trigger enrichment API calls."""
|
||||
client = self._setup_client(["gitea-dashboard", "infra-core", "notes"])
|
||||
|
||||
collect_all(client, include=["dashboard"])
|
||||
|
||||
# Only gitea-dashboard passed the filter — enrichment calls must target it only
|
||||
client.get_latest_release.assert_called_once_with("admin", "gitea-dashboard")
|
||||
client.get_milestones.assert_called_once_with("admin", "gitea-dashboard")
|
||||
|
||||
def test_collect_all_include_empty_list(self):
|
||||
"""include=[] behaves like include=None — all repos are returned.
|
||||
|
||||
The contract: an empty list is falsy, so `if include:` is False, meaning
|
||||
no inclusion filter is applied and every repo is included before exclude.
|
||||
"""
|
||||
client = self._setup_client(["alpha", "beta", "gamma"])
|
||||
|
||||
result_none = collect_all(client)
|
||||
result_empty = collect_all(client, include=[])
|
||||
|
||||
assert [r.name for r in result_empty] == [r.name for r in result_none]
|
||||
|
||||
Reference in New Issue
Block a user