From 1714ff583732d0272851862507dd39b6fc3e25f0 Mon Sep 17 00:00:00 2001 From: Saagar Date: Sat, 13 Jun 2026 03:26:06 -0700 Subject: [PATCH] fix(models): default repo count fields to zero when API omits them --- src/models.py | 8 ++++---- tests/test_models.py | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/models.py b/src/models.py index 4429be9..d2e2f12 100644 --- a/src/models.py +++ b/src/models.py @@ -52,10 +52,10 @@ def from_api_response(cls, data: dict, languages: dict[str, int] | None = None) updated_at=_parse_dt(data["updated_at"]), # type: ignore[arg-type] pushed_at=_parse_dt(data.get("pushed_at")), default_branch=data["default_branch"], - stars=data["stargazers_count"], - forks=data["forks_count"], - open_issues=data["open_issues_count"], - size_kb=data["size"], + stars=data.get("stargazers_count", 0), + forks=data.get("forks_count", 0), + open_issues=data.get("open_issues_count", 0), + size_kb=data.get("size", 0), html_url=data["html_url"], clone_url=data["clone_url"], topics=data.get("topics", []), diff --git a/tests/test_models.py b/tests/test_models.py index ea28540..b7efa54 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -71,6 +71,28 @@ def test_nullable_pushed_at(self): meta = RepoMetadata.from_api_response(data) assert meta.pushed_at is None + def test_count_fields_default_to_zero_when_absent(self): + data = { + "name": "sparse", + "full_name": "user/sparse", + "description": None, + "language": None, + "private": False, + "fork": False, + "archived": False, + "created_at": "2024-01-01T00:00:00Z", + "updated_at": "2024-01-01T00:00:00Z", + "pushed_at": None, + "default_branch": "main", + "html_url": "", + "clone_url": "", + } + meta = RepoMetadata.from_api_response(data) + assert meta.stars == 0 + assert meta.forks == 0 + assert meta.open_issues == 0 + assert meta.size_kb == 0 + class TestAnalyzerResult: def test_to_dict(self):