mirror of
https://github.com/jmagar/unraid-mcp.git
synced 2026-03-23 12:39:24 -07:00
feat(elicitation): add is_configured() and apply_runtime_config() to settings
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from unraid_mcp.core.exceptions import CredentialsNotConfiguredError, ToolError
|
from unraid_mcp.core.exceptions import CredentialsNotConfiguredError, ToolError
|
||||||
@@ -17,3 +19,36 @@ def test_credentials_not_configured_error_is_exception():
|
|||||||
def test_credentials_not_configured_error_is_not_tool_error():
|
def test_credentials_not_configured_error_is_not_tool_error():
|
||||||
"""CredentialsNotConfiguredError must NOT be a ToolError — it bypasses MCP protocol error handling."""
|
"""CredentialsNotConfiguredError must NOT be a ToolError — it bypasses MCP protocol error handling."""
|
||||||
assert not issubclass(CredentialsNotConfiguredError, ToolError)
|
assert not issubclass(CredentialsNotConfiguredError, ToolError)
|
||||||
|
|
||||||
|
|
||||||
|
def test_settings_is_configured_true():
|
||||||
|
from unraid_mcp.config import settings
|
||||||
|
|
||||||
|
with (
|
||||||
|
patch.object(settings, "UNRAID_API_URL", "https://example.com"),
|
||||||
|
patch.object(settings, "UNRAID_API_KEY", "key123"),
|
||||||
|
):
|
||||||
|
assert settings.is_configured() is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_settings_is_configured_false_when_missing():
|
||||||
|
from unraid_mcp.config import settings
|
||||||
|
|
||||||
|
with (
|
||||||
|
patch.object(settings, "UNRAID_API_URL", None),
|
||||||
|
patch.object(settings, "UNRAID_API_KEY", None),
|
||||||
|
):
|
||||||
|
assert settings.is_configured() is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_settings_apply_runtime_config_updates_module_globals():
|
||||||
|
from unraid_mcp.config import settings
|
||||||
|
|
||||||
|
original_url = settings.UNRAID_API_URL
|
||||||
|
original_key = settings.UNRAID_API_KEY
|
||||||
|
settings.apply_runtime_config("https://newurl.com/graphql", "newkey")
|
||||||
|
assert settings.UNRAID_API_URL == "https://newurl.com/graphql"
|
||||||
|
assert settings.UNRAID_API_KEY == "newkey"
|
||||||
|
# Reset so other tests are not affected
|
||||||
|
settings.UNRAID_API_URL = original_url
|
||||||
|
settings.UNRAID_API_KEY = original_key
|
||||||
|
|||||||
@@ -108,6 +108,24 @@ def validate_required_config() -> tuple[bool, list[str]]:
|
|||||||
return len(missing) == 0, missing
|
return len(missing) == 0, missing
|
||||||
|
|
||||||
|
|
||||||
|
def is_configured() -> bool:
|
||||||
|
"""Return True if both required credentials are present."""
|
||||||
|
return bool(UNRAID_API_URL and UNRAID_API_KEY)
|
||||||
|
|
||||||
|
|
||||||
|
def apply_runtime_config(api_url: str, api_key: str) -> None:
|
||||||
|
"""Update module-level credential globals at runtime (post-elicitation).
|
||||||
|
|
||||||
|
Also sets matching environment variables so submodules that read
|
||||||
|
os.getenv() after import see the new values.
|
||||||
|
"""
|
||||||
|
global UNRAID_API_URL, UNRAID_API_KEY
|
||||||
|
UNRAID_API_URL = api_url
|
||||||
|
UNRAID_API_KEY = api_key
|
||||||
|
os.environ["UNRAID_API_URL"] = api_url
|
||||||
|
os.environ["UNRAID_API_KEY"] = api_key
|
||||||
|
|
||||||
|
|
||||||
def get_config_summary() -> dict[str, Any]:
|
def get_config_summary() -> dict[str, Any]:
|
||||||
"""Get a summary of current configuration (safe for logging).
|
"""Get a summary of current configuration (safe for logging).
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user