mirror of
https://github.com/dnlbauer/cordra-mcp.git
synced 2026-09-10 21:55:30 +00:00
feat: add pagination support to search_objects MCP tool
Add page_num parameter to the search_objects tool to enable pagination
control for users. This provides full pagination functionality while
maintaining backward compatibility.
Changes:
- Add page_num parameter with default value of 0 (0-based pagination)
- Update tool description to document pagination parameters
- Enhance docstring to explain page_num and clarify limit as page_size
- Add comprehensive tests for pagination scenarios
- All existing functionality remains unchanged
Users can now paginate through search results:
- search_objects("query") - first page, 20 results
- search_objects("query", limit=50) - first page, 50 results
- search_objects("query", page_num=1) - second page, 20 results
- search_objects("query", limit=10, page_num=5) - sixth page, 10 results
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -311,7 +311,7 @@ class TestSearchObjects:
|
||||
assert parsed_result[1]["id"] == "people/jane-smith"
|
||||
|
||||
# Verify the client was called with correct parameters
|
||||
mock_client.find.assert_called_once_with("name:John", object_type=None, page_size=20)
|
||||
mock_client.find.assert_called_once_with("name:John", object_type=None, page_size=20, page_num=0)
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_with_type_filter(self, mock_client):
|
||||
@@ -334,7 +334,7 @@ class TestSearchObjects:
|
||||
assert parsed_result[0]["type"] == "Person"
|
||||
|
||||
# Verify the client was called with type filter
|
||||
mock_client.find.assert_called_once_with("name:John", object_type="Person", page_size=20)
|
||||
mock_client.find.assert_called_once_with("name:John", object_type="Person", page_size=20, page_num=0)
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_with_limit(self, mock_client):
|
||||
@@ -356,7 +356,7 @@ class TestSearchObjects:
|
||||
assert len(parsed_result) == 1
|
||||
|
||||
# Verify the client was called with custom limit
|
||||
mock_client.find.assert_called_once_with("name:John", object_type=None, page_size=50)
|
||||
mock_client.find.assert_called_once_with("name:John", object_type=None, page_size=50, page_num=0)
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_with_all_parameters(self, mock_client):
|
||||
@@ -379,7 +379,7 @@ class TestSearchObjects:
|
||||
assert parsed_result[0]["type"] == "Document"
|
||||
|
||||
# Verify the client was called with all parameters
|
||||
mock_client.find.assert_called_once_with("title:Report", object_type="Document", page_size=25)
|
||||
mock_client.find.assert_called_once_with("title:Report", object_type="Document", page_size=25, page_num=0)
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_empty_results(self, mock_client):
|
||||
@@ -398,7 +398,7 @@ class TestSearchObjects:
|
||||
parsed_result = json.loads(result)
|
||||
assert parsed_result == []
|
||||
|
||||
mock_client.find.assert_called_once_with("nonexistent:data", object_type=None, page_size=20)
|
||||
mock_client.find.assert_called_once_with("nonexistent:data", object_type=None, page_size=20, page_num=0)
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_client_error(self, mock_client):
|
||||
@@ -409,7 +409,7 @@ class TestSearchObjects:
|
||||
await search_objects("test:query")
|
||||
|
||||
assert "Search failed:" in str(exc_info.value)
|
||||
mock_client.find.assert_called_once_with("test:query", object_type=None, page_size=20)
|
||||
mock_client.find.assert_called_once_with("test:query", object_type=None, page_size=20, page_num=0)
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_value_error(self, mock_client):
|
||||
@@ -420,7 +420,7 @@ class TestSearchObjects:
|
||||
await search_objects("invalid:query")
|
||||
|
||||
assert "Invalid search parameters:" in str(exc_info.value)
|
||||
mock_client.find.assert_called_once_with("invalid:query", object_type=None, page_size=20)
|
||||
mock_client.find.assert_called_once_with("invalid:query", object_type=None, page_size=20, page_num=0)
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_json_formatting(self, mock_client):
|
||||
@@ -449,6 +449,42 @@ class TestSearchObjects:
|
||||
assert parsed_result[0]["type"] == "Test"
|
||||
assert parsed_result[0]["content"]["data"] == "value"
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_with_page_num(self, mock_client):
|
||||
"""Test object search with page number parameter."""
|
||||
mock_search_result = {
|
||||
"results": [
|
||||
{"id": "documents/doc-21", "type": "Document", "content": {"title": "Page 2 Doc"}},
|
||||
],
|
||||
"total_size": 50,
|
||||
"page_num": 1,
|
||||
"page_size": 20
|
||||
}
|
||||
mock_client.find = AsyncMock(return_value=mock_search_result)
|
||||
|
||||
await search_objects("type:Document", page_num=1)
|
||||
|
||||
# Verify the client was called with correct page number
|
||||
mock_client.find.assert_called_once_with("type:Document", object_type=None, page_size=20, page_num=1)
|
||||
|
||||
@patch('cordra_mcp.server.cordra_client')
|
||||
async def test_search_objects_with_all_pagination_params(self, mock_client):
|
||||
"""Test object search with all pagination parameters."""
|
||||
mock_search_result = {
|
||||
"results": [
|
||||
{"id": "reports/report-51", "type": "Report", "content": {"title": "Report 51"}},
|
||||
],
|
||||
"total_size": 100,
|
||||
"page_num": 5,
|
||||
"page_size": 10
|
||||
}
|
||||
mock_client.find = AsyncMock(return_value=mock_search_result)
|
||||
|
||||
await search_objects("type:Report", type="Report", limit=10, page_num=5)
|
||||
|
||||
# Verify the client was called with all parameters
|
||||
mock_client.find.assert_called_once_with("type:Report", object_type="Report", page_size=10, page_num=5)
|
||||
|
||||
|
||||
class TestGetCordraDesign:
|
||||
"""Test the get_cordra_design resource handler."""
|
||||
|
||||
Reference in New Issue
Block a user