Skip to main content
Glama

MCP Azure DevOps Server

by Vortiago
test_process.py8.92 kB
from unittest.mock import MagicMock, patch from mcp_azure_devops.features.work_items.tools.process import ( _get_process_details_impl, _get_project_process_id_impl, _list_processes_impl, ) @patch("mcp_azure_devops.features.work_items.tools.process.get_core_client") def test_get_project_process_id_impl(mock_get_core_client): """Test retrieving project process ID.""" # Arrange mock_core_client = MagicMock() mock_get_core_client.return_value = mock_core_client # Mock project details mock_project = MagicMock() mock_project.name = "Test Project" mock_project.capabilities = { "processTemplate": { "templateTypeId": "process-id-123", "templateName": "Agile" } } mock_core_client.get_project.return_value = mock_project # Act result = _get_project_process_id_impl("Test Project") # Assert mock_core_client.get_project.assert_called_once_with( "Test Project", include_capabilities=True) # Check result formatting assert "Process for Project: Test Project" in result assert "Process Name: Agile" in result assert "Process ID: process-id-123" in result @patch("mcp_azure_devops.features.work_items.tools.process.get_core_client") def test_get_project_process_id_impl_no_process(mock_get_core_client): """Test retrieving project process ID when no process is found.""" # Arrange mock_core_client = MagicMock() mock_get_core_client.return_value = mock_core_client # Mock project details with no process mock_project = MagicMock() mock_project.name = "Test Project" mock_project.capabilities = { "processTemplate": {} # Empty process template } mock_core_client.get_project.return_value = mock_project # Act result = _get_project_process_id_impl("Test Project") # Assert assert "Could not determine process ID for project Test Project" in result @patch("mcp_azure_devops.features.work_items.tools.process.get_core_client") def test_get_project_process_id_impl_error(mock_get_core_client): """Test error handling in get_project_process_id_impl.""" # Arrange mock_core_client = MagicMock() mock_get_core_client.return_value = mock_core_client # Simulate error mock_core_client.get_project.side_effect = Exception("Test error") # Act result = _get_project_process_id_impl("Test Project") # Assert assert ("Error retrieving process ID for project 'Test Project': " "Test error" in result) @patch("mcp_azure_devops.features.work_items.tools.process.get_work_item_tracking_process_client") def test_get_process_details_impl(mock_get_process_client): """Test retrieving process details.""" # Arrange mock_process_client = MagicMock() mock_get_process_client.return_value = mock_process_client # Mock process mock_process = MagicMock() mock_process.name = "Agile" mock_process.reference_name = "Agile" mock_process.type_id = "process-id-123" mock_process.description = "Agile process template" # Mock process properties mock_properties = MagicMock() mock_properties.is_default = True mock_properties.is_enabled = True mock_process.properties = mock_properties # Mock work item types mock_wit_type1 = MagicMock() mock_wit_type1.name = "Bug" mock_wit_type1.reference_name = "System.Bug" mock_wit_type1.description = "Represents a bug or defect" mock_wit_type2 = MagicMock() mock_wit_type2.name = "Task" mock_wit_type2.reference_name = "System.Task" mock_wit_type2.description = "Represents a task item" mock_process_client.get_process_by_its_id.return_value = mock_process mock_process_client.get_process_work_item_types.return_value = [ mock_wit_type1, mock_wit_type2] # Act result = _get_process_details_impl("process-id-123") # Assert mock_process_client.get_process_by_its_id.assert_called_once_with("process-id-123") mock_process_client.get_process_work_item_types.assert_called_once_with("process-id-123") # Check result formatting assert "Process: Agile" in result assert "Description: Agile process template" in result assert "Reference Name: Agile" in result assert "Type ID: process-id-123" in result # Check properties section assert "Properties" in result assert "Is default: True" in result assert "Is enabled: True" in result # Check work item types section assert "Work Item Types" in result assert "Bug" in result assert "System.Bug" in result assert "Represents a bug or defect" in result assert "Task" in result assert "System.Task" in result assert "Represents a task item" in result @patch("mcp_azure_devops.features.work_items.tools.process.get_work_item_tracking_process_client") def test_get_process_details_impl_not_found(mock_get_process_client): """Test retrieving process details when process is not found.""" # Arrange mock_process_client = MagicMock() mock_get_process_client.return_value = mock_process_client # Process not found mock_process_client.get_process_by_its_id.return_value = None # Act result = _get_process_details_impl("non-existent-id") # Assert assert "Process with ID 'non-existent-id' not found" in result @patch("mcp_azure_devops.features.work_items.tools.process.get_work_item_tracking_process_client") def test_get_process_details_impl_error(mock_get_process_client): """Test error handling in get_process_details_impl.""" # Arrange mock_process_client = MagicMock() mock_get_process_client.return_value = mock_process_client # Simulate error mock_process_client.get_process_by_its_id.side_effect = Exception( "Test error") # Act result = _get_process_details_impl("process-id-123") # Assert assert ("Error retrieving process details for process ID 'process-id-123':" " Test error" in result) @patch("mcp_azure_devops.features.work_items.tools.process.get_work_item_tracking_process_client") def test_list_processes_impl(mock_get_process_client): """Test listing all processes.""" # Arrange mock_process_client = MagicMock() mock_get_process_client.return_value = mock_process_client # Mock processes mock_process1 = MagicMock() mock_process1.name = "Agile" mock_process1.type_id = "process-id-123" mock_process1.reference_name = "Agile" mock_process1.description = "Agile process template" mock_properties1 = MagicMock() mock_properties1.is_default = True mock_process1.properties = mock_properties1 mock_process2 = MagicMock() mock_process2.name = "Scrum" mock_process2.type_id = "process-id-456" mock_process2.reference_name = "Scrum" mock_process2.description = "Scrum process template" mock_properties2 = MagicMock() mock_properties2.is_default = False mock_process2.properties = mock_properties2 mock_process_client.get_list_of_processes.return_value = [ mock_process1, mock_process2] # Act result = _list_processes_impl() # Assert mock_process_client.get_list_of_processes.assert_called_once() # Check result formatting assert "Available Processes" in result assert "Agile" in result assert "process-id-123" in result assert "Agile process template" in result assert "Yes" in result # For is_default=True assert "Scrum" in result assert "process-id-456" in result assert "Scrum process template" in result assert "No" in result # For is_default=False @patch("mcp_azure_devops.features.work_items.tools.process.get_work_item_tracking_process_client") def test_list_processes_impl_no_processes(mock_get_process_client): """Test listing processes when none exist.""" # Arrange mock_process_client = MagicMock() mock_get_process_client.return_value = mock_process_client # No processes mock_process_client.get_list_of_processes.return_value = [] # Act result = _list_processes_impl() # Assert assert "No processes found in the organization" in result @patch("mcp_azure_devops.features.work_items.tools.process.get_work_item_tracking_process_client") def test_list_processes_impl_error(mock_get_process_client): """Test error handling in list_processes_impl.""" # Arrange mock_process_client = MagicMock() mock_get_process_client.return_value = mock_process_client # Simulate error mock_process_client.get_list_of_processes.side_effect = Exception( "Test error") # Act result = _list_processes_impl() # Assert assert "Error retrieving processes: Test error" in result

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Vortiago/mcp-azure-devops'

If you have feedback or need assistance with the MCP directory API, please join our Discord server