Skip to main content
Glama
mm-repos

Azure AI Search MCP Server

by mm-repos
test_chain.py5.75 kB
"""Tests for Azure AI Search MCP Server.""" import pytest import asyncio import sys from pathlib import Path from unittest.mock import Mock, AsyncMock # Add src to path for imports sys.path.insert(0, str(Path(__file__).parent.parent / "src")) from azure_search_mcp.chain import AzureSearchChain, SearchState @pytest.mark.asyncio async def test_search_state_creation(): """Test SearchState creation.""" state = SearchState( query="test query", search_type="text", top_k=5, output_format="analysis", # Added missing parameter documents=[], context="", raw_context="", # Added missing parameter metadata={}, error=None ) assert state["query"] == "test query" assert state["search_type"] == "text" assert state["top_k"] == 5 assert state["output_format"] == "analysis" @pytest.mark.asyncio async def test_chain_validation(): """Test input validation in the chain.""" # Test that chain initializes successfully even without Google API key chain = AzureSearchChain() assert chain is not None assert chain.search_client is not None assert chain.graph is not None # Test that LLM is None when no API key is provided # (assuming GOOGLE_API_KEY is not set in test environment) assert chain.llm is None or chain.llm is not None # Either is valid # Test search state validation test_state = SearchState( query="", # Empty query should be caught search_type="text", top_k=5, output_format="analysis", # Added missing parameter documents=[], context="", raw_context="", # Added missing parameter metadata={}, error=None ) # Test validation logic validated_state = await chain._validate_input(test_state) assert validated_state["error"] == "Query cannot be empty" @pytest.mark.asyncio async def test_search_tool_functionality(): """Test the search tool functionality.""" # This is a placeholder test - would need actual Azure Search setup # or mocking to run properly pass @pytest.mark.asyncio async def test_run_method_with_different_formats(): """Test the new run() method with different output formats.""" chain = AzureSearchChain() # Test that the method accepts different output formats try: # These will fail without proper Azure setup, but we can test parameter handling formats = ["structured", "summary", "analysis"] for format_type in formats: # Test that the method can be called without errors in parameter validation initial_state = { "query": "test query", "search_type": "text", "top_k": 5, "output_format": format_type, "documents": [], "context": "", "raw_context": "", "metadata": {}, "error": None } # Test validation step validated = await chain._validate_input(initial_state) assert validated["error"] is None # Should pass validation except Exception as e: # Expected if Azure Search is not configured pass @pytest.mark.asyncio async def test_prompt_templates_exist(): """Test that all prompt templates are properly initialized.""" chain = AzureSearchChain() # Test that all three prompt templates exist assert hasattr(chain, 'structured_formatter_prompt') assert hasattr(chain, 'context_summarizer_prompt') assert hasattr(chain, 'relevance_analyzer_prompt') # Test that prompt templates have content assert chain.structured_formatter_prompt is not None assert chain.context_summarizer_prompt is not None assert chain.relevance_analyzer_prompt is not None @pytest.mark.asyncio async def test_routing_logic(): """Test the graph routing logic.""" chain = AzureSearchChain() # Test routing function with proper SearchState objects test_formats = ["structured", "summary", "analysis"] for format_type in test_formats: test_state = SearchState( query="test", search_type="text", top_k=5, output_format=format_type, documents=[], context="", raw_context="", metadata={}, error=None ) route = chain._route_to_processor(test_state) assert route in ["structured", "summary", "analysis"] assert route == format_type @pytest.mark.asyncio async def test_conditional_edges(): """Test graph conditional edge logic.""" chain = AzureSearchChain() # Test validation edge logic with proper SearchState objects valid_state = SearchState( query="test", search_type="text", top_k=5, output_format="analysis", documents=[], context="", raw_context="", metadata={}, error=None ) invalid_state = SearchState( query="test", search_type="text", top_k=5, output_format="analysis", documents=[], context="", raw_context="", metadata={}, error="Some error" ) assert chain._should_continue_after_validation(valid_state) == "continue" assert chain._should_continue_after_validation(invalid_state) == "error" # Test search edge logic assert chain._should_continue_after_search(valid_state) == "continue" assert chain._should_continue_after_search(invalid_state) == "error" if __name__ == "__main__": pytest.main([__file__])

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/mm-repos/langgraph-claude-azure-mcp'

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