feat(proxy): add method dispatch
This commit is contained in:
@@ -1,5 +1,33 @@
|
||||
from datetime import datetime, timezone
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
import pytest
|
||||
from grist_mcp.proxy import parse_proxy_request, ProxyRequest, ProxyError
|
||||
|
||||
from grist_mcp.proxy import parse_proxy_request, ProxyRequest, ProxyError, dispatch_proxy_request
|
||||
from grist_mcp.session import SessionToken
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_session():
|
||||
return SessionToken(
|
||||
token="sess_test",
|
||||
document="sales",
|
||||
permissions=["read", "write"],
|
||||
agent_name="test-agent",
|
||||
created_at=datetime.now(timezone.utc),
|
||||
expires_at=datetime.now(timezone.utc),
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_auth():
|
||||
auth = MagicMock()
|
||||
doc = MagicMock()
|
||||
doc.url = "https://grist.example.com"
|
||||
doc.doc_id = "abc123"
|
||||
doc.api_key = "key"
|
||||
auth.get_document.return_value = doc
|
||||
return auth
|
||||
|
||||
|
||||
def test_parse_proxy_request_valid_add_records():
|
||||
@@ -24,3 +52,23 @@ def test_parse_proxy_request_missing_method():
|
||||
|
||||
assert exc_info.value.code == "INVALID_REQUEST"
|
||||
assert "method" in str(exc_info.value)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_dispatch_add_records(mock_session, mock_auth):
|
||||
request = ProxyRequest(
|
||||
method="add_records",
|
||||
table="Orders",
|
||||
records=[{"item": "Widget"}],
|
||||
)
|
||||
|
||||
mock_client = AsyncMock()
|
||||
mock_client.add_records.return_value = [1, 2, 3]
|
||||
|
||||
result = await dispatch_proxy_request(
|
||||
request, mock_session, mock_auth, client=mock_client
|
||||
)
|
||||
|
||||
assert result["success"] is True
|
||||
assert result["data"]["record_ids"] == [1, 2, 3]
|
||||
mock_client.add_records.assert_called_once_with("Orders", [{"item": "Widget"}])
|
||||
|
||||
Reference in New Issue
Block a user