From d8f22486003c7bb7ed6f1e7af61f5d3de0f2b890 Mon Sep 17 00:00:00 2001 From: timmy Date: Thu, 6 Aug 2026 03:47:48 +0000 Subject: [PATCH] fix: normalize null Gitea collection payloads (#69) --- src/main.py | 6 +++--- tests/test_context_timeout.py | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main.py b/src/main.py index 001422a..2c0e75c 100644 --- a/src/main.py +++ b/src/main.py @@ -86,17 +86,17 @@ async def context() -> JSONResponse: user_model = User(id=user_data["id"], login=user_data["login"], full_name=user_data.get("full_name", ""), email=user_data.get("email", "")) repo_models = [ Repo(id=r["id"], name=r["name"], full_name=r["full_name"], description=r.get("description") or "", url=r["html_url"], updated_at=r.get("updated_at", "")) - for r in repo_data[:50] + for r in (repo_data or [])[:50] if isinstance(r, dict) ] issue_models = [ Issue(id=i["id"], number=i["number"], title=i["title"], state=i["state"], labels=[l.get("name", "") for l in (i.get("labels") or [])], assignees=[a.get("login", "") for a in (i.get("assignees") or [])], url=i["html_url"]) - for i in issues_data[:50] + for i in (issues_data or [])[:50] if isinstance(i, dict) ] pr_models = [ PullRequest(id=p["id"], number=p["number"], title=p["title"], state=p["state"], user=(p.get("user") or {}).get("login", ""), url=p["html_url"]) - for p in prs_data[:50] + for p in (prs_data or [])[:50] if isinstance(p, dict) ] ctx = compute(user_model, repo_models, issue_models, pr_models) diff --git a/tests/test_context_timeout.py b/tests/test_context_timeout.py index d17eeb9..6ef3ada 100644 --- a/tests/test_context_timeout.py +++ b/tests/test_context_timeout.py @@ -119,4 +119,25 @@ async def test_context_normalizes_nullable_pull_request_author(monkeypatch): response = await main.context() pull_request = json.loads(response.body)["pull_requests"][0] - assert pull_request["user"] == "" \ No newline at end of file + assert pull_request["user"] == "" + + +@pytest.mark.anyio +async def test_context_normalizes_null_collection_payloads(monkeypatch): + async def user(): + return {"id": 1, "login": "timmy"} + + async def null_collection(): + return None + + monkeypatch.setattr(main, "current_user", user) + monkeypatch.setattr(main, "repos", null_collection) + monkeypatch.setattr(main, "issues", null_collection) + monkeypatch.setattr(main, "pull_requests", null_collection) + + response = await main.context() + context = json.loads(response.body) + + assert context["repos"] == [] + assert context["issues"] == [] + assert context["pull_requests"] == []