diff --git a/tests/gateway/test_env_flag_truthy.py b/tests/gateway/test_env_flag_truthy.py new file mode 100644 index 000000000..9095dd703 --- /dev/null +++ b/tests/gateway/test_env_flag_truthy.py @@ -0,0 +1,49 @@ +"""Env flags accept 'on' as truthy consistently (salvage of #2863). + +Behavior contract: every env-driven enable flag in gateway config coerces +through the shared TRUTHY_STRINGS set, so "on" behaves like "1"/"true"/"yes". +""" + +import os +from unittest.mock import patch + +from utils import TRUTHY_STRINGS, env_var_enabled + + +def test_truthy_strings_include_on(): + assert "on" in TRUTHY_STRINGS + + +def test_env_var_enabled_accepts_on(): + with patch.dict(os.environ, {"WHATSAPP_ENABLED": "on"}): + assert env_var_enabled("WHATSAPP_ENABLED") is True + + +def test_env_var_enabled_default_respected(): + with patch.dict(os.environ, {}, clear=False): + os.environ.pop("SIGNAL_IGNORE_STORIES", None) + assert env_var_enabled("SIGNAL_IGNORE_STORIES", "true") is True + assert env_var_enabled("SIGNAL_IGNORE_STORIES") is False + + +def test_gateway_config_flags_use_shared_helper(): + """Invariant: no env-flag site in gateway/config.py hand-rolls a truthy + set that omits 'on'.""" + import inspect + + import gateway.config as gc + + src = inspect.getsource(gc) + for pattern in ('in {"true", "1", "yes"}', 'in ("true", "1", "yes")'): + assert pattern not in src, f"hand-rolled truthy set without 'on': {pattern}" + + +def test_desktop_gate_accepts_on(): + from tools.close_terminal_tool import check_close_terminal_requirements + from tools.read_terminal_tool import check_read_terminal_requirements + + with patch.dict(os.environ, {"HERMES_DESKTOP": "on"}): + assert check_read_terminal_requirements() is True + assert check_close_terminal_requirements() is True + with patch.dict(os.environ, {"HERMES_DESKTOP": "off"}): + assert check_read_terminal_requirements() is False