"""Tests for pet slash-command config helpers.""" from __future__ import annotations import pytest def test_pets_cli_quoted_false_disables_and_toggle_enables(tmp_path, monkeypatch): """Quoted `display.pet.enabled: "false"` must read as disabled. bool('false') is True — before the is_truthy_value fix, _has_active_pet reported an active pet and /pet toggle DISABLED instead of enabling. """ import hermes_yaml as yaml from hermes_cli.pets import _has_active_pet, toggle_pet_display home = tmp_path / ".hermes" home.mkdir() monkeypatch.setenv("HERMES_HOME", str(home)) (home / "config.yaml").write_text( yaml.safe_dump( {"display": {"pet": {"enabled": "false", "slug": "", "scale": 0.33}}} ), encoding="utf-8", ) assert _has_active_pet() is False # Toggle must take the ENABLE branch (reaching the "no pets installed" # error), not the disable branch (which would return err=None). enabled, name, err = toggle_pet_display() assert err is not None and "no pets installed" in err assert enabled is False assert name is None @pytest.fixture def empty_home(tmp_path, monkeypatch): home = tmp_path / ".hermes" home.mkdir() monkeypatch.setenv("HERMES_HOME", str(home)) return home def test_set_pet_scale_writes_clamped_value(empty_home): from agent.pet.constants import MAX_SCALE, MIN_SCALE from hermes_cli.pets import _pet_config, set_pet_scale applied, err = set_pet_scale("0.5") assert err is None assert applied == 0.5 assert _pet_config()["scale"] == 0.5 # Out-of-range values clamp to the bounds rather than erroring. assert set_pet_scale(99) == (MAX_SCALE, None) assert set_pet_scale(0) == (MIN_SCALE, None)