Skip to main content
Glama

Sumanshu Arora

test_config.pyβ€’9.99 kB
#!/usr/bin/env python3 """ Tests for Zendesk MCP Server Configuration Test suite for configuration management, validation, and environment variable handling. """ import json import os import sys from unittest.mock import mock_open, patch import pytest sys.path.append(os.path.dirname(os.path.dirname(__file__))) from config import ZendeskServerConfig class TestZendeskServerConfig: """Test cases for ZendeskServerConfig class.""" @pytest.fixture def sample_template_data(self): """Sample template data for testing.""" return { "name": "Zendesk MCP Server", "version": "1.0.0", "config_schema": { "type": "object", "properties": { "zendesk_subdomain": { "type": "string", "env_mapping": "ZENDESK_SUBDOMAIN", }, "zendesk_email": {"type": "string", "env_mapping": "ZENDESK_EMAIL"}, "zendesk_api_token": { "type": "string", "env_mapping": "ZENDESK_API_TOKEN", "sensitive": True, }, "rate_limit_requests": { "type": "integer", "default": 200, "env_mapping": "ZENDESK_RATE_LIMIT", }, "log_level": { "type": "string", "enum": ["debug", "info", "warning", "error"], "default": "info", "env_mapping": "MCP_LOG_LEVEL", }, }, "required": ["zendesk_subdomain", "zendesk_email"], }, } @pytest.fixture def mock_template_file(self, sample_template_data): """Mock template.json file.""" template_json = json.dumps(sample_template_data) with patch("builtins.open", mock_open(read_data=template_json)): with patch("pathlib.Path.exists", return_value=True): yield template_json def test_config_initialization(self, mock_template_file): """Test basic configuration initialization.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", } ) assert config.config_dict["zendesk_subdomain"] == "test" assert config.config_dict["zendesk_email"] == "test@example.com" def test_environment_variable_loading(self, mock_template_file): """Test loading configuration from environment variables.""" with patch.dict( os.environ, { "ZENDESK_SUBDOMAIN": "testenv", "ZENDESK_EMAIL": "testenv@example.com", "ZENDESK_RATE_LIMIT": "150", }, ): config = ZendeskServerConfig() template_config = config.get_template_config() assert template_config["zendesk_subdomain"] == "testenv" assert template_config["zendesk_email"] == "testenv@example.com" assert template_config["rate_limit_requests"] == 150 def test_config_dict_overrides_env_vars(self, mock_template_file): """Test that config_dict takes precedence over environment variables.""" with patch.dict( os.environ, {"ZENDESK_SUBDOMAIN": "testenv", "ZENDESK_EMAIL": "testenv@example.com"}, ): config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "testconfig", "zendesk_email": "testconfig@example.com", } ) template_config = config.get_template_config() assert template_config["zendesk_subdomain"] == "testconfig" assert template_config["zendesk_email"] == "testconfig@example.com" def test_type_coercion(self, mock_template_file): """Test automatic type coercion for environment variables.""" with patch.dict( os.environ, { "ZENDESK_SUBDOMAIN": "test", "ZENDESK_EMAIL": "test@example.com", "ZENDESK_RATE_LIMIT": "300", }, ): config = ZendeskServerConfig() template_config = config.get_template_config() assert isinstance(template_config["rate_limit_requests"], int) assert template_config["rate_limit_requests"] == 300 def test_get_zendesk_url(self, mock_template_file): """Test Zendesk URL generation.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "mycompany", "zendesk_email": "test@example.com", } ) assert config.get_zendesk_url() == "https://mycompany.zendesk.com" def test_get_auth_headers_api_token(self, mock_template_file): """Test authentication headers with API token.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", "zendesk_api_token": "secret123", } ) headers = config.get_auth_headers() assert "Authorization" in headers assert headers["Authorization"].startswith("Basic ") assert headers["Content-Type"] == "application/json" def test_get_auth_headers_oauth_token(self, mock_template_file): """Test authentication headers with OAuth token.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", "zendesk_oauth_token": "oauth123", } ) headers = config.get_auth_headers() assert "Authorization" in headers assert headers["Authorization"] == "Bearer oauth123" def test_get_rate_limit_config(self, mock_template_file): """Test rate limit configuration retrieval.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", "rate_limit_requests": 150, "timeout_seconds": 45, } ) rate_config = config.get_rate_limit_config() assert rate_config["requests_per_minute"] == 150 assert rate_config["timeout_seconds"] == 45 def test_get_cache_config(self, mock_template_file): """Test cache configuration retrieval.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", "enable_cache": False, "cache_ttl_seconds": 600, } ) cache_config = config.get_cache_config() assert cache_config["enabled"] is False assert cache_config["ttl_seconds"] == 600 def test_get_default_ticket_config(self, mock_template_file): """Test default ticket configuration retrieval.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", "default_ticket_priority": "high", "default_ticket_type": "incident", } ) ticket_config = config.get_default_ticket_config() assert ticket_config["priority"] == "high" assert ticket_config["type"] == "incident" def test_is_sensitive_field(self, mock_template_file): """Test sensitive field detection.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", } ) assert config.is_sensitive_field("zendesk_api_token") is True assert config.is_sensitive_field("zendesk_subdomain") is False def test_get_sanitized_config(self, mock_template_file): """Test sanitized configuration output.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", "zendesk_api_token": "secret123", } ) sanitized = config.get_sanitized_config() assert sanitized["zendesk_subdomain"] == "test" assert sanitized["zendesk_api_token"] == "********" def test_nested_config_processing(self, mock_template_file): """Test double underscore notation processing.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", "tools__0__custom_field": "custom_value", "transport__port": 8080, } ) template_data = config.get_template_data() # Check if nested updates were applied # Note: This depends on the template having tools array if "tools" in template_data and len(template_data["tools"]) > 0: assert template_data["tools"][0].get("custom_field") == "custom_value" def test_defaults_from_schema(self, mock_template_file): """Test that defaults are properly loaded from schema.""" config = ZendeskServerConfig( config_dict={ "zendesk_subdomain": "test", "zendesk_email": "test@example.com", } ) template_config = config.get_template_config() assert template_config["rate_limit_requests"] == 200 # Default from schema assert template_config["log_level"] == "info" # Default from schema if __name__ == "__main__": pytest.main([__file__])

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/Data-Everything/mcp-server-templates'

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