Skip to content

Commit 77095be

Browse files
authored
feat(jira): add JiraSearchResult.to_simplified_dict method (sooperset#585)
Add serialization method to enable field filtering in search results. --- test(models): add comprehensive JiraSearchResult tests - Test missing metadata handling - Test empty and multiple issue scenarios - Test simplified dictionary conversion
1 parent 3b342c2 commit 77095be

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

src/mcp_atlassian/models/jira/search.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,12 @@ def validate_search_result(self) -> "JiraSearchResult":
9696
The validated JiraSearchResult instance
9797
"""
9898
return self
99+
100+
def to_simplified_dict(self) -> dict[str, Any]:
101+
"""Convert to simplified dictionary for API response."""
102+
return {
103+
"total": self.total,
104+
"start_at": self.start_at,
105+
"max_results": self.max_results,
106+
"issues": [issue.to_simplified_dict() for issue in self.issues],
107+
}

tests/unit/models/test_jira_models.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,96 @@ def test_from_api_response_missing_metadata(self, jira_search_data):
10981098
assert search_result.max_results == -1
10991099
assert len(search_result.issues) == 1 # Assuming mock data has issues
11001100

1101+
def test_to_simplified_dict(self, jira_search_data):
1102+
"""Test converting JiraSearchResult to a simplified dictionary."""
1103+
search_result = JiraSearchResult.from_api_response(jira_search_data)
1104+
simplified = search_result.to_simplified_dict()
1105+
1106+
# Verify the structure and basic metadata
1107+
assert isinstance(simplified, dict)
1108+
assert "total" in simplified
1109+
assert "start_at" in simplified
1110+
assert "max_results" in simplified
1111+
assert "issues" in simplified
1112+
1113+
# Verify metadata values
1114+
assert simplified["total"] == 34
1115+
assert simplified["start_at"] == 0
1116+
assert simplified["max_results"] == 5
1117+
1118+
# Verify issues array
1119+
assert isinstance(simplified["issues"], list)
1120+
assert len(simplified["issues"]) == 1
1121+
1122+
# Verify that each issue is a simplified dict (not a JiraIssue object)
1123+
issue = simplified["issues"][0]
1124+
assert isinstance(issue, dict)
1125+
assert issue["key"] == "PROJ-123"
1126+
assert issue["summary"] == "Test Issue Summary"
1127+
1128+
# Verify that the issues are properly simplified (calling to_simplified_dict on each)
1129+
# This ensures field filtering works properly
1130+
assert "id" in issue # ID is included in simplified version
1131+
assert "expand" not in issue # Should be filtered out in simplified version
1132+
1133+
# Verify that issue contains expected fields
1134+
assert "assignee" in issue
1135+
assert "created" in issue
1136+
assert "updated" in issue
1137+
1138+
def test_to_simplified_dict_empty_result(self):
1139+
"""Test converting an empty JiraSearchResult to a simplified dictionary."""
1140+
search_result = JiraSearchResult()
1141+
simplified = search_result.to_simplified_dict()
1142+
1143+
assert isinstance(simplified, dict)
1144+
assert simplified["total"] == 0
1145+
assert simplified["start_at"] == 0
1146+
assert simplified["max_results"] == 0
1147+
assert simplified["issues"] == []
1148+
1149+
def test_to_simplified_dict_with_multiple_issues(self):
1150+
"""Test converting JiraSearchResult with multiple issues to a simplified dictionary."""
1151+
# Create mock data with multiple issues
1152+
mock_data = {
1153+
"total": 2,
1154+
"startAt": 0,
1155+
"maxResults": 10,
1156+
"issues": [
1157+
{
1158+
"id": "12345",
1159+
"key": "PROJ-123",
1160+
"fields": {
1161+
"summary": "First Issue",
1162+
"status": {"name": "In Progress"},
1163+
},
1164+
},
1165+
{
1166+
"id": "12346",
1167+
"key": "PROJ-124",
1168+
"fields": {
1169+
"summary": "Second Issue",
1170+
"status": {"name": "Done"},
1171+
},
1172+
},
1173+
],
1174+
}
1175+
1176+
search_result = JiraSearchResult.from_api_response(mock_data)
1177+
simplified = search_result.to_simplified_dict()
1178+
1179+
# Verify metadata
1180+
assert simplified["total"] == 2
1181+
assert simplified["start_at"] == 0
1182+
assert simplified["max_results"] == 10
1183+
1184+
# Verify issues
1185+
assert len(simplified["issues"]) == 2
1186+
assert simplified["issues"][0]["key"] == "PROJ-123"
1187+
assert simplified["issues"][0]["summary"] == "First Issue"
1188+
assert simplified["issues"][1]["key"] == "PROJ-124"
1189+
assert simplified["issues"][1]["summary"] == "Second Issue"
1190+
11011191

11021192
class TestJiraProject:
11031193
"""Tests for the JiraProject model."""

0 commit comments

Comments
 (0)