import os import sys from typing import Optional import pytest PLUGIN_ROOT = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, PLUGIN_ROOT) sys.path.insert(0, "/opt/hermes") sys.path.insert(0, "/root/.hermes/plugins/platforms/chatto") from platform_config import ( _get_env_or_extra_str, _get_env_or_extra_truthy, _split_str_to_list, _get_env_or_extra_list, ) class TestPlatformConfigHelpers: """Test Chatto configuration helper functions.""" def test_get_env_or_extra_str_prefers_env(self, monkeypatch): monkeypatch.setenv("CHATTO_TEST", " env-value ") assert _get_env_or_extra_str("CHATTO_TEST", "extra-value") == "env-value" def test_get_env_or_extra_str_uses_extra_when_no_env(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_str("CHATTO_TEST", " extra-value ") == "extra-value" def test_get_env_or_extra_str_returns_none_when_missing(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_str("CHATTO_TEST", None) is None def test_get_env_or_extra_truthy_parses_truthy_values(self, monkeypatch): monkeypatch.setenv("CHATTO_TEST", " yes ") assert _get_env_or_extra_truthy("CHATTO_TEST", None) is True def test_get_env_or_extra_truthy_uses_extra_when_no_env(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_truthy("CHATTO_TEST", " true ") is True def test_get_env_or_extra_truthy_uses_default_false(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_truthy("CHATTO_TEST", "false") is False def test_get_env_or_extra_truthy_default_true_when_none_and_no_extra(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_truthy("CHATTO_TEST", None, default=True) is True def test_get_env_or_extra_truthy_default_false_when_none_and_no_extra(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_truthy("CHATTO_TEST", None, default=False) is False def test_get_env_or_extra_truthy_explicit_bool_true(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_truthy("CHATTO_TEST", True, default=False) is True def test_get_env_or_extra_truthy_explicit_bool_false(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_truthy("CHATTO_TEST", False, default=True) is False def test_split_str_to_list_handles_comma_separated_values(self): assert _split_str_to_list("a,b, c ,d") == ["a", "b", "c", "d"] def test_get_env_or_extra_list_prefers_env(self, monkeypatch): monkeypatch.setenv("CHATTO_TEST", " one,two , three") assert _get_env_or_extra_list("CHATTO_TEST", ["ignored", "list"]) == ["one", "two", "three"] def test_get_env_or_extra_list_uses_extra_list(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_list("CHATTO_TEST", ["a", " b "]) == ["a", "b"] def test_get_env_or_extra_list_uses_extra_string(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_list("CHATTO_TEST", "x,y") == ["x", "y"] def test_get_env_or_extra_list_returns_empty_for_none(self, monkeypatch): monkeypatch.delenv("CHATTO_TEST", raising=False) assert _get_env_or_extra_list("CHATTO_TEST", None) == []