mirror of
https://github.com/hanzoai/mcp.git
synced 2026-10-15 12:30:12 +00:00
119 lines
3.6 KiB
Python
119 lines
3.6 KiB
Python
"""Tests for parameter validation in Hanzo MCP tools."""
|
|
|
|
from hanzo_mcp.tools.common.validation import (
|
|
validate_parameter,
|
|
validate_parameters,
|
|
validate_path_parameter,
|
|
)
|
|
|
|
|
|
def test_validate_parameter_with_none():
|
|
"""Test validation of None parameters."""
|
|
result = validate_parameter(None, "test_param")
|
|
assert result.is_error
|
|
assert "test_param" in result.error_message
|
|
assert "None" in result.error_message
|
|
|
|
|
|
def test_validate_parameter_with_empty_string():
|
|
"""Test validation of empty string parameters."""
|
|
result = validate_parameter("", "test_param")
|
|
assert result.is_error
|
|
assert "test_param" in result.error_message
|
|
assert "empty string" in result.error_message
|
|
|
|
# Test with whitespace only
|
|
result = validate_parameter(" ", "test_param")
|
|
assert result.is_error
|
|
assert "test_param" in result.error_message
|
|
|
|
# Test with allow_empty=True
|
|
result = validate_parameter("", "test_param", allow_empty=True)
|
|
assert not result.is_error
|
|
|
|
|
|
def test_validate_parameter_with_empty_collections():
|
|
"""Test validation of empty collections."""
|
|
# Empty list
|
|
result = validate_parameter([], "test_list")
|
|
assert result.is_error
|
|
assert "test_list" in result.error_message
|
|
assert "empty list" in result.error_message
|
|
|
|
# Empty dict
|
|
result = validate_parameter({}, "test_dict")
|
|
assert result.is_error
|
|
assert "test_dict" in result.error_message
|
|
assert "empty dict" in result.error_message
|
|
|
|
# Allow empty collections
|
|
result = validate_parameter([], "test_list", allow_empty=True)
|
|
assert not result.is_error
|
|
|
|
|
|
def test_validate_parameter_with_valid_values():
|
|
"""Test validation of valid parameters."""
|
|
# Valid string
|
|
result = validate_parameter("hello", "test_param")
|
|
assert not result.is_error
|
|
|
|
# Valid list with items
|
|
result = validate_parameter([1, 2, 3], "test_list")
|
|
assert not result.is_error
|
|
|
|
# Valid dict with items
|
|
result = validate_parameter({"key": "value"}, "test_dict")
|
|
assert not result.is_error
|
|
|
|
# Valid zero value
|
|
result = validate_parameter(0, "test_zero")
|
|
assert not result.is_error
|
|
|
|
# Valid boolean False
|
|
result = validate_parameter(False, "test_bool")
|
|
assert not result.is_error
|
|
|
|
|
|
def test_validate_path_parameter():
|
|
"""Test validation of path parameters."""
|
|
# None path
|
|
result = validate_path_parameter(None)
|
|
assert result.is_error
|
|
assert "path" in result.error_message.lower() # Default name is 'path'
|
|
|
|
# Empty path
|
|
result = validate_path_parameter("")
|
|
assert result.is_error
|
|
assert "empty string" in result.error_message
|
|
|
|
# Whitespace only path
|
|
result = validate_path_parameter(" ")
|
|
assert result.is_error
|
|
|
|
# Valid path
|
|
result = validate_path_parameter("/valid/path")
|
|
assert not result.is_error
|
|
|
|
# Custom parameter name
|
|
result = validate_path_parameter(None, "project_dir")
|
|
assert result.is_error
|
|
assert "project_dir" in result.error_message
|
|
|
|
|
|
def test_validate_parameters():
|
|
"""Test validation of multiple parameters."""
|
|
# All valid parameters
|
|
result = validate_parameters(name="test", age=30, items=[1, 2, 3])
|
|
assert not result.is_error
|
|
|
|
# One invalid parameter
|
|
result = validate_parameters(name="test", age=None, items=[1, 2, 3])
|
|
assert result.is_error
|
|
assert "age" in result.error_message
|
|
|
|
# Multiple invalid parameters, but only first is reported
|
|
result = validate_parameters(name=None, age=None, items=[])
|
|
assert result.is_error
|
|
# The error message should contain one of the invalid parameters
|
|
assert any(param in result.error_message for param in ["name", "age", "items"])
|