64 lines
2.3 KiB
Python
64 lines
2.3 KiB
Python
"""The desktop's Appearance switches, as the AGENT experiences them.
|
|
|
|
Each of these toggles decides whether a tool is in the model's schema at all,
|
|
so the contract under test is end to end: a real ``config.yaml`` in a temp
|
|
``HERMES_HOME``, read through the real config loader, answering a real
|
|
``check_fn``. Mocking the loader here would test nothing that matters — the
|
|
whole failure this guards against was a value that never reached the config.
|
|
"""
|
|
|
|
import textwrap
|
|
|
|
import pytest
|
|
|
|
from hermes_constants import get_hermes_home
|
|
from tools import desktop_ui
|
|
from tools.react_to_message_tool import check_react_requirements
|
|
from tools.tip_tool import check_tips_enabled
|
|
from tools.tour_tool import check_tours_enabled
|
|
|
|
|
|
@pytest.fixture
|
|
def display_config():
|
|
"""Write a ``display:`` section into this test's HERMES_HOME."""
|
|
|
|
def _write(**flags: bool) -> None:
|
|
home = get_hermes_home()
|
|
home.mkdir(parents=True, exist_ok=True)
|
|
body = "".join(f" {name}: {str(on).lower()}\n" for name, on in flags.items())
|
|
(home / "config.yaml").write_text(textwrap.dedent("display:\n") + body)
|
|
|
|
return _write
|
|
|
|
|
|
def test_a_missing_setting_leaves_the_feature_at_its_default():
|
|
"""Absence is not an answer: an opt-out feature stays on, opt-in stays off."""
|
|
assert desktop_ui.user_enabled("in_app_tips", default=True) is True
|
|
assert desktop_ui.user_enabled("message_reactions", default=False) is False
|
|
|
|
|
|
def test_the_users_answer_wins_in_both_directions(display_config):
|
|
display_config(in_app_tips=False, message_reactions=True)
|
|
|
|
assert desktop_ui.user_enabled("in_app_tips", default=True) is False
|
|
assert desktop_ui.user_enabled("message_reactions", default=False) is True
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("setting", "check", "default_on"),
|
|
[
|
|
("in_app_tips", check_tips_enabled, True),
|
|
("in_app_tours", check_tours_enabled, True),
|
|
("message_reactions", check_react_requirements, False),
|
|
],
|
|
)
|
|
def test_switching_a_feature_off_withdraws_its_tool(display_config, setting, check, default_on):
|
|
"""The point of the mirror: off means the model is never told it exists."""
|
|
assert check() is default_on
|
|
|
|
display_config(**{setting: False})
|
|
assert check() is False
|
|
|
|
display_config(**{setting: True})
|
|
assert check() is True
|