Skip to main content
Glama
test_server.py3.04 kB
import pytest from unittest.mock import patch, MagicMock from fastmcp import Client from mcp_tourism.server import mcp, get_api_client # Import necessary items from mcp_tourism.api_client import KoreaTourismApiClient # Fixture to reset the global API client before each test that needs it @pytest.fixture(autouse=True) def reset_global_client(): global server_api_client server_api_client = None # Fixture to provide a mocked API client instance @pytest.fixture def mock_api_client(): mock_client = MagicMock(spec=KoreaTourismApiClient) mock_client._ensure_full_initialization = MagicMock() # Mock this method too return mock_client @pytest.mark.asyncio @patch("mcp_tourism.server.get_api_client") async def test_search_tourism_invalid_content_type( mock_get_api_client, mock_api_client, monkeypatch ): """ Test that search_tourism_by_keyword raises ValueError for invalid content_type. """ # Set up environment variables for testing monkeypatch.setenv("KOREA_TOURISM_API_KEY", "test-api-key-12345") # Configure the mock get_api_client to return our fixture mock_api_client mock_get_api_client.return_value = mock_api_client invalid_type = "InvalidContentType" keyword = "Test" # Create a client connected to our server client = Client(mcp) async with client: # Call the search tool with invalid content_type with pytest.raises(Exception) as excinfo: await client.call_tool( "search_tourism_by_keyword", {"keyword": keyword, "content_type": invalid_type}, ) # Check that the error message contains the invalid type and mentions valid types assert invalid_type in str(excinfo.value) assert "Valid types are:" in str(excinfo.value) # Ensure the underlying client method was NOT called mock_api_client.search_by_keyword.assert_not_called() @pytest.mark.parametrize( "env_var, invalid_value", [ ("MCP_TOURISM_CACHE_TTL", "not-an-int"), ("MCP_TOURISM_RATE_LIMIT_CALLS", "five"), ("MCP_TOURISM_RATE_LIMIT_PERIOD", "one_sec"), ("MCP_TOURISM_CONCURRENCY_LIMIT", "10.5"), ], ) def test_get_api_client_invalid_env_var(monkeypatch, env_var, invalid_value): """ Test that get_api_client raises ValueError if env vars for int configs are invalid. """ # Set a valid API key to avoid raising error for that monkeypatch.setenv("KOREA_TOURISM_API_KEY", "valid-key-for-test") # Set the invalid environment variable monkeypatch.setenv(env_var, invalid_value) # The 'reset_global_client' fixture with autouse=True automatically runs before this test, # ensuring server_api_client is None. # Calling get_api_client should raise ValueError during int conversion with pytest.raises(ValueError) as excinfo: get_api_client() # More flexible assertion: Check if the invalid value is mentioned in the error message. assert invalid_value in str(excinfo.value)

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/harimkang/mcp-korea-tourism-api'

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