fix 5.4: return structured types from get_issue/get_pull_request/create_pull_request/update_pull_request

- IssueTools.get_issue now returns IssueModel instead of JSON string
- PRTools.get_pull_request now returns PullRequestModel instead of JSON string
- PRTools.create_pull_request now returns PullRequestModel instead of JSON string
- PRTools.update_pull_request now returns PullRequestModel instead of JSON string
- All methods have proper return type hints and raise exceptions on error
- Updated tests to verify model objects are returned directly
- Marked issue 5.4 as resolved in bad_code.md
This commit is contained in:
meeks
2026-07-19 11:49:54 +02:00
parent e91780169e
commit 21eefd9824
5 changed files with 458 additions and 35 deletions
+17 -11
View File
@@ -20,11 +20,11 @@ def test_get_pull_request_success() -> None:
mock_client.prs.get_pull_request.return_value = pr
pr_tools: PRTools = PRTools(mock_client)
res: str = pr_tools.get_pull_request("owner", "repo", 1)
res: PullRequestModel = pr_tools.get_pull_request("owner", "repo", 1)
data: dict[str, Any] = json.loads(res)
assert data["number"] == 1
assert data["title"] == "Test PR"
assert isinstance(res, PullRequestModel)
assert res.number == 1
assert res.title == "Test PR"
mock_client.prs.get_pull_request.assert_called_once_with("owner", "repo", 1)
@@ -33,8 +33,11 @@ def test_get_pull_request_failure() -> None:
mock_client.prs.get_pull_request.side_effect = Exception("API Error")
pr_tools: PRTools = PRTools(mock_client)
res: str = pr_tools.get_pull_request("owner", "repo", 1)
assert "Error getting pull request: API Error" in res
try:
pr_tools.get_pull_request("owner", "repo", 1)
assert False, "Expected Exception"
except Exception as e:
assert str(e) == "API Error"
def test_close_pull_request_success() -> None:
@@ -139,11 +142,11 @@ def test_create_pull_request_success() -> None:
mock_client.prs.create_pr_via_tea.return_value = pr
pr_tools: PRTools = PRTools(mock_client)
res: str = pr_tools.create_pull_request(
res: PullRequestModel = pr_tools.create_pull_request(
"owner", "repo", "head", "base", "Title", "Desc"
)
data: dict[str, Any] = json.loads(res)
assert data["number"] == 2
assert isinstance(res, PullRequestModel)
assert res.number == 2
mock_client.prs.create_pr_via_tea.assert_called_once_with(
"owner", "repo", "Title", "Desc", "head", "base"
)
@@ -154,8 +157,11 @@ def test_create_pull_request_failure() -> None:
mock_client.prs.create_pr_via_tea.side_effect = Exception("API Error")
pr_tools: PRTools = PRTools(mock_client)
res: str = pr_tools.create_pull_request("owner", "repo", "head", "base", "Title")
assert "Error creating PR: API Error" in res
try:
pr_tools.create_pull_request("owner", "repo", "head", "base", "Title")
assert False, "Expected Exception"
except Exception as e:
assert str(e) == "API Error"
def test_add_label_to_pr_success() -> None: