diff --git a/src/main.py b/src/main.py index 7f169f9..5c9c51b 100644 --- a/src/main.py +++ b/src/main.py @@ -95,7 +95,7 @@ async def context() -> JSONResponse: }, headers={ "Retry-After": str(max(1, math.ceil(CONTEXT_TIMEOUT_SECONDS))) } if isinstance(e, TimeoutError) else None) - user_model = User(id=user_data["id"], login=user_data["login"], full_name=user_data.get("full_name", ""), email=user_data.get("email", "")) + user_model = User(id=user_data["id"], login=user_data["login"], full_name=user_data.get("full_name") or "", email=user_data.get("email") or "") 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 or [])[:50] diff --git a/tests/test_context_timeout.py b/tests/test_context_timeout.py index 6ef3ada..eed6c71 100644 --- a/tests/test_context_timeout.py +++ b/tests/test_context_timeout.py @@ -141,3 +141,29 @@ async def test_context_normalizes_null_collection_payloads(monkeypatch): assert context["repos"] == [] assert context["issues"] == [] assert context["pull_requests"] == [] + + +@pytest.mark.anyio +async def test_context_normalizes_nullable_user_profile_fields(monkeypatch): + async def user(): + return { + "id": 1, + "login": "timmy", + "full_name": None, + "email": None, + } + + async def empty_collection(): + return [] + + monkeypatch.setattr(main, "current_user", user) + monkeypatch.setattr(main, "repos", empty_collection) + monkeypatch.setattr(main, "issues", empty_collection) + monkeypatch.setattr(main, "pull_requests", empty_collection) + + response = await main.context() + context = json.loads(response.body) + + assert response.status_code == 200 + assert context["user"]["full_name"] == "" + assert context["user"]["email"] == ""