Skip to main content
Glama

MCP Atlassian

by ArconixForge
test_v2_adapter.py5.15 kB
"""Unit tests for ConfluenceV2Adapter class.""" from unittest.mock import MagicMock, Mock import pytest import requests from requests.exceptions import HTTPError from mcp_atlassian.confluence.v2_adapter import ConfluenceV2Adapter class TestConfluenceV2Adapter: """Test cases for ConfluenceV2Adapter.""" @pytest.fixture def mock_session(self): """Create a mock session.""" return MagicMock(spec=requests.Session) @pytest.fixture def v2_adapter(self, mock_session): """Create a ConfluenceV2Adapter instance.""" return ConfluenceV2Adapter( session=mock_session, base_url="https://example.atlassian.net/wiki" ) def test_get_page_success(self, v2_adapter, mock_session): """Test successful page retrieval.""" # Mock the v2 API response mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = { "id": "123456", "status": "current", "title": "Test Page", "spaceId": "789", "version": {"number": 5}, "body": { "storage": {"value": "<p>Test content</p>", "representation": "storage"} }, "_links": {"webui": "/pages/viewpage.action?pageId=123456"}, } mock_session.get.return_value = mock_response # Mock space key lookup space_response = Mock() space_response.status_code = 200 space_response.json.return_value = {"key": "TEST"} mock_session.get.side_effect = [mock_response, space_response] # Call the method result = v2_adapter.get_page("123456") # Verify the API call assert mock_session.get.call_count == 2 mock_session.get.assert_any_call( "https://example.atlassian.net/wiki/api/v2/pages/123456", params={"body-format": "storage"}, ) # Verify the response format assert result["id"] == "123456" assert result["type"] == "page" assert result["title"] == "Test Page" assert result["space"]["key"] == "TEST" assert result["space"]["id"] == "789" assert result["version"]["number"] == 5 assert result["body"]["storage"]["value"] == "<p>Test content</p>" assert result["body"]["storage"]["representation"] == "storage" def test_get_page_not_found(self, v2_adapter, mock_session): """Test page retrieval when page doesn't exist.""" # Mock a 404 response mock_response = Mock() mock_response.status_code = 404 mock_response.text = "Page not found" mock_response.raise_for_status.side_effect = HTTPError(response=mock_response) mock_session.get.return_value = mock_response # Call the method and expect an exception with pytest.raises(ValueError, match="Failed to get page '999999'"): v2_adapter.get_page("999999") def test_get_page_with_minimal_response(self, v2_adapter, mock_session): """Test page retrieval with minimal v2 response.""" # Mock the v2 API response without optional fields mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = { "id": "123456", "status": "current", "title": "Minimal Page", } mock_session.get.return_value = mock_response # Call the method result = v2_adapter.get_page("123456") # Verify the response handles missing fields gracefully assert result["id"] == "123456" assert result["type"] == "page" assert result["title"] == "Minimal Page" assert result["space"]["key"] == "unknown" # Fallback when no spaceId assert result["version"]["number"] == 1 # Default version def test_get_page_network_error(self, v2_adapter, mock_session): """Test page retrieval with network error.""" # Mock a network error mock_session.get.side_effect = requests.RequestException("Network error") # Call the method and expect an exception with pytest.raises(ValueError, match="Failed to get page '123456'"): v2_adapter.get_page("123456") def test_get_page_with_expand_parameter(self, v2_adapter, mock_session): """Test that expand parameter is accepted but not used.""" # Mock the v2 API response mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = { "id": "123456", "status": "current", "title": "Test Page", } mock_session.get.return_value = mock_response # Call with expand parameter result = v2_adapter.get_page("123456", expand="body.storage,version") # Verify the API call doesn't include expand in params mock_session.get.assert_called_once_with( "https://example.atlassian.net/wiki/api/v2/pages/123456", params={"body-format": "storage"}, ) # Verify we still get a result assert result["id"] == "123456"

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