import json from typing import Any from unittest.mock import MagicMock from gitea.client import GiteaClient from gitea.models import IssueModel, CommentModel, LabelModel, RepositoryModel from gitea.tools.issue_tools import IssueTools def test_get_issue_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) issue: IssueModel = IssueModel(number=1, title="Test Issue", state="open") mock_client.get_issue.return_value = issue issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.get_issue("owner", "repo", 1) data: dict[str, Any] = json.loads(res) assert data["number"] == 1 assert data["title"] == "Test Issue" mock_client.get_issue.assert_called_once_with("owner", "repo", 1) def test_get_issue_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.get_issue.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.get_issue("owner", "repo", 1) assert "Error getting issue: API Error" in res def test_close_issue_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.close_issue.return_value = IssueModel(number=1, state="closed") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.close_issue("owner", "repo", 1) assert res == "Issue #1 closed successfully." mock_client.close_issue.assert_called_once_with("owner", "repo", 1) def test_close_issue_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.close_issue.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.close_issue("owner", "repo", 1) assert "Error closing issue: API Error" in res def test_get_issue_comments_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) comment: CommentModel = CommentModel(id=123, body="Comment body") mock_client.get_issue_comments.return_value = [comment] issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.get_issue_comments("owner", "repo", 1) data: list[dict[str, Any]] = json.loads(res) assert len(data) == 1 assert data[0]["body"] == "Comment body" def test_get_issue_comments_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.get_issue_comments.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.get_issue_comments("owner", "repo", 1) assert "Error getting issue comments: API Error" in res def test_list_assigned_issues_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) repo: RepositoryModel = RepositoryModel(name="repo1", owner="owner1") issue: IssueModel = IssueModel(number=1, title="Test Issue") mock_client.list_all_user_repos.return_value = [repo] mock_client.list_assigned_issues.return_value = [issue] issue_tools: IssueTools = IssueTools(mock_client) res: list[dict[str, Any]] = issue_tools.list_assigned_issues() assert len(res) == 1 assert res[0]["number"] == 1 mock_client.list_all_user_repos.assert_called_once() mock_client.list_assigned_issues.assert_called_once_with("owner1", "repo1") def test_list_assigned_issues_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.list_all_user_repos.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: list[dict[str, Any]] = issue_tools.list_assigned_issues() assert res == [] def test_list_issues_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) issue: IssueModel = IssueModel(number=1, title="Test Issue") mock_client.list_repo_issues.return_value = [issue] issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.list_issues("owner", "repo") assert "#1: Test Issue" in res def test_list_issues_empty() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.list_repo_issues.return_value = [] issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.list_issues("owner", "repo") assert res == "No issues in owner/repo." def test_list_issues_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.list_repo_issues.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.list_issues("owner", "repo") assert "Error listing issues: API Error" in res def test_create_issue_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) issue: IssueModel = IssueModel(number=2) mock_client.create_issue.return_value = issue issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.create_issue("owner", "repo", "Title", "Body", ["label1"], ["assignee1"]) assert res == "Issue #2 created successfully in owner/repo." mock_client.create_issue.assert_called_once_with("owner", "repo", "Title", "Body", ["label1"], ["assignee1"]) def test_create_issue_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.create_issue.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.create_issue("owner", "repo", "Title", "Body") assert "Error creating issue: API Error" in res def test_add_label_to_issue_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.add_label.return_value = LabelModel(name="bug") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.add_label_to_issue("owner", "repo", 1, "bug") assert res == "Label 'bug' added to issue #1." def test_add_label_to_issue_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.add_label.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.add_label_to_issue("owner", "repo", 1, "bug") assert "Error adding label to issue #1: API Error" in res def test_add_comment_to_issue_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.add_comment.return_value = CommentModel(id=1) issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.add_comment_to_issue("owner", "repo", 1, "body") assert res == "Comment added to issue #1." def test_add_comment_to_issue_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.add_comment.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.add_comment_to_issue("owner", "repo", 1, "body") assert "Error adding comment to issue #1: API Error" in res def test_add_comment_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.add_comment.return_value = CommentModel(id=1) issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.add_comment("owner", "repo", 1, "body") assert res == "Comment added to #1." def test_add_comment_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.add_comment.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.add_comment("owner", "repo", 1, "body") assert "Error adding comment: API Error" in res def test_add_label_success() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.add_label.return_value = LabelModel(name="bug") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.add_label("owner", "repo", 1, "bug") assert res == "Label 'bug' added to #1." def test_add_label_failure() -> None: mock_client: MagicMock = MagicMock(spec=GiteaClient) mock_client.add_label.side_effect = Exception("API Error") issue_tools: IssueTools = IssueTools(mock_client) res: str = issue_tools.add_label("owner", "repo", 1, "bug") assert "Error adding label: API Error" in res