Skip to main content
Glama
test_docstring_validation.py2.71 kB
""" Integration test to validate that all FI functions have proper docstrings. """ import pytest from fi_mcp.introspection import get_fi_functions from fi_mcp.schema_generator import _get_function_description, generate_mcp_tool_schema def test_all_fi_functions_have_docstrings(): """Test that every FI function has a valid docstring with description.""" fi_functions = get_fi_functions() missing_docstrings = [] invalid_docstrings = [] for func_name, func in fi_functions.items(): try: description = _get_function_description(func.__doc__) # Verify description is not empty after normalization assert description, f"{func_name} has empty description" except ValueError as e: if "missing a docstring" in str(e): missing_docstrings.append(func_name) elif "no description section" in str(e): invalid_docstrings.append(func_name) else: raise # Report any functions with issues error_messages = [] if missing_docstrings: error_messages.append( f"Functions missing docstrings: {', '.join(missing_docstrings)}" ) if invalid_docstrings: error_messages.append( f"Functions with invalid docstrings: {', '.join(invalid_docstrings)}" ) if error_messages: pytest.fail("\n".join(error_messages)) def test_schema_generation_with_valid_docstring(): """Test that schema generation works for functions with valid docstrings.""" fi_functions = get_fi_functions() # Test with a known function that should have a good docstring func = fi_functions['annual_cost'] schema = generate_mcp_tool_schema('annual_cost', func) assert schema['name'] == 'fi_annual_cost' assert 'description' in schema assert len(schema['description']) > 0 assert 'depreciation' in schema['description'].lower() def test_missing_docstring_raises_error(): """Test that a function without a docstring raises ValueError.""" # Create a function without a docstring def func_without_docstring(x: int) -> int: return x * 2 with pytest.raises(ValueError, match="missing a docstring"): _get_function_description(func_without_docstring.__doc__) def test_empty_description_raises_error(): """Test that a docstring with no description section raises ValueError.""" # Docstring with only Args and Returns, no description docstring = """ ### Args: - **x**: some value ### Returns: The result """ with pytest.raises(ValueError, match="no description section"): _get_function_description(docstring)

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/bbusenius/FI-MCP'

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