mcp-server-unitycatalog
by ognis1205
Verified
"""Tests for the Settings configuration in the MCP Unity Catalog project.
This module contains unit tests for verifying that the application settings,
including environment variable parsing and CLI argument handling, are correctly
loaded and applied.
The tests ensure that:
- Required settings are properly initialized.
- Default values are correctly assigned.
- Environment variables and CLI arguments override defaults as expected.
License:
MIT License (c) 2025 Shingo OKAWA
"""
import os
import random
import sys
import pytest
from pydantic import ValidationError
from unittest.mock import patch
from mcp_server_unitycatalog.cli import get_settings
def test_cache(server: str, catalog: str, schema: str) -> None:
"""Tests that the settings object is cached and reused.
This test verifies that calling `get_settings()` multiple times
returns the same instance, ensuring that settings are properly
cached using `@lru_cache`.
Args:
server (str): The Unity Catalog server URL.
catalog (str): The catalog name within Unity Catalog.
schema (str): The schema name within the catalog.
Asserts:
The `get_settings()` function returns the same object instance
when called multiple times, confirming that caching works correctly.
"""
argv = [
"mcp-server-unitycatalog",
"--uc_server",
server,
"--uc_catalog",
catalog,
"--uc_schema",
schema,
]
with patch.object(sys, "argv", argv):
lhs = get_settings()
rhs = get_settings()
assert lhs is rhs
def test_arguments(server: str, catalog: str, schema: str) -> None:
"""Tests that missing required command-line arguments raise a ValidationError.
This test ensures that if any of the required arguments (`--uc_server`,
`--uc_catalog`, or `--uc_schema`) are missing from the command line input,
the configuration validation fails as expected.
Args:
server (str): The Unity Catalog server URL.
catalog (str): The catalog name within Unity Catalog.
schema (str): The schema name within the catalog.
Asserts:
- A `ValidationError` is raised when one of the required arguments is missing.
"""
argv = [
"mcp-server-unitycatalog",
"--uc_server",
server,
"--uc_catalog",
catalog,
"--uc_schema",
schema,
]
with patch.object(sys, "argv", argv):
settings = get_settings()
assert settings.uc_server == server
assert settings.uc_catalog == catalog
assert settings.uc_schema == schema
def test_required_arguments(server: str, catalog: str, schema: str) -> None:
""""""
argv = random.choice(
[
["mcp-server-unitycatalog", "--uc_catalog", catalog, "--uc_schema", schema],
["mcp-server-unitycatalog", "--uc_server", server, "--uc_schema", schema],
["mcp-server-unitycatalog", "--uc_server", server, "--uc_catalog", catalog],
]
)
with patch.object(sys, "argv", argv):
with pytest.raises(ValidationError) as exc_info:
settings = get_settings()
assert "Field required" in str(exc_info.value)