from types import SimpleNamespace from unittest.mock import patch from hermes_cli.config import ( format_managed_message, get_managed_system, recommended_update_command, ) from hermes_cli.main import cmd_update from tools.skills_hub import OptionalSkillSource def test_get_managed_system_homebrew(monkeypatch): monkeypatch.setenv("HERMES_MANAGED", "homebrew") assert get_managed_system() == "Homebrew" assert recommended_update_command() == "brew upgrade hermes-agent" def test_format_managed_message_homebrew(monkeypatch): monkeypatch.setenv("HERMES_MANAGED", "homebrew") message = format_managed_message("update Hermes Agent") assert "managed by Homebrew" in message assert "brew upgrade hermes-agent" in message def test_recommended_update_command_defaults_to_hermes_update(monkeypatch): monkeypatch.delenv("HERMES_MANAGED", raising=False) assert recommended_update_command() == "hermes update" def test_cmd_update_blocks_managed_homebrew(monkeypatch, capsys): monkeypatch.setenv("HERMES_MANAGED", "homebrew") with patch("hermes_cli.main.subprocess.run") as mock_run: cmd_update(SimpleNamespace()) assert not mock_run.called captured = capsys.readouterr() assert "managed by Homebrew" in captured.err assert "brew upgrade hermes-agent" in captured.err def test_optional_skill_source_honors_env_override(monkeypatch, tmp_path): optional_dir = tmp_path / "optional-skills" optional_dir.mkdir() monkeypatch.setenv("HERMES_OPTIONAL_SKILLS", str(optional_dir)) source = OptionalSkillSource() assert source._optional_dir == optional_dir