Skip to main content
Glama

MCP Azure DevOps Server

by Vortiago
test_tools.py6.83 kB
from unittest.mock import MagicMock from azure.devops.v7_1.work_item_tracking.models import ( WorkItem, WorkItemReference, ) from mcp_azure_devops.features.work_items.tools.comments import ( _get_work_item_comments_impl, ) from mcp_azure_devops.features.work_items.tools.query import ( _query_work_items_impl, ) from mcp_azure_devops.features.work_items.tools.read import _get_work_item_impl # Tests for _query_work_items_impl def test_query_work_items_impl_no_results(): """Test query with no results.""" mock_client = MagicMock() mock_query_result = MagicMock() mock_query_result.work_items = [] mock_client.query_by_wiql.return_value = mock_query_result result = _query_work_items_impl("SELECT * FROM WorkItems", 10, mock_client) assert result == "No work items found matching the query." def test_query_work_items_impl_with_results(): """Test query with results.""" mock_client = MagicMock() # Mock query result mock_query_result = MagicMock() mock_work_item_ref1 = MagicMock(spec=WorkItemReference) mock_work_item_ref1.id = "123" mock_work_item_ref2 = MagicMock(spec=WorkItemReference) mock_work_item_ref2.id = "456" mock_query_result.work_items = [mock_work_item_ref1, mock_work_item_ref2] mock_client.query_by_wiql.return_value = mock_query_result # Mock work items mock_work_item1 = MagicMock(spec=WorkItem) mock_work_item1.id = 123 mock_work_item1.fields = { "System.WorkItemType": "Bug", "System.Title": "Test Bug", "System.State": "Active" } mock_work_item2 = MagicMock(spec=WorkItem) mock_work_item2.id = 456 mock_work_item2.fields = { "System.WorkItemType": "Task", "System.Title": "Test Task", "System.State": "Closed" } mock_client.get_work_items.return_value = [ mock_work_item1, mock_work_item2] result = _query_work_items_impl("SELECT * FROM WorkItems", 10, mock_client) # Check that the result contains the expected formatting # per format_work_item assert "# Work Item 123" in result assert "- **System.WorkItemType**: Bug" in result assert "- **System.Title**: Test Bug" in result assert "- **System.State**: Active" in result assert "# Work Item 456" in result assert "- **System.WorkItemType**: Task" in result assert "- **System.Title**: Test Task" in result assert "- **System.State**: Closed" in result # Tests for _get_work_item_impl def test_get_work_item_impl_basic(): """Test retrieving basic work item info.""" mock_client = MagicMock() # Mock work item mock_work_item = MagicMock(spec=WorkItem) mock_work_item.id = 123 mock_work_item.fields = { "System.WorkItemType": "Bug", "System.Title": "Test Bug", "System.State": "Active", "System.TeamProject": "Test Project" } mock_client.get_work_item.return_value = mock_work_item result = _get_work_item_impl(123, mock_client) # Check that the result contains expected basic info assert "# Work Item 123" in result assert "- **System.WorkItemType**: Bug" in result assert "- **System.Title**: Test Bug" in result assert "- **System.State**: Active" in result assert "- **System.TeamProject**: Test Project" in result def test_get_work_item_impl_detailed(): """Test retrieving detailed work item info.""" mock_client = MagicMock() # Mock work item with more fields for detailed view mock_work_item = MagicMock(spec=WorkItem) mock_work_item.id = 123 mock_work_item.fields = { "System.WorkItemType": "Bug", "System.Title": "Test Bug", "System.State": "Active", "System.TeamProject": "Test Project", "System.Description": "This is a description", "System.AssignedTo": { "displayName": "Test User", "uniqueName": "test@example.com" }, "System.CreatedBy": {"displayName": "Creator User"}, "System.CreatedDate": "2023-01-01", "System.IterationPath": "Project\\Sprint 1", "System.AreaPath": "Project\\Area", "System.Tags": "tag1; tag2", } mock_client.get_work_item.return_value = mock_work_item result = _get_work_item_impl(123, mock_client) # Check that the result contains both basic and detailed info assert "# Work Item 123" in result assert "- **System.WorkItemType**: Bug" in result assert "- **System.Description**: This is a description" in result assert "- **System.AssignedTo**: Test User (test@example.com)" in result assert "- **System.CreatedBy**: Creator User" in result assert "- **System.IterationPath**: Project\\Sprint 1" in result assert "- **System.AreaPath**: Project\\Area" in result assert "- **System.Tags**: tag1; tag2" in result def test_get_work_item_impl_error(): """Test error handling in get_work_item_impl.""" mock_client = MagicMock() mock_client.get_work_item.side_effect = Exception("Test error") result = _get_work_item_impl(123, mock_client) assert "Error retrieving work item 123: Test error" in result # Tests for _get_work_item_comments_impl def test_get_work_item_comments_impl(): """Test retrieving work item comments.""" mock_client = MagicMock() # Mock work item for project lookup mock_work_item = MagicMock(spec=WorkItem) mock_work_item.fields = {"System.TeamProject": "Test Project"} mock_client.get_work_item.return_value = mock_work_item # Mock comments mock_comment1 = MagicMock() mock_comment1.text = "This is comment 1" mock_created_by = MagicMock() mock_created_by.display_name = "Comment User" mock_comment1.created_by = mock_created_by mock_comment1.created_date = "2023-01-02" mock_comments = MagicMock() mock_comments.comments = [mock_comment1] mock_client.get_comments.return_value = mock_comments result = _get_work_item_comments_impl(123, mock_client) assert "## Comment by Comment User on 2023-01-02" in result assert "This is comment 1" in result def test_get_work_item_comments_impl_no_comments(): """Test retrieving work item with no comments.""" mock_client = MagicMock() # Mock work item for project lookup mock_work_item = MagicMock(spec=WorkItem) mock_work_item.fields = {"System.TeamProject": "Test Project"} mock_client.get_work_item.return_value = mock_work_item # Mock empty comments mock_comments = MagicMock() mock_comments.comments = [] mock_client.get_comments.return_value = mock_comments result = _get_work_item_comments_impl(123, mock_client) assert "No comments found for this work item." 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