fix: add test for #176

This commit is contained in:
David Soria Parra
2025-01-28 11:19:13 +00:00
parent 76325b7846
commit 2dc5fbfa3d
2 changed files with 47 additions and 1 deletions

View File

@@ -0,0 +1,46 @@
from unittest.mock import AsyncMock, MagicMock
import pytest
from mcp.server.fastmcp import Context
from mcp.shared.context import RequestContext
pytestmark = pytest.mark.anyio
async def test_progress_token_zero_first_call():
"""Test that progress notifications work when progress_token is 0 on first call."""
# Create mock session with progress notification tracking
mock_session = AsyncMock()
mock_session.send_progress_notification = AsyncMock()
# Create request context with progress token 0
mock_meta = MagicMock()
mock_meta.progressToken = 0 # This is the key test case - token is 0
request_context = RequestContext(
request_id="test-request", session=mock_session, meta=mock_meta
)
# Create context with our mocks
ctx = Context(request_context=request_context, fastmcp=MagicMock())
# Test progress reporting
await ctx.report_progress(0, 10) # First call with 0
await ctx.report_progress(5, 10) # Middle progress
await ctx.report_progress(10, 10) # Complete
# Verify progress notifications
assert (
mock_session.send_progress_notification.call_count == 3
), "All progress notifications should be sent"
mock_session.send_progress_notification.assert_any_call(
progress_token=0, progress=0.0, total=10.0
)
mock_session.send_progress_notification.assert_any_call(
progress_token=0, progress=5.0, total=10.0
)
mock_session.send_progress_notification.assert_any_call(
progress_token=0, progress=10.0, total=10.0
)

View File

@@ -164,6 +164,7 @@ async def http_client(server, server_url) -> AsyncGenerator[httpx.AsyncClient, N
async def test_raw_sse_connection(http_client: httpx.AsyncClient) -> None: async def test_raw_sse_connection(http_client: httpx.AsyncClient) -> None:
"""Test the SSE connection establishment simply with an HTTP client.""" """Test the SSE connection establishment simply with an HTTP client."""
async with anyio.create_task_group(): async with anyio.create_task_group():
async def connection_test() -> None: async def connection_test() -> None:
async with http_client.stream("GET", "/sse") as response: async with http_client.stream("GET", "/sse") as response:
assert response.status_code == 200 assert response.status_code == 200
@@ -211,7 +212,6 @@ async def initialized_sse_client_session(
yield session yield session
@pytest.mark.anyio @pytest.mark.anyio
async def test_sse_client_happy_request_and_response( async def test_sse_client_happy_request_and_response(
initialized_sse_client_session: ClientSession, initialized_sse_client_session: ClientSession,