Files
cleveragents-core/tests/unit/test_network.py

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"])