MCP JIRA Server

""" PyTest configuration and fixtures for MCP Jira tests. """ import pytest from typing import Dict, Any import aiohttp from datetime import datetime from unittest.mock import MagicMock, AsyncMock from mcp_jira.config import Settings, TestSettings from mcp_jira.jira_client import JiraClient from mcp_jira.scrum_master import ScrumMaster from mcp_jira.types import Issue, Sprint, TeamMember, IssueType, Priority, IssueStatus @pytest.fixture def test_settings(): """Provide test settings""" return TestSettings( jira_url="https://test-jira.example.com", jira_username="test_user", jira_api_token="test_token", project_key="TEST", default_board_id=1, api_key="test_api_key" ) @pytest.fixture def mock_response(): """Create a mock aiohttp response""" class MockResponse: def __init__(self, status: int, data: Dict[str, Any]): self.status = status self._data = data async def json(self): return self._data async def text(self): return str(self._data) async def __aenter__(self): return self async def __aexit__(self, exc_type, exc_val, exc_tb): pass return MockResponse @pytest.fixture def mock_jira_client(test_settings, mock_response): """Create a mock Jira client""" client = JiraClient(test_settings) # Mock sample issue sample_issue = { "key": "TEST-1", "fields": { "summary": "Test Issue", "description": "Test Description", "issuetype": {"name": "Story"}, "priority": {"name": "High"}, "status": {"name": "To Do"}, "assignee": { "name": "test_user", "displayName": "Test User", "emailAddress": "test@example.com" }, "created": "2024-01-08T10:00:00.000Z", "updated": "2024-01-08T10:00:00.000Z", "customfield_10026": 5 } } # Mock responses async def mock_get(*args, **kwargs): return mock_response(200, {"issues": [sample_issue]}) async def mock_post(*args, **kwargs): return mock_response(201, {"key": "TEST-1"}) # Replace client's session with mock client._session = MagicMock() client._session.get = AsyncMock(side_effect=mock_get) client._session.post = AsyncMock(side_effect=mock_post) return client @pytest.fixture def mock_scrum_master(mock_jira_client): """Create a mock Scrum Master""" return ScrumMaster(mock_jira_client) @pytest.fixture def sample_issue(): """Provide a sample issue""" return Issue( key="TEST-1", summary="Test Issue", description="Test Description", issue_type=IssueType.STORY, priority=Priority.HIGH, status=IssueStatus.TODO, assignee=TeamMember( username="test_user", display_name="Test User", email="test@example.com" ), story_points=5, labels=[], components=[], created_at=datetime.fromisoformat("2024-01-08T10:00:00.000"), updated_at=datetime.fromisoformat("2024-01-08T10:00:00.000"), blocked_by=[], blocks=[] ) @pytest.fixture def sample_sprint(): """Provide a sample sprint""" return { "id": 1, "name": "Test Sprint", "goal": "Test Goal", "state": "active", "startDate": "2024-01-08T00:00:00.000Z", "endDate": "2024-01-22T00:00:00.000Z" }