mirror of
https://github.com/aljazceru/mcp-python-sdk.git
synced 2025-12-18 22:44:20 +01:00
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
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,
|
|
lifespan_context=None,
|
|
)
|
|
|
|
# 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, message=None)
|
|
mock_session.send_progress_notification.assert_any_call(progress_token=0, progress=5.0, total=10.0, message=None)
|
|
mock_session.send_progress_notification.assert_any_call(progress_token=0, progress=10.0, total=10.0, message=None)
|