Skip to main content
Glama
test_validate.py4.63 kB
"""Tests for mcp_validate tool.""" import pytest from unittest.mock import AsyncMock, patch class TestMcpValidate: """Test validation functionality.""" @pytest.mark.asyncio async def test_validate_invalid_tool(self): """Test validation of invalid tool name.""" from mcp_copyq.tools.validate import mcp_validate result = await mcp_validate(tool="invalid", params={}) assert "valid:false" in result assert "INVALID_TOOL" in result @pytest.mark.asyncio async def test_validate_read_missing_mode(self): """Test validation of read without mode.""" from mcp_copyq.tools.validate import mcp_validate result = await mcp_validate(tool="read", params={}) assert "valid:false" in result assert "MISSING_PARAM" in result assert "mode" in result @pytest.mark.asyncio async def test_validate_read_valid_tree(self): """Test validation of valid tree read.""" from mcp_copyq.tools.validate import mcp_validate result = await mcp_validate( tool="read", params={"mode": "tree", "max_depth": 2} ) assert "valid:true" in result assert "estimated_tokens" in result @pytest.mark.asyncio async def test_validate_read_list_missing_tab(self): """Test validation of list mode without tab.""" from mcp_copyq.tools.validate import mcp_validate result = await mcp_validate( tool="read", params={"mode": "list"} ) assert "valid:false" in result assert "tab" in result @pytest.mark.asyncio async def test_validate_read_item_tab_not_found(self): """Test validation with non-existent tab.""" from mcp_copyq.tools.validate import mcp_validate with patch("mcp_copyq.tools.validate.client") as mock: mock.tab_exists = AsyncMock(return_value=False) result = await mcp_validate( tool="read", params={"mode": "item", "tab": "nonexistent", "index": 0} ) assert "valid:false" in result assert "TAB_NOT_FOUND" in result @pytest.mark.asyncio async def test_validate_read_index_out_of_bounds(self): """Test validation with invalid index.""" from mcp_copyq.tools.validate import mcp_validate with patch("mcp_copyq.tools.validate.client") as mock: mock.tab_exists = AsyncMock(return_value=True) mock.get_count = AsyncMock(return_value=5) result = await mcp_validate( tool="read", params={"mode": "item", "tab": "info", "index": 10} ) assert "valid:false" in result assert "INDEX_OUT_OF_BOUNDS" in result @pytest.mark.asyncio async def test_validate_write_add_valid(self): """Test validation of valid add.""" from mcp_copyq.tools.validate import mcp_validate result = await mcp_validate( tool="write", params={"mode": "add", "tab": "info", "text": "New item"} ) assert "valid:true" in result @pytest.mark.asyncio async def test_validate_write_update_missing_field(self): """Test validation of update without field.""" from mcp_copyq.tools.validate import mcp_validate with patch("mcp_copyq.tools.validate.client") as mock: mock.tab_exists = AsyncMock(return_value=True) mock.get_count = AsyncMock(return_value=5) result = await mcp_validate( tool="write", params={"mode": "update", "tab": "info", "index": 0} ) assert "valid:false" in result assert "field" in result @pytest.mark.asyncio async def test_validate_write_tab_create_permission(self): """Test validation of tab_create permission.""" from mcp_copyq.tools.validate import mcp_validate result = await mcp_validate( tool="write", params={"mode": "tab_create", "path": "info/subtab"} ) assert "valid:false" in result assert "PERMISSION_DENIED" in result @pytest.mark.asyncio async def test_validate_warnings(self): """Test validation returns warnings.""" from mcp_copyq.tools.validate import mcp_validate result = await mcp_validate( tool="read", params={"mode": "tree", "max_depth": 15} # exceeds limit ) # Should still be valid but with warning assert "valid:true" in result assert "warnings" in result

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/list91/mcp-copyq'

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