Skip to main content
Glama

MCP Atlassian

by ArconixForge
test_labels.py4.69 kB
"""Unit tests for the LabelsMixin class.""" from unittest.mock import patch import pytest import requests from mcp_atlassian.confluence.labels import LabelsMixin from mcp_atlassian.models.confluence import ConfluenceLabel class TestLabelsMixin: """Tests for the LabelsMixin class.""" @pytest.fixture def labels_mixin(self, confluence_client): """Create a LabelsMixin instance for testing.""" # LabelsMixin inherits from ConfluenceClient, so we need to create it properly with patch( "mcp_atlassian.confluence.labels.ConfluenceClient.__init__" ) as mock_init: mock_init.return_value = None mixin = LabelsMixin() # Copy the necessary attributes from our mocked client mixin.confluence = confluence_client.confluence mixin.config = confluence_client.config mixin.preprocessor = confluence_client.preprocessor return mixin def test_get_page_labels_success(self, labels_mixin): """Test get_page_labels with success response.""" # Setup page_id = "12345" # Call the method result = labels_mixin.get_page_labels(page_id) # Verify labels_mixin.confluence.get_page_labels.assert_called_once_with(page_id=page_id) assert len(result) == 3 assert result[0].id == "456789123" assert result[0].prefix == "global" assert result[0].label == "meeting-notes" assert result[1].id == "456789124" assert result[1].prefix == "my" assert result[1].name == "important" assert result[2].id == "456789125" assert result[2].name == "test" def test_get_page_labels_api_error(self, labels_mixin): """Test handling of API errors.""" # Mock the API to raise an exception labels_mixin.confluence.get_page_labels.side_effect = requests.RequestException( "API error" ) # Act/Assert with pytest.raises(Exception, match="Failed fetching labels"): labels_mixin.get_page_labels("987654321") def test_get_page_labels_key_error(self, labels_mixin): """Test handling of missing keys in API response.""" # Mock the response to be missing expected keys labels_mixin.confluence.get_page_labels.return_value = {"invalid": "data"} # Act/Assert with pytest.raises(Exception, match="Failed fetching labels"): labels_mixin.get_page_labels("987654321") def test_get_page_labels_value_error(self, labels_mixin): """Test handling of unexpected data types.""" # Cause a value error by returning a string where a dict is expected labels_mixin.confluence.get_page_labels.return_value = "invalid" # Act/Assert with pytest.raises(Exception, match="Failed fetching labels"): labels_mixin.get_page_labels("987654321") def test_get_page_labels_with_empty_results(self, labels_mixin): """Test handling of empty results.""" # Mock empty results labels_mixin.confluence.get_page_labels.return_value = {"results": []} # Act result = labels_mixin.get_page_labels("987654321") # Assert assert isinstance(result, list) assert len(result) == 0 # Empty list with no labels def test_add_page_label_success(self, labels_mixin): """Test adding a label""" # Arrange page_id = "987654321" name = "test-label" prefix = "global" # Mock add_page_label to return a list of ConfluenceLabels with patch.object( labels_mixin, "get_page_labels", return_value=ConfluenceLabel( id="123456789", name=name, prefix=prefix, ), ): # Act result = labels_mixin.add_page_label(page_id, name) # Assert labels_mixin.confluence.set_page_label.assert_called_once_with( page_id=page_id, label=name ) # Verify result is a ConfluenceLabel assert isinstance(result, ConfluenceLabel) assert result.id == "123456789" assert result.name == name assert result.prefix == prefix def test_add_page_label_error(self, labels_mixin): """Test error handling when adding a label.""" # Arrange labels_mixin.confluence.set_page_label.side_effect = Exception("API Error") # Act/Assert with pytest.raises(Exception, match="Failed to add label"): labels_mixin.add_page_label("987654321", "test")

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/ArconixForge/mcp-atlassian'

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