From f7077b5c2f64f4d4a5d870f70e2f63caec220958 Mon Sep 17 00:00:00 2001 From: Dawid Rycerz Date: Thu, 24 Jul 2025 10:45:29 +0300 Subject: feat: add epic_id to issue parameters --- servers/gitlab_python/tests/test_server.py | 124 ++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 1 deletion(-) (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 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 -- cgit v1.2.3