- README.md for all three packages (core, TUI, MCP) - pyproject.toml readme field for PyPI rendering - 8 new tests for MCP resources (5) and prompts (3) - Total MCP test coverage: 57 tests, 37 tools + 5 resources + 3 prompts
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
"""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
|