Spaces:
Running
Running
File size: 3,395 Bytes
8043a77 a5dd87c 8043a77 a5dd87c 8043a77 a5dd87c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | import warnings
from unittest.mock import MagicMock, patch
import pytest
from mcp.types import ModelPreferences
from starlette.requests import Request
from fastmcp.server.context import Context
from fastmcp.server.server import FastMCP
class TestContextDeprecations:
def test_get_http_request_deprecation_warning(self):
"""Test that using Context.get_http_request() raises a deprecation warning."""
# Create a mock FastMCP instance
mock_fastmcp = MagicMock()
context = Context(fastmcp=mock_fastmcp)
# Patch the dependency function to return a mock request
mock_request = MagicMock(spec=Request)
with patch(
"fastmcp.server.dependencies.get_http_request", return_value=mock_request
):
# Check that the deprecation warning is raised
with pytest.warns(
DeprecationWarning, match="Context.get_http_request\\(\\) is deprecated"
):
request = context.get_http_request()
# Verify the function still works and returns the request
assert request is mock_request
def test_get_http_request_deprecation_message(self):
"""Test that the deprecation warning has the correct message with guidance."""
# Create a mock FastMCP instance
mock_fastmcp = MagicMock()
context = Context(fastmcp=mock_fastmcp)
# Patch the dependency function to return a mock request
mock_request = MagicMock(spec=Request)
with patch(
"fastmcp.server.dependencies.get_http_request", return_value=mock_request
):
# Capture and check the specific warning message
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
context.get_http_request()
assert len(w) == 1
warning = w[0]
assert issubclass(warning.category, DeprecationWarning)
assert "Context.get_http_request() is deprecated" in str(
warning.message
)
assert (
"Use get_http_request() from fastmcp.server.dependencies instead"
in str(warning.message)
)
assert "https://gofastmcp.com/patterns/http-requests" in str(
warning.message
)
@pytest.fixture
def context():
return Context(fastmcp=FastMCP())
class TestParseModelPreferences:
def test_parse_model_preferences_string(self, context):
mp = context._parse_model_preferences("claude-3-sonnet")
assert isinstance(mp, ModelPreferences)
assert mp.hints is not None
assert mp.hints[0].name == "claude-3-sonnet"
def test_parse_model_preferences_list(self, context):
mp = context._parse_model_preferences(["claude-3-sonnet", "claude"])
assert isinstance(mp, ModelPreferences)
assert mp.hints is not None
assert [h.name for h in mp.hints] == ["claude-3-sonnet", "claude"]
def test_parse_model_preferences_object(self, context):
obj = ModelPreferences(hints=[])
assert context._parse_model_preferences(obj) is obj
def test_parse_model_preferences_invalid_type(self, context):
with pytest.raises(ValueError):
context._parse_model_preferences(123)
|