From 73ee5037001cee54f6364f41e1011099308a15a3 Mon Sep 17 00:00:00 2001 From: Dawid Rycerz Date: Fri, 28 Mar 2025 22:12:57 +0100 Subject: Fix glab tool context --- servers/gitlab_glab/tests/test_server.py | 155 ++++++++++++++++++++++++++----- 1 file changed, 132 insertions(+), 23 deletions(-) (limited to 'servers/gitlab_glab/tests/test_server.py') diff --git a/servers/gitlab_glab/tests/test_server.py b/servers/gitlab_glab/tests/test_server.py index 1c27ea5..e612173 100644 --- a/servers/gitlab_glab/tests/test_server.py +++ b/servers/gitlab_glab/tests/test_server.py @@ -27,7 +27,8 @@ class TestGitLabServer: mock_run.return_value = mock_process server = GitLabServer() - success, result = server.execute_glab_command(["--version"]) + working_dir = "/test/directory" + success, result = server.execute_glab_command(["--version"], working_dir) assert success is True assert result == "command output" @@ -36,6 +37,7 @@ class TestGitLabServer: capture_output=True, text=True, check=False, + cwd=working_dir, ) @patch("subprocess.run") @@ -49,7 +51,8 @@ class TestGitLabServer: mock_run.return_value = mock_process server = GitLabServer() - success, result = server.execute_glab_command(["--version"]) + working_dir = "/test/directory" + success, result = server.execute_glab_command(["--version"], working_dir) assert success is False assert result == {"error": "command failed"} @@ -58,6 +61,7 @@ class TestGitLabServer: capture_output=True, text=True, check=False, + cwd=working_dir, ) @patch("subprocess.run") @@ -71,7 +75,8 @@ class TestGitLabServer: mock_run.return_value = mock_process server = GitLabServer() - success, result = server.execute_glab_command(["api", "/projects"]) + working_dir = "/test/directory" + success, result = server.execute_glab_command(["api", "/projects"], working_dir) assert success is False assert "error" in result @@ -81,6 +86,7 @@ class TestGitLabServer: capture_output=True, text=True, check=False, + cwd=working_dir, ) @patch("subprocess.run") @@ -90,7 +96,8 @@ class TestGitLabServer: mock_run.side_effect = FileNotFoundError("No such file or directory: 'glab'") server = GitLabServer() - success, result = server.execute_glab_command(["--version"]) + working_dir = "/test/directory" + success, result = server.execute_glab_command(["--version"], working_dir) assert success is False assert "error" in result @@ -107,7 +114,8 @@ class TestGitLabServer: mock_run.return_value = mock_process server = GitLabServer() - success, result = server.execute_glab_command(["api", "/projects"]) + working_dir = "/test/directory" + success, result = server.execute_glab_command(["api", "/projects"], working_dir) assert success is True assert isinstance(result, list) @@ -119,6 +127,7 @@ class TestGitLabServer: capture_output=True, text=True, check=False, + cwd=working_dir, ) @patch("subprocess.run") @@ -132,7 +141,8 @@ class TestGitLabServer: mock_run.return_value = mock_process server = GitLabServer() - success, result = server.execute_glab_command(["api", "/projects"]) + working_dir = "/test/directory" + success, result = server.execute_glab_command(["api", "/projects"], working_dir) assert success is False assert "error" in result @@ -145,11 +155,12 @@ class TestGitLabServer: mock_execute.return_value = (True, "glab version 1.0.0") server = GitLabServer() - result = server.check_availability() + working_dir = "/test/directory" + result = server.check_availability(working_dir) assert result["available"] is True assert result["version"] == "glab version 1.0.0" - mock_execute.assert_called_once_with(["--version"]) + mock_execute.assert_called_once_with(["--version"], working_dir) @patch.object(GitLabServer, "execute_glab_command") def test_check_availability_failure(self, mock_execute: MagicMock) -> None: @@ -158,15 +169,16 @@ class TestGitLabServer: mock_execute.return_value = (False, {"error": "glab command not found"}) server = GitLabServer() - result = server.check_availability() + working_dir = "/test/directory" + result = server.check_availability(working_dir) assert result["available"] is False assert result["error"] == "glab command not found" - mock_execute.assert_called_once_with(["--version"]) + mock_execute.assert_called_once_with(["--version"], working_dir) @patch.object(GitLabServer, "execute_glab_command") def test_find_project_success(self, mock_execute: MagicMock) -> None: - """Test successful find_project.""" + """Test successful find_project with a single project.""" # Mock successful API response with a project mock_execute.return_value = ( True, @@ -182,15 +194,76 @@ class TestGitLabServer: ) server = GitLabServer() - result = server.find_project("test-project") + working_dir = "/test/directory" + result = server.find_project("test-project", working_dir) - assert "id" in result - assert result["id"] == 1 - assert result["name"] == "test-project" - assert result["path_with_namespace"] == "group/test-project" - assert result["web_url"] == "https://gitlab.com/group/test-project" - assert result["description"] == "A test project" - mock_execute.assert_called_once_with(["api", "/projects?search=test-project"]) + assert isinstance(result, list) + assert len(result) == 1 + assert result[0]["id"] == 1 + assert result[0]["name"] == "test-project" + assert result[0]["path_with_namespace"] == "group/test-project" + assert result[0]["web_url"] == "https://gitlab.com/group/test-project" + assert result[0]["description"] == "A test project" + mock_execute.assert_called_once_with( + ["api", "/projects?search=test-project"], working_dir + ) + + @patch.object(GitLabServer, "execute_glab_command") + def test_find_project_multiple_results(self, mock_execute: MagicMock) -> None: + """Test successful find_project with multiple projects.""" + # Mock successful API response with multiple projects + mock_execute.return_value = ( + True, + [ + { + "id": 1, + "name": "test-project", + "path_with_namespace": "group/test-project", + "web_url": "https://gitlab.com/group/test-project", + "description": "A test project", + }, + { + "id": 2, + "name": "test-project-2", + "path_with_namespace": "group/test-project-2", + "web_url": "https://gitlab.com/group/test-project-2", + "description": "Another test project", + }, + { + "id": 3, + "name": "test-project-3", + "path_with_namespace": "group/test-project-3", + "web_url": "https://gitlab.com/group/test-project-3", + "description": "Yet another test project", + }, + ], + ) + + server = GitLabServer() + working_dir = "/test/directory" + result = server.find_project("test-project", working_dir) + + assert isinstance(result, list) + assert len(result) == 3 + + # Check first project + assert result[0]["id"] == 1 + assert result[0]["name"] == "test-project" + assert result[0]["path_with_namespace"] == "group/test-project" + + # Check second project + assert result[1]["id"] == 2 + assert result[1]["name"] == "test-project-2" + assert result[1]["path_with_namespace"] == "group/test-project-2" + + # Check third project + assert result[2]["id"] == 3 + assert result[2]["name"] == "test-project-3" + assert result[2]["path_with_namespace"] == "group/test-project-3" + + mock_execute.assert_called_once_with( + ["api", "/projects?search=test-project"], working_dir + ) @patch.object(GitLabServer, "execute_glab_command") def test_find_project_not_found(self, mock_execute: MagicMock) -> None: @@ -199,12 +272,13 @@ class TestGitLabServer: mock_execute.return_value = (True, []) server = GitLabServer() - result = server.find_project("nonexistent-project") + working_dir = "/test/directory" + result = server.find_project("nonexistent-project", working_dir) assert "error" in result assert "not found" in result["error"] mock_execute.assert_called_once_with( - ["api", "/projects?search=nonexistent-project"] + ["api", "/projects?search=nonexistent-project"], working_dir ) @patch.object(GitLabServer, "execute_glab_command") @@ -214,8 +288,43 @@ class TestGitLabServer: mock_execute.return_value = (False, {"error": "API error"}) server = GitLabServer() - result = server.find_project("test-project") + working_dir = "/test/directory" + result = server.find_project("test-project", working_dir) assert "error" in result assert result["error"] == "API error" - mock_execute.assert_called_once_with(["api", "/projects?search=test-project"]) + mock_execute.assert_called_once_with( + ["api", "/projects?search=test-project"], working_dir + ) + + @patch("subprocess.run") + def test_working_directory_is_used(self, mock_run: MagicMock) -> None: + """Test that the working directory is correctly passed to subprocess.run.""" + # Mock successful command execution + mock_process = MagicMock() + mock_process.returncode = 0 + mock_process.stdout = "command output" + mock_process.stderr = "" + mock_run.return_value = mock_process + + server = GitLabServer() + + # Test with different working directories + working_dirs = [ + "/home/user/project", + "/tmp/gitlab", + "/var/www/html", + ] + + for working_dir in working_dirs: + server.execute_glab_command(["status"], working_dir) + mock_run.assert_called_with( + ["glab", "status"], + capture_output=True, + text=True, + check=False, + cwd=working_dir, + ) + + # Verify the number of calls + assert mock_run.call_count == len(working_dirs) -- cgit v1.2.3