mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-25 21:36:52 +08:00
Co-authored-by: openhands <openhands@all-hands.dev> Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
"""Tests to demonstrate the fix for WORK_DIR and PERSISTENCE_DIR separation."""
|
|
|
|
import os
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from openhands_cli.locations import PERSISTENCE_DIR, WORK_DIR
|
|
from openhands_cli.tui.settings.store import AgentStore
|
|
|
|
from openhands.sdk import LLM, Agent, Tool
|
|
|
|
|
|
class TestDirectorySeparation:
|
|
"""Test that WORK_DIR and PERSISTENCE_DIR are properly separated."""
|
|
|
|
def test_work_dir_and_persistence_dir_are_different(self):
|
|
"""Test that WORK_DIR and PERSISTENCE_DIR are separate directories."""
|
|
# WORK_DIR should be the current working directory
|
|
assert WORK_DIR == os.getcwd()
|
|
|
|
# PERSISTENCE_DIR should be ~/.openhands
|
|
expected_config_dir = os.path.expanduser('~/.openhands')
|
|
assert PERSISTENCE_DIR == expected_config_dir
|
|
|
|
# They should be different
|
|
assert WORK_DIR != PERSISTENCE_DIR
|
|
|
|
def test_agent_store_uses_persistence_dir(self):
|
|
"""Test that AgentStore uses PERSISTENCE_DIR for file storage."""
|
|
agent_store = AgentStore()
|
|
assert agent_store.file_store.root == PERSISTENCE_DIR
|
|
|
|
|
|
class TestToolFix:
|
|
"""Test that tool specs are replaced with default tools using current directory."""
|
|
|
|
def test_tools_replaced_with_default_tools_on_load(self):
|
|
"""Test that entire tools list is replaced with default tools when loading agent."""
|
|
# Create a mock agent with different tools and working directories
|
|
mock_agent = Agent(
|
|
llm=LLM(model='test/model', api_key='test-key', usage_id='test-service'),
|
|
tools=[
|
|
Tool(name='BashTool'),
|
|
Tool(name='FileEditorTool'),
|
|
Tool(name='TaskTrackerTool'),
|
|
],
|
|
)
|
|
|
|
# Mock the file store to return our test agent
|
|
with patch(
|
|
'openhands_cli.tui.settings.store.LocalFileStore'
|
|
) as mock_file_store:
|
|
mock_store_instance = MagicMock()
|
|
mock_file_store.return_value = mock_store_instance
|
|
mock_store_instance.read.return_value = mock_agent.model_dump_json()
|
|
|
|
agent_store = AgentStore()
|
|
loaded_agent = agent_store.load()
|
|
|
|
# Verify the agent was loaded
|
|
assert loaded_agent is not None
|
|
|
|
# Verify that tools are replaced with default tools
|
|
assert (
|
|
len(loaded_agent.tools) == 3
|
|
) # BashTool, FileEditorTool, TaskTrackerTool
|
|
|
|
tool_names = [tool.name for tool in loaded_agent.tools]
|
|
assert 'terminal' in tool_names
|
|
assert 'file_editor' in tool_names
|
|
assert 'task_tracker' in tool_names
|