birdcage/mcp/tests/test_resources.py

63 lines
1.9 KiB
Python
Raw Normal View History

"""Tests for MCP resources (config, position, firmware, motor-dynamics, el-limits)."""
import json
import pytest
from fastmcp import Client
@pytest.mark.anyio
async def test_config_resource(mcp_client: Client):
contents = await mcp_client.read_resource("birdcage://config")
data = json.loads(contents[0].text)
assert data["demo_mode"] is True
assert data["connected"] is True
assert data["firmware"] == "g2"
assert data["serial_port"] == "/dev/demo"
@pytest.mark.anyio
async def test_position_resource(mcp_client: Client):
contents = await mcp_client.read_resource("birdcage://position")
data = json.loads(contents[0].text)
assert "azimuth" in data
assert "elevation" in data
assert isinstance(data["azimuth"], float)
assert isinstance(data["elevation"], float)
# DemoDevice starts at AZ=180, EL=45 (approximately, with settling noise).
assert 170.0 < data["azimuth"] < 190.0
assert 35.0 < data["elevation"] < 55.0
@pytest.mark.anyio
async def test_firmware_resource(mcp_client: Client):
contents = await mcp_client.read_resource("birdcage://firmware")
text = contents[0].text
assert "02.02.48" in text
assert "TWELINCH" in text
assert "K60-144pin" in text
@pytest.mark.anyio
async def test_motor_dynamics_resource(mcp_client: Client):
contents = await mcp_client.read_resource("birdcage://motor-dynamics")
data = json.loads(contents[0].text)
assert data["az_max_vel"] == 65.0
assert data["el_max_vel"] == 45.0
assert data["az_accel"] == 400.0
assert data["el_accel"] == 400.0
@pytest.mark.anyio
async def test_el_limits_resource(mcp_client: Client):
contents = await mcp_client.read_resource("birdcage://el-limits")
data = json.loads(contents[0].text)
assert data["min"] == 18.0
assert data["max"] == 65.0
assert data["home"] == 65.0