mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-09 15:19:10 +02:00
98 lines
3.6 KiB
Python
98 lines
3.6 KiB
Python
"""Test experimental OpenAPI parser feature flag behavior."""
|
|
|
|
import httpx
|
|
import pytest
|
|
from fastapi import FastAPI
|
|
|
|
from fastmcp import FastMCP
|
|
from fastmcp.experimental.server.openapi import (
|
|
FastMCPOpenAPI as ExperimentalFastMCPOpenAPI,
|
|
)
|
|
from fastmcp.server.openapi import FastMCPOpenAPI as LegacyFastMCPOpenAPI
|
|
from fastmcp.utilities.tests import temporary_settings
|
|
|
|
|
|
class TestOpenAPIExperimentalFeatureFlag:
|
|
"""Test experimental OpenAPI parser feature flag behavior."""
|
|
|
|
@pytest.fixture
|
|
def simple_openapi_spec(self):
|
|
"""Simple OpenAPI spec for testing."""
|
|
return {
|
|
"openapi": "3.0.0",
|
|
"info": {"title": "Test API", "version": "1.0.0"},
|
|
"paths": {
|
|
"/test": {
|
|
"get": {
|
|
"operationId": "test_operation",
|
|
"summary": "Test operation",
|
|
"responses": {"200": {"description": "Success"}},
|
|
}
|
|
}
|
|
},
|
|
}
|
|
|
|
@pytest.fixture
|
|
def mock_client(self):
|
|
"""Mock HTTP client."""
|
|
return httpx.AsyncClient(base_url="https://api.example.com")
|
|
|
|
def test_from_openapi_uses_legacy_by_default(
|
|
self, simple_openapi_spec, mock_client
|
|
):
|
|
"""Test that from_openapi uses legacy parser by default."""
|
|
# Create server using from_openapi (should use legacy by default)
|
|
server = FastMCP.from_openapi(
|
|
openapi_spec=simple_openapi_spec, client=mock_client
|
|
)
|
|
|
|
# Should be the legacy implementation
|
|
assert isinstance(server, LegacyFastMCPOpenAPI)
|
|
# Note: Log message "Using legacy OpenAPI parser..." is emitted during creation
|
|
|
|
def test_from_openapi_uses_experimental_with_flag(
|
|
self, simple_openapi_spec, mock_client
|
|
):
|
|
"""Test that from_openapi uses experimental parser with flag enabled."""
|
|
# Create server with experimental flag enabled
|
|
with temporary_settings(experimental__enable_new_openapi_parser=True):
|
|
server = FastMCP.from_openapi(
|
|
openapi_spec=simple_openapi_spec, client=mock_client
|
|
)
|
|
|
|
# Should be the experimental implementation
|
|
assert isinstance(server, ExperimentalFastMCPOpenAPI)
|
|
# Note: No log message should be emitted when using experimental parser
|
|
|
|
def test_from_fastapi_uses_legacy_by_default(self):
|
|
"""Test that from_fastapi uses legacy parser by default."""
|
|
# Create a simple FastAPI app
|
|
app = FastAPI(title="Test API")
|
|
|
|
@app.get("/test")
|
|
def test_endpoint():
|
|
return {"message": "test"}
|
|
|
|
# Create server using from_fastapi (should use legacy by default)
|
|
server = FastMCP.from_fastapi(app=app)
|
|
|
|
# Should be the legacy implementation
|
|
assert isinstance(server, LegacyFastMCPOpenAPI)
|
|
# Note: Log message "Using legacy OpenAPI parser..." is emitted during creation
|
|
|
|
def test_from_fastapi_uses_experimental_with_flag(self):
|
|
"""Test that from_fastapi uses experimental parser with flag enabled."""
|
|
# Create a simple FastAPI app
|
|
app = FastAPI(title="Test API")
|
|
|
|
@app.get("/test")
|
|
def test_endpoint():
|
|
return {"message": "test"}
|
|
|
|
# Create server with experimental flag enabled
|
|
with temporary_settings(experimental__enable_new_openapi_parser=True):
|
|
server = FastMCP.from_fastapi(app=app)
|
|
|
|
# Should be the experimental implementation
|
|
assert isinstance(server, ExperimentalFastMCPOpenAPI)
|
|
# Note: No log message should be emitted when using experimental parser
|