Files
multi-agent-mux/tests/test_a4_adapter_contract.py
T

48 lines
1.7 KiB
Python

# test_a4_adapter_contract.py — Contract tests for BaseAgentAdapter and resolve_home
import os, pytest
from lib_py.paths import resolve_home
from lib_py.agents.registry import get_adapter, own_key, agent_of_row
def test_resolve_home_contract():
# 1. When explicit home_dir is passed
assert resolve_home('/custom/home') == '/custom/home'
# 2. When HOME_DIR env var is set
orig = os.environ.get('HOME_DIR')
try:
os.environ['HOME_DIR'] = '/env/home'
assert resolve_home() == '/env/home'
finally:
if orig is None:
os.environ.pop('HOME_DIR', None)
else:
os.environ['HOME_DIR'] = orig
# 3. When HOME_DIR env var is NOT set, falls back to HOME / expanduser (~), NOT '' or '/'
env_copy = os.environ.copy()
env_copy.pop('HOME_DIR', None)
home_val = env_copy.get('HOME') or os.path.expanduser('~')
assert resolve_home() == home_val
def test_agent_adapter_registry():
for agent in ('claude', 'agy', 'hermes', 'cline'):
adapter = get_adapter(agent)
assert adapter is not None
assert adapter.name == agent
assert adapter.own_key == f"{agent}_{'session' if agent == 'claude' else 'conversation'}_id_own"
assert own_key(agent) == adapter.own_key
def test_agent_of_row_priority():
# Priority 1: Explicit 'agent' field
row1 = {'agent': 'agy', 'name': 'some-name-creator-claude'}
assert agent_of_row(row1) == 'agy'
# Priority 2: Session name suffix
row2 = {'name': 'my-workspace-planner-hermes'}
assert agent_of_row(row2) == 'hermes'
# Priority 3: pane.cmd exact match
row3 = {'pane': {'cmd': 'cline'}}
assert agent_of_row(row3) == 'cline'