From ea094d5731ae36db599b9a9803c41db303fc685a Mon Sep 17 00:00:00 2001 From: Dawid Rycerz Date: Tue, 15 Jul 2025 17:36:46 +0300 Subject: feat: Add updates issues and epics functinoality --- servers/gitlab_python/tests/test_server.py | 58 ++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'servers/gitlab_python/tests/test_server.py') diff --git a/servers/gitlab_python/tests/test_server.py b/servers/gitlab_python/tests/test_server.py index 7c0e69f..244cdd5 100644 --- a/servers/gitlab_python/tests/test_server.py +++ b/servers/gitlab_python/tests/test_server.py @@ -277,4 +277,62 @@ def test_create_epic_error(mock_gitlab, mock_settings): mock_gitlab.return_value.groups.get.side_effect = Exception("Group not found") result = server.create_epic("bad-group", "Epic Title", "Epic description") assert "error" in result + assert "Group not found" in result["error"] + +@patch("mcp_server_gitlab_python.server.get_gitlab_settings", return_value=("https://gitlab.com", "dummy-token")) +@patch("gitlab.Gitlab") +def test_update_issue_success(mock_gitlab, mock_settings): + """Test successful update of a GitLab issue.""" + server = GitLabPythonServer(working_directory="/tmp") + proj = MagicMock() + issue = MagicMock() + issue.web_url = "https://gitlab.com/project/-/issues/42" + proj.issues.get.return_value = issue + mock_gitlab.return_value.projects.get.return_value = proj + result = server.update_issue("project/path", 42, title="Updated Title", description="Updated desc", labels=["bug"]) + assert "url" in result + assert result["url"] == "https://gitlab.com/project/-/issues/42" + proj.issues.get.assert_called_once_with(42) + assert issue.title == "Updated Title" + assert issue.description == "Updated desc" + assert issue.labels == ["bug"] + issue.save.assert_called_once() + +@patch("mcp_server_gitlab_python.server.get_gitlab_settings", return_value=("https://gitlab.com", "dummy-token")) +@patch("gitlab.Gitlab") +def test_update_issue_error(mock_gitlab, mock_settings): + """Test error handling for update_issue when project or issue is not found.""" + server = GitLabPythonServer(working_directory="/tmp") + mock_gitlab.return_value.projects.get.side_effect = Exception("Project not found") + result = server.update_issue("bad-project", 42, title="Updated Title") + assert "error" in result + assert "Project not found" in result["error"] + +@patch("mcp_server_gitlab_python.server.get_gitlab_settings", return_value=("https://gitlab.com", "dummy-token")) +@patch("gitlab.Gitlab") +def test_update_epic_success(mock_gitlab, mock_settings): + """Test successful update of a GitLab epic.""" + server = GitLabPythonServer(working_directory="/tmp") + group = MagicMock() + epic = MagicMock() + epic.web_url = "https://gitlab.com/groups/test-group/-/epics/101" + group.epics.get.return_value = epic + mock_gitlab.return_value.groups.get.return_value = group + result = server.update_epic("test-group", 101, title="Updated Epic", description="Updated desc", labels=["feature"]) + assert "url" in result + assert result["url"] == "https://gitlab.com/groups/test-group/-/epics/101" + group.epics.get.assert_called_once_with(101) + assert epic.title == "Updated Epic" + assert epic.description == "Updated desc" + assert epic.labels == ["feature"] + epic.save.assert_called_once() + +@patch("mcp_server_gitlab_python.server.get_gitlab_settings", return_value=("https://gitlab.com", "dummy-token")) +@patch("gitlab.Gitlab") +def test_update_epic_error(mock_gitlab, mock_settings): + """Test error handling for update_epic when group or epic is not found.""" + server = GitLabPythonServer(working_directory="/tmp") + mock_gitlab.return_value.groups.get.side_effect = Exception("Group not found") + result = server.update_epic("bad-group", 101, title="Updated Epic") + assert "error" in result assert "Group not found" in result["error"] \ No newline at end of file -- cgit v1.2.3