Skip to main content
Glama
test_state_manager_extended.py5.66 kB
"""Extended unit tests for state manager.""" import pytest from robotics_mcp.utils.state_manager import RobotStateManager, RobotState def test_robot_state_to_dict(): """Test robot state serialization.""" robot = RobotState( robot_id="test_01", robot_type="scout", platform="unity", connected=True, metadata={"key": "value"} ) data = robot.to_dict() assert data["robot_id"] == "test_01" assert data["robot_type"] == "scout" assert data["platform"] == "unity" assert data["connected"] is True assert data["is_virtual"] is True assert data["metadata"]["key"] == "value" def test_robot_state_physical(): """Test physical robot state (no platform).""" robot = RobotState( robot_id="scout_01", robot_type="scout", connected=False ) assert robot.is_virtual is False assert robot.platform is None assert robot.connected is False def test_robot_state_virtual(): """Test virtual robot state.""" robot = RobotState( robot_id="vbot_01", robot_type="scout", platform="unity" ) assert robot.is_virtual is True assert robot.platform == "unity" def test_state_manager_empty(): """Test empty state manager.""" manager = RobotStateManager() assert len(manager.list_robots()) == 0 assert manager.get_robot("nonexistent") is None def test_state_manager_register_multiple(): """Test registering multiple robots.""" manager = RobotStateManager() manager.register_robot("scout_01", "scout") manager.register_robot("scout_02", "scout") manager.register_robot("go2_01", "go2") manager.register_robot("vbot_01", "scout", platform="unity") robots = manager.list_robots() assert len(robots) == 4 def test_state_manager_filter_by_type(): """Test filtering robots by type.""" manager = RobotStateManager() manager.register_robot("scout_01", "scout") manager.register_robot("scout_02", "scout") manager.register_robot("go2_01", "go2") scouts = manager.list_robots(robot_type="scout") assert len(scouts) == 2 assert all(r.robot_type == "scout" for r in scouts) go2s = manager.list_robots(robot_type="go2") assert len(go2s) == 1 assert go2s[0].robot_type == "go2" def test_state_manager_filter_by_virtual(): """Test filtering robots by virtual/physical.""" manager = RobotStateManager() manager.register_robot("scout_01", "scout") manager.register_robot("vbot_01", "scout", platform="unity") manager.register_robot("vbot_02", "scout", platform="vrchat") physical = manager.list_robots(is_virtual=False) assert len(physical) == 1 assert physical[0].robot_id == "scout_01" virtual = manager.list_robots(is_virtual=True) assert len(virtual) == 2 assert all(r.is_virtual for r in virtual) def test_state_manager_filter_combined(): """Test combined filtering.""" manager = RobotStateManager() manager.register_robot("scout_01", "scout") manager.register_robot("vbot_scout_01", "scout", platform="unity") manager.register_robot("vbot_go2_01", "go2", platform="unity") # Filter: scout + virtual result = manager.list_robots(robot_type="scout", is_virtual=True) assert len(result) == 1 assert result[0].robot_id == "vbot_scout_01" def test_state_manager_update_status(): """Test updating robot connection status.""" manager = RobotStateManager() manager.register_robot("scout_01", "scout") robot = manager.get_robot("scout_01") assert robot.connected is False manager.update_robot_status("scout_01", connected=True) robot = manager.get_robot("scout_01") assert robot.connected is True manager.update_robot_status("scout_01", connected=False) robot = manager.get_robot("scout_01") assert robot.connected is False def test_state_manager_update_status_nonexistent(): """Test updating status of non-existent robot (should not crash).""" manager = RobotStateManager() # Should not raise exception manager.update_robot_status("nonexistent", connected=True) robot = manager.get_robot("nonexistent") assert robot is None def test_state_manager_unregister_nonexistent(): """Test unregistering non-existent robot (should not crash).""" manager = RobotStateManager() # Should not raise exception manager.unregister_robot("nonexistent") assert len(manager.list_robots()) == 0 def test_state_manager_register_with_metadata(): """Test registering robot with metadata.""" manager = RobotStateManager() metadata = { "position": {"x": 1.0, "y": 2.0, "z": 0.0}, "scale": 1.0, "spawned": True } robot = manager.register_robot( "vbot_01", "scout", platform="unity", metadata=metadata ) assert robot.metadata == metadata assert robot.metadata["position"]["x"] == 1.0 def test_state_manager_duplicate_id_raises(): """Test that duplicate robot ID raises ValueError.""" manager = RobotStateManager() manager.register_robot("scout_01", "scout") with pytest.raises(ValueError, match="already registered"): manager.register_robot("scout_01", "scout") def test_state_manager_metadata_default(): """Test that metadata defaults to empty dict.""" manager = RobotStateManager() robot = manager.register_robot("scout_01", "scout") assert robot.metadata == {} assert isinstance(robot.metadata, dict)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sandraschi/robotics-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server