Bot & Automation

AI Assistants

/root/hermes-projects/AI Assistants

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