tests/test_settings_control.py
text
from __future__ import annotations
from pathlib import Path
from apps.whatsapp_control_api.app.services.env_manager import redact_sensitive_assignments
from apps.whatsapp_control_api.app.services.settings_control import (
apply_app_settings,
apply_project_settings,
parse_control_command,
)
from apps.whatsapp_control_api.app.core.config import get_settings
def test_parse_app_settings_command() -> None:
command = parse_control_command("settings set CHAT_PROVIDER=openrouter CHAT_MODEL=gpt-4o-mini")
assert command is not None
assert command.scope == "app"
assert command.action == "set"
assert command.assignments["CHAT_PROVIDER"] == "openrouter"
def test_parse_web_search_settings_command() -> None:
command = parse_control_command("settings set WEB_SEARCH_ENABLED=true WEB_SEARCH_PROVIDER=bing")
assert command is not None
assert command.scope == "app"
assert command.assignments["WEB_SEARCH_ENABLED"] == "true"
assert command.assignments["WEB_SEARCH_PROVIDER"] == "bing"
def test_parse_dashboard_admin_token_setting() -> None:
command = parse_control_command("settings set DASHBOARD_ADMIN_TOKEN=secret-dashboard-token")
assert command is not None
assert command.assignments["DASHBOARD_ADMIN_TOKEN"] == "secret-dashboard-token"
def test_redact_sensitive_assignments() -> None:
redacted = redact_sensitive_assignments("CHAT_API_KEY=secret123 CHAT_MODEL=gpt-4o-mini")
assert "secret123" not in redacted
assert "[redacted]" in redacted
def test_apply_app_settings_writes_env_file(tmp_path: Path, monkeypatch) -> None:
monkeypatch.chdir(tmp_path)
apply_app_settings({"CHAT_PROVIDER": "openrouter", "CHAT_MODEL": "gpt-4o-mini"})
env_path = tmp_path / ".env"
assert env_path.exists()
content = env_path.read_text(encoding="utf-8")
assert "CHAT_PROVIDER=openrouter" in content
assert "CHAT_MODEL=gpt-4o-mini" in content
def test_apply_project_settings_writes_project_env(tmp_path: Path, monkeypatch) -> None:
projects_root = tmp_path / "projects"
project_dir = projects_root / "AI Assistants"
project_dir.mkdir(parents=True)
monkeypatch.setenv("HERMES_PROJECTS_ROOT", str(projects_root))
get_settings.cache_clear()
env_path = apply_project_settings("AI Assistants", {"OPENAI_API_KEY": "secret123"})
assert env_path.exists()
content = env_path.read_text(encoding="utf-8")
assert "OPENAI_API_KEY=secret123" in content