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:
sylvain
2026-03-11 04:40:40 +01:00
parent 1bc3b2fd36
commit bb3bc761e3
2 changed files with 29 additions and 0 deletions

View 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)` |

View File

@@ -206,3 +206,26 @@ class TestCollectAllFiltering:
result = collect_all(client, exclude=["alpha", "beta"]) result = collect_all(client, exclude=["alpha", "beta"])
assert result == [] 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]