MediaRouter / tests /test_mcp_server.py
basyx's picture
Upload 437 files
7cc81cb verified
Raw
History Blame Contribute Delete
3.11 kB
from __future__ import annotations
from fastapi.testclient import TestClient
from app.container import build_container
from app.mcp.registry import (
AUDIO_TOOLS,
IMAGE_TOOLS,
PROBE_TOOLS,
SYSTEM_TOOLS,
TEMPLATE_TOOLS,
VIDEO_TOOLS,
WHISPER_TOOLS,
YTDLP_TOOLS,
MCPRegistry,
MediaInput,
)
from app.mcp.server import create_mcp_server
from main import create_app
async def test_mcp_registers_all_tools_resources_and_prompts(settings) -> None:
server = create_mcp_server(build_container(settings))
tools = {tool.name for tool in await server.list_tools()}
expected_tools = set(
VIDEO_TOOLS
+ AUDIO_TOOLS
+ IMAGE_TOOLS
+ WHISPER_TOOLS
+ YTDLP_TOOLS
+ PROBE_TOOLS
+ SYSTEM_TOOLS
+ TEMPLATE_TOOLS
)
expected_tools.update(
{
"social.list_providers",
"social.get_capabilities",
"social.list_media_assets",
"social.register_media_asset",
"social.list_accounts",
"social.get_account",
"social.create_post",
"social.publish_post",
"social.schedule_post",
"social.cancel_post",
"social.get_post",
"social.get_job",
"social.get_analytics",
"ai.capabilities",
"ai.generate",
"ai.list_jobs",
"ai.get_job",
"ai.cancel_job",
}
)
assert tools == expected_tools
resources = {str(resource.uri) for resource in await server.list_resources()}
assert resources == {
"media://operations",
"media://formats",
"media://codecs",
"media://health",
"media://configuration",
"media://version",
}
prompts = {prompt.name for prompt in await server.list_prompts()}
assert prompts == {
"compress_for_social_media",
"youtube_to_mp3",
"download_and_transcribe",
"generate_subtitles",
"extract_audio",
"make_thumbnail",
"probe_media",
"instagram_reel",
"tiktok_video",
"podcast_audio",
}
async def test_mcp_errors_use_safe_structured_envelope(settings) -> None:
registry = MCPRegistry(build_container(settings))
response = await registry.run_probe(
"probe_media",
MediaInput(temp_path=str(settings.temp_dir / "missing.mp4")),
)
assert response["success"] is False
assert response["request_id"]
assert response["processing_time"] >= 0
assert response["error"]["code"] == "INVALID_INPUT"
assert "traceback" not in str(response).lower()
def test_rest_and_mcp_coexist_in_one_application(settings) -> None:
application = create_app(settings)
mounts = {getattr(route, "path", None) for route in application.routes}
assert "/mcp" in mounts
with TestClient(application) as client:
response = client.get("/health")
assert response.status_code == 200
assert response.json()["success"] is True
assert application.state.mcp_server is not None