We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sooperset/mcp-atlassian'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
"""Tests for Jira Service Management queue read operations."""
from unittest.mock import MagicMock
import pytest
from mcp_atlassian.jira import JiraFetcher
from mcp_atlassian.models.jira import JiraQueueIssuesResult, JiraServiceDeskQueuesResult
@pytest.fixture
def queues_fetcher(jira_fetcher: JiraFetcher) -> JiraFetcher:
"""Create a Jira fetcher configured for queue endpoint testing."""
fetcher = jira_fetcher
fetcher.config = MagicMock()
fetcher.config.is_cloud = False
return fetcher
def test_get_service_desk_for_project_found_on_second_page(queues_fetcher: JiraFetcher):
"""Service desk lookup should paginate until a matching project key is found."""
queues_fetcher.jira.get = MagicMock(
side_effect=[
{
"start": 0,
"limit": 1,
"isLastPage": False,
"values": [
{
"id": "1",
"projectKey": "TIC",
"projectId": "10001",
"projectName": "Ticketing",
}
],
},
{
"start": 1,
"limit": 1,
"isLastPage": True,
"values": [
{
"id": "4",
"projectKey": "SUP",
"projectId": "10400",
"projectName": "support",
"_links": {"self": "https://test/rest/servicedeskapi/4"},
}
],
},
]
)
result = queues_fetcher.get_service_desk_for_project("sup")
assert result is not None
assert result.id == "4"
assert result.project_key == "SUP"
assert result.project_name == "support"
assert queues_fetcher.jira.get.call_count == 2
def test_get_service_desk_for_project_not_found(queues_fetcher: JiraFetcher):
"""Service desk lookup should return None when project key has no service desk."""
queues_fetcher.jira.get = MagicMock(
return_value={"start": 0, "limit": 50, "isLastPage": True, "values": []}
)
result = queues_fetcher.get_service_desk_for_project("NOTFOUND")
assert result is None
def test_get_service_desk_queues_success(queues_fetcher: JiraFetcher):
"""Queue listing should parse queues and pagination metadata."""
queues_fetcher.jira.get = MagicMock(
return_value={
"start": 0,
"limit": 50,
"size": 2,
"isLastPage": True,
"_links": {"self": "https://test/rest/servicedeskapi/servicedesk/4/queue"},
"values": [
{"id": "47", "name": "Support Team", "issueCount": 11},
{"id": "48", "name": "Waiting for customer", "issueCount": 33},
],
}
)
result = queues_fetcher.get_service_desk_queues("4", start_at=0, limit=50)
assert isinstance(result, JiraServiceDeskQueuesResult)
assert result.service_desk_id == "4"
assert result.size == 2
assert len(result.queues) == 2
assert result.queues[0].id == "47"
assert result.queues[0].issue_count == 11
def test_get_queue_issues_success(queues_fetcher: JiraFetcher):
"""Queue issues call should include queue metadata and issue payloads."""
queues_fetcher.jira.get = MagicMock(
side_effect=[
{
"id": "47",
"name": "Support Team",
"issueCount": 11,
"_links": {"self": "https://test/rest/servicedeskapi/servicedesk/4/47"},
},
{
"start": 0,
"limit": 2,
"size": 2,
"isLastPage": True,
"values": [
{"id": "1", "key": "SUP-1", "fields": {"summary": "Issue 1"}},
{"id": "2", "key": "SUP-2", "fields": {"summary": "Issue 2"}},
],
},
]
)
result = queues_fetcher.get_queue_issues("4", "47", start_at=0, limit=2)
assert isinstance(result, JiraQueueIssuesResult)
assert result.service_desk_id == "4"
assert result.queue_id == "47"
assert result.queue is not None
assert result.queue.name == "Support Team"
assert result.size == 2
assert len(result.issues) == 2
assert result.issues[0]["key"] == "SUP-1"
def test_get_queue_issues_invalid_payload_returns_safe_default(
queues_fetcher: JiraFetcher,
):
"""Invalid queue-issues payload should return an empty safe default."""
queues_fetcher.jira.get = MagicMock(
side_effect=[
{"id": "47", "name": "Support Team", "issueCount": 11},
"invalid-payload",
]
)
result = queues_fetcher.get_queue_issues("4", "47", start_at=0, limit=2)
assert isinstance(result, JiraQueueIssuesResult)
assert result.queue is not None
assert result.queue.id == "47"
assert result.issues == []
assert result.size == 0
@pytest.fixture
def cloud_queues_fetcher(jira_fetcher: JiraFetcher) -> JiraFetcher:
"""Create a Jira fetcher configured as Cloud for queue rejection testing."""
fetcher = jira_fetcher
fetcher.config = MagicMock()
fetcher.config.is_cloud = True
return fetcher
@pytest.mark.parametrize(
"method,args",
[
("get_service_desk_for_project", ("SUP",)),
("get_service_desk_queues", ("4",)),
("get_queue_issues", ("4", "47")),
],
)
def test_queue_methods_reject_cloud(
cloud_queues_fetcher: JiraFetcher, method: str, args: tuple[str, ...]
) -> None:
"""All queue methods should raise NotImplementedError on Cloud."""
with pytest.raises(NotImplementedError, match="Server/Data Center"):
getattr(cloud_queues_fetcher, method)(*args)