From bb3bc761e3b804ad3fa69f307a94c19c7f5f2ceb Mon Sep 17 00:00:00 2001 From: sylvain Date: Wed, 11 Mar 2026 04:40:40 +0100 Subject: [PATCH] test(collector): add filtering optimization and edge case tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- docs/technical/findings-history.md | 6 ++++++ tests/test_collector.py | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 docs/technical/findings-history.md diff --git a/docs/technical/findings-history.md b/docs/technical/findings-history.md new file mode 100644 index 0000000..d8924d6 --- /dev/null +++ b/docs/technical/findings-history.md @@ -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)` | diff --git a/tests/test_collector.py b/tests/test_collector.py index 40773be..379afa6 100644 --- a/tests/test_collector.py +++ b/tests/test_collector.py @@ -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]