fastmcp/tests/test_debug_settings.py
claude[bot] 139801718f Fix static analysis issues and address review feedback
- Fix unused variable in test (settings → _settings)
- Add type annotation for __context parameter
- Remove unused info parameter from validator
- Fix circular import with configure_logging
- Add production safety warnings to documentation

Co-authored-by: Bill Easton <strawgate@users.noreply.github.com>
2026-01-18 16:16:23 +00:00

86 lines
3.6 KiB
Python

"""Tests for debug and starlette_debug settings."""
import logging
from fastmcp.settings import Settings
from fastmcp.utilities.logging import get_logger
class TestDebugSettings:
"""Test debug and starlette_debug settings behavior."""
def test_debug_sets_log_level(self):
"""Test that enabling debug sets log_level to DEBUG."""
settings = Settings(debug=True, log_enabled=False)
assert settings.log_level == "DEBUG"
def test_debug_false_preserves_log_level(self):
"""Test that debug=False doesn't change log_level."""
settings = Settings(debug=False, log_level="INFO", log_enabled=False)
assert settings.log_level == "INFO"
def test_debug_with_explicit_log_level(self):
"""Test that debug=True overrides explicit log_level."""
# When debug is enabled, it forces log_level to DEBUG
settings = Settings(debug=True, log_level="WARNING", log_enabled=False)
assert settings.log_level == "DEBUG"
def test_starlette_debug_independent(self, monkeypatch):
"""Test that starlette_debug works independently."""
# Clear any env vars that might affect the test
monkeypatch.delenv("FASTMCP_LOG_LEVEL", raising=False)
settings = Settings(starlette_debug=True, log_enabled=False)
assert settings.starlette_debug is True
# log_level should not be affected (defaults to INFO)
assert settings.log_level == "INFO"
def test_both_debug_and_starlette_debug(self):
"""Test that both settings can be enabled together."""
settings = Settings(debug=True, starlette_debug=True, log_enabled=False)
assert settings.debug is True
assert settings.starlette_debug is True
assert settings.log_level == "DEBUG"
def test_debug_reconfigures_logging(self):
"""Test that enabling debug reconfigures logging."""
# Create a settings instance with debug enabled
_settings = Settings(debug=True, log_enabled=True)
# Verify logging was reconfigured
logger = get_logger("test")
assert logger.getEffectiveLevel() == logging.DEBUG
def test_debug_respects_log_enabled(self):
"""Test that debug respects log_enabled setting."""
# When log_enabled is False, logging should not be reconfigured
settings = Settings(debug=True, log_enabled=False)
assert settings.log_level == "DEBUG"
# Logger should not be reconfigured, but we can't easily test this
# without side effects
def test_starlette_debug_default_false(self):
"""Test that starlette_debug defaults to False."""
settings = Settings(log_enabled=False)
assert settings.starlette_debug is False
def test_debug_default_false(self):
"""Test that debug defaults to False."""
settings = Settings(log_enabled=False)
assert settings.debug is False
def test_env_var_debug(self, monkeypatch):
"""Test that FASTMCP_DEBUG environment variable works."""
monkeypatch.setenv("FASTMCP_DEBUG", "true")
settings = Settings(log_enabled=False)
assert settings.debug is True
assert settings.log_level == "DEBUG"
def test_env_var_starlette_debug(self, monkeypatch):
"""Test that FASTMCP_STARLETTE_DEBUG environment variable works."""
# Clear any env vars that might affect the test
monkeypatch.delenv("FASTMCP_LOG_LEVEL", raising=False)
monkeypatch.setenv("FASTMCP_STARLETTE_DEBUG", "true")
settings = Settings(log_enabled=False)
assert settings.starlette_debug is True
# log_level should not be affected (defaults to INFO)
assert settings.log_level == "INFO"