Skip malformed nested Gitea issue metadata entries #86
18
src/main.py
18
src/main.py
|
|
@ -107,7 +107,23 @@ async def context() -> JSONResponse:
|
||||||
and all(field in r for field in ("id", "name", "full_name", "html_url"))
|
and all(field in r for field in ("id", "name", "full_name", "html_url"))
|
||||||
]
|
]
|
||||||
issue_models = [
|
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"])
|
Issue(
|
||||||
|
id=i["id"],
|
||||||
|
number=i["number"],
|
||||||
|
title=i["title"],
|
||||||
|
state=i["state"],
|
||||||
|
labels=[
|
||||||
|
label.get("name", "")
|
||||||
|
for label in (i.get("labels") or [])
|
||||||
|
if isinstance(label, dict)
|
||||||
|
],
|
||||||
|
assignees=[
|
||||||
|
assignee.get("login", "")
|
||||||
|
for assignee in (i.get("assignees") or [])
|
||||||
|
if isinstance(assignee, dict)
|
||||||
|
],
|
||||||
|
url=i["html_url"],
|
||||||
|
)
|
||||||
for i in (issues_data or [])[:50]
|
for i in (issues_data or [])[:50]
|
||||||
if isinstance(i, dict)
|
if isinstance(i, dict)
|
||||||
and all(
|
and all(
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,37 @@ async def test_context_normalizes_nullable_issue_collections(monkeypatch):
|
||||||
assert issue["assignees"] == []
|
assert issue["assignees"] == []
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.anyio
|
||||||
|
async def test_context_skips_malformed_nested_issue_metadata(monkeypatch):
|
||||||
|
async def user():
|
||||||
|
return {"id": 1, "login": "timmy"}
|
||||||
|
|
||||||
|
async def empty_collection():
|
||||||
|
return []
|
||||||
|
|
||||||
|
async def issue_collection():
|
||||||
|
return [{
|
||||||
|
"id": 85,
|
||||||
|
"number": 85,
|
||||||
|
"title": "Malformed nested metadata",
|
||||||
|
"state": "open",
|
||||||
|
"labels": [None, {"name": "bug"}, "invalid"],
|
||||||
|
"assignees": [None, {"login": "timmy"}, "invalid"],
|
||||||
|
"html_url": "https://forge.example/issues/85",
|
||||||
|
}]
|
||||||
|
|
||||||
|
monkeypatch.setattr(main, "current_user", user)
|
||||||
|
monkeypatch.setattr(main, "repos", empty_collection)
|
||||||
|
monkeypatch.setattr(main, "issues", issue_collection)
|
||||||
|
monkeypatch.setattr(main, "pull_requests", empty_collection)
|
||||||
|
|
||||||
|
response = await main.context()
|
||||||
|
issue = json.loads(response.body)["issues"][0]
|
||||||
|
|
||||||
|
assert issue["labels"] == ["bug"]
|
||||||
|
assert issue["assignees"] == ["timmy"]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.anyio
|
@pytest.mark.anyio
|
||||||
async def test_context_normalizes_nullable_repository_description(monkeypatch):
|
async def test_context_normalizes_nullable_repository_description(monkeypatch):
|
||||||
async def user():
|
async def user():
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user