214 lines
8.1 KiB
Python
214 lines
8.1 KiB
Python
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
|