48 lines
1.7 KiB
Python
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'
|