summaryrefslogtreecommitdiff
path: root/servers/gitlab_python/tests/test_server.py
diff options
context:
space:
mode:
Diffstat (limited to 'servers/gitlab_python/tests/test_server.py')
-rw-r--r--servers/gitlab_python/tests/test_server.py124
1 files changed, 123 insertions, 1 deletions
diff --git a/servers/gitlab_python/tests/test_server.py b/servers/gitlab_python/tests/test_server.py
index 94820aa..64d27b1 100644
--- a/servers/gitlab_python/tests/test_server.py
+++ b/servers/gitlab_python/tests/test_server.py
@@ -477,4 +477,126 @@ def test_create_epic_comment_error(mock_gitlab, mock_settings):
mock_gitlab.return_value.groups.get.side_effect = Exception("Group not found")
result = server.create_epic_comment("bad-group", 101, "A new epic comment")
assert "error" in result
- assert "Group not found" in result["error"] \ No newline at end of file
+ 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_create_issue_with_epic_id_success(mock_gitlab, mock_settings):
+ server = GitLabPythonServer(working_directory="/tmp")
+ proj = MagicMock()
+ issue = MagicMock()
+ issue.id = 123
+ issue.web_url = "https://gitlab.com/project/-/issues/123"
+ proj.issues.create.return_value = issue
+ mock_gitlab.return_value.projects.get.return_value = proj
+
+ # Mock groups and epic
+ group = MagicMock()
+ epic = MagicMock()
+ epic_issue = MagicMock()
+ epic.issues.create.return_value = epic_issue
+ group.epics.get.return_value = epic
+ mock_gitlab.return_value.groups.list.return_value = [group]
+
+ result = server.create_issue(
+ project="project/path",
+ title="Test Issue",
+ description="Test Description",
+ epic_id=456
+ )
+
+ assert "url" in result
+ assert result["url"] == "https://gitlab.com/project/-/issues/123"
+ proj.issues.create.assert_called_once()
+ group.epics.get.assert_called_once_with(456)
+ epic.issues.create.assert_called_once_with({"issue_id": 123})
+
+@patch("mcp_server_gitlab_python.server.get_gitlab_settings", return_value=("https://gitlab.com", "dummy-token"))
+@patch("gitlab.Gitlab")
+def test_create_issue_with_epic_id_not_found(mock_gitlab, mock_settings):
+ server = GitLabPythonServer(working_directory="/tmp")
+ proj = MagicMock()
+ issue = MagicMock()
+ issue.id = 123
+ issue.web_url = "https://gitlab.com/project/-/issues/123"
+ proj.issues.create.return_value = issue
+ mock_gitlab.return_value.projects.get.return_value = proj
+
+ # Mock groups but no epic found
+ group = MagicMock()
+ group.epics.get.side_effect = Exception("Epic not found")
+ mock_gitlab.return_value.groups.list.return_value = [group]
+
+ result = server.create_issue(
+ project="project/path",
+ title="Test Issue",
+ description="Test Description",
+ epic_id=456
+ )
+
+ # Issue should still be created even if epic attachment fails
+ assert "url" in result
+ assert result["url"] == "https://gitlab.com/project/-/issues/123"
+ proj.issues.create.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_with_epic_id_success(mock_gitlab, mock_settings):
+ server = GitLabPythonServer(working_directory="/tmp")
+ proj = MagicMock()
+ issue = MagicMock()
+ issue.id = 123
+ issue.web_url = "https://gitlab.com/project/-/issues/123"
+ proj.issues.get.return_value = issue
+ mock_gitlab.return_value.projects.get.return_value = proj
+
+ # Mock groups and epic
+ group = MagicMock()
+ epic = MagicMock()
+ epic_issue = MagicMock()
+ epic.issues.create.return_value = epic_issue
+ group.epics.get.return_value = epic
+ mock_gitlab.return_value.groups.list.return_value = [group]
+
+ result = server.update_issue(
+ project="project/path",
+ issue_iid=123,
+ title="Updated Title",
+ epic_id=456
+ )
+
+ assert "url" in result
+ assert result["url"] == "https://gitlab.com/project/-/issues/123"
+ proj.issues.get.assert_called_once_with(123)
+ issue.save.assert_called_once()
+ group.epics.get.assert_called_once_with(456)
+ epic.issues.create.assert_called_once_with({"issue_id": 123})
+
+@patch("mcp_server_gitlab_python.server.get_gitlab_settings", return_value=("https://gitlab.com", "dummy-token"))
+@patch("gitlab.Gitlab")
+def test_update_issue_with_epic_id_not_found(mock_gitlab, mock_settings):
+ server = GitLabPythonServer(working_directory="/tmp")
+ proj = MagicMock()
+ issue = MagicMock()
+ issue.id = 123
+ issue.web_url = "https://gitlab.com/project/-/issues/123"
+ proj.issues.get.return_value = issue
+ mock_gitlab.return_value.projects.get.return_value = proj
+
+ # Mock groups but no epic found
+ group = MagicMock()
+ group.epics.get.side_effect = Exception("Epic not found")
+ mock_gitlab.return_value.groups.list.return_value = [group]
+
+ result = server.update_issue(
+ project="project/path",
+ issue_iid=123,
+ title="Updated Title",
+ epic_id=456
+ )
+
+ # Issue should still be updated even if epic attachment fails
+ assert "url" in result
+ assert result["url"] == "https://gitlab.com/project/-/issues/123"
+ proj.issues.get.assert_called_once_with(123)
+ issue.save.assert_called_once() \ No newline at end of file