forked from cleveragents/cleveragents-core
201 lines
8.2 KiB
Python
201 lines
8.2 KiB
Python
"""
|
|
Comprehensive unit tests for network module.
|
|
"""
|
|
|
|
import tempfile
|
|
from pathlib import Path
|
|
from unittest.mock import Mock, patch
|
|
|
|
import pytest
|
|
|
|
from cleveragents.network import AgentNetwork
|
|
|
|
|
|
class TestAgentNetwork:
|
|
"""Test cases for AgentNetwork class."""
|
|
|
|
def test_agent_network_init_without_config_files(self):
|
|
"""Test AgentNetwork initialization without config files."""
|
|
with patch('cleveragents.network.ConfigurationManager') as mock_config_manager:
|
|
mock_config_instance = Mock()
|
|
mock_config_manager.return_value = mock_config_instance
|
|
|
|
network = AgentNetwork()
|
|
|
|
# Should create ConfigurationManager
|
|
assert network.config_manager == mock_config_instance
|
|
mock_config_manager.assert_called_once()
|
|
|
|
# Should not call load_files or validate
|
|
mock_config_instance.load_files.assert_not_called()
|
|
mock_config_instance.validate.assert_not_called()
|
|
|
|
# agent_factory should be None
|
|
assert network.agent_factory is None
|
|
|
|
def test_agent_network_init_with_config_files(self):
|
|
"""Test AgentNetwork initialization with config files."""
|
|
with patch('cleveragents.network.ConfigurationManager') as mock_config_manager:
|
|
mock_config_instance = Mock()
|
|
mock_config_manager.return_value = mock_config_instance
|
|
|
|
config_files = [Path("config1.yaml"), Path("config2.yaml")]
|
|
network = AgentNetwork(config_files=config_files)
|
|
|
|
# Should create ConfigurationManager
|
|
assert network.config_manager == mock_config_instance
|
|
|
|
# Should call load_files and validate
|
|
mock_config_instance.load_files.assert_called_once_with(config_files)
|
|
mock_config_instance.validate.assert_called_once()
|
|
|
|
# agent_factory should be None
|
|
assert network.agent_factory is None
|
|
|
|
def test_agent_network_init_with_single_config_file(self):
|
|
"""Test AgentNetwork initialization with single config file."""
|
|
with patch('cleveragents.network.ConfigurationManager') as mock_config_manager:
|
|
mock_config_instance = Mock()
|
|
mock_config_manager.return_value = mock_config_instance
|
|
|
|
config_files = [Path("config.yaml")]
|
|
network = AgentNetwork(config_files=config_files)
|
|
|
|
# Should call load_files with the list
|
|
mock_config_instance.load_files.assert_called_once_with(config_files)
|
|
mock_config_instance.validate.assert_called_once()
|
|
|
|
def test_agent_network_init_with_verbose_flag(self):
|
|
"""Test AgentNetwork initialization with verbose flag."""
|
|
with patch('cleveragents.network.ConfigurationManager') as mock_config_manager:
|
|
mock_config_instance = Mock()
|
|
mock_config_manager.return_value = mock_config_instance
|
|
|
|
# verbose flag is accepted but not currently used
|
|
network = AgentNetwork(_verbose=True)
|
|
|
|
assert network.config_manager == mock_config_instance
|
|
|
|
def test_agent_network_init_with_empty_config_list(self):
|
|
"""Test AgentNetwork initialization with empty config list."""
|
|
with patch('cleveragents.network.ConfigurationManager') as mock_config_manager:
|
|
mock_config_instance = Mock()
|
|
mock_config_manager.return_value = mock_config_instance
|
|
|
|
# Empty list is falsy, so load_files should not be called
|
|
network = AgentNetwork(config_files=[])
|
|
|
|
mock_config_instance.load_files.assert_not_called()
|
|
mock_config_instance.validate.assert_not_called()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_process_raises_not_implemented_error(self):
|
|
"""Test that process method raises NotImplementedError."""
|
|
with patch('cleveragents.network.ConfigurationManager'):
|
|
network = AgentNetwork()
|
|
|
|
with pytest.raises(NotImplementedError, match="AgentNetwork processing not yet implemented"):
|
|
await network.process("test message")
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_process_with_context_raises_not_implemented_error(self):
|
|
"""Test that process method with context raises NotImplementedError."""
|
|
with patch('cleveragents.network.ConfigurationManager'):
|
|
network = AgentNetwork()
|
|
|
|
context = {"key": "value"}
|
|
with pytest.raises(NotImplementedError, match="AgentNetwork processing not yet implemented"):
|
|
await network.process("test message", context=context)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_process_with_none_context(self):
|
|
"""Test that process method with None context raises NotImplementedError."""
|
|
with patch('cleveragents.network.ConfigurationManager'):
|
|
network = AgentNetwork()
|
|
|
|
with pytest.raises(NotImplementedError):
|
|
await network.process("test message", context=None)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_process_with_empty_message(self):
|
|
"""Test that process method with empty message raises NotImplementedError."""
|
|
with patch('cleveragents.network.ConfigurationManager'):
|
|
network = AgentNetwork()
|
|
|
|
with pytest.raises(NotImplementedError):
|
|
await network.process("")
|
|
|
|
def test_agent_network_config_manager_attribute(self):
|
|
"""Test that AgentNetwork has config_manager attribute."""
|
|
with patch('cleveragents.network.ConfigurationManager') as mock_config_manager:
|
|
mock_config_instance = Mock()
|
|
mock_config_manager.return_value = mock_config_instance
|
|
|
|
network = AgentNetwork()
|
|
|
|
# Should have config_manager attribute
|
|
assert hasattr(network, 'config_manager')
|
|
assert network.config_manager is not None
|
|
|
|
def test_agent_network_agent_factory_attribute(self):
|
|
"""Test that AgentNetwork has agent_factory attribute."""
|
|
with patch('cleveragents.network.ConfigurationManager'):
|
|
network = AgentNetwork()
|
|
|
|
# Should have agent_factory attribute
|
|
assert hasattr(network, 'agent_factory')
|
|
|
|
def test_agent_network_agent_factory_initially_none(self):
|
|
"""Test that agent_factory is initially None."""
|
|
with patch('cleveragents.network.ConfigurationManager'):
|
|
network = AgentNetwork()
|
|
|
|
assert network.agent_factory is None
|
|
|
|
def test_agent_network_integration_with_real_paths(self):
|
|
"""Test AgentNetwork with real file paths (not opening files)."""
|
|
with patch('cleveragents.network.ConfigurationManager') as mock_config_manager:
|
|
mock_config_instance = Mock()
|
|
mock_config_manager.return_value = mock_config_instance
|
|
|
|
# Use real Path objects
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
config_file = Path(tmpdir) / "config.yaml"
|
|
|
|
network = AgentNetwork(config_files=[config_file])
|
|
|
|
# Should have been called with the path
|
|
mock_config_instance.load_files.assert_called_once_with([config_file])
|
|
|
|
def test_agent_network_with_multiple_config_files(self):
|
|
"""Test AgentNetwork with multiple config files."""
|
|
with patch('cleveragents.network.ConfigurationManager') as mock_config_manager:
|
|
mock_config_instance = Mock()
|
|
mock_config_manager.return_value = mock_config_instance
|
|
|
|
config_files = [
|
|
Path("config1.yaml"),
|
|
Path("config2.yaml"),
|
|
Path("config3.yaml")
|
|
]
|
|
|
|
network = AgentNetwork(config_files=config_files)
|
|
|
|
mock_config_instance.load_files.assert_called_once_with(config_files)
|
|
mock_config_instance.validate.assert_called_once()
|
|
|
|
def test_agent_network_verbose_parameter_accepted(self):
|
|
"""Test that verbose parameter is accepted without error."""
|
|
with patch('cleveragents.network.ConfigurationManager'):
|
|
# Should not raise any errors
|
|
network_verbose = AgentNetwork(_verbose=True)
|
|
network_not_verbose = AgentNetwork(_verbose=False)
|
|
|
|
assert network_verbose is not None
|
|
assert network_not_verbose is not None
|
|
|
|
|
|
if __name__ == "__main__":
|
|
pytest.main([__file__, "-v"])
|
|
|