MCP JIRA Server
by Warzuponus
- mcp-jira
- tests
"""
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"
}