import pytest from unittest.mock import Mock, patch from swarms.structs.mixture_of_agents import MixtureOfAgents from swarms.structs.agent import Agent from swarms_memory import BaseVectorDatabase def test_init(): with patch.object( MixtureOfAgents, "agent_check" ) as mock_agent_check, patch.object( MixtureOfAgents, "final_agent_check" ) as mock_final_agent_check, patch.object( MixtureOfAgents, "swarm_initialization" ) as mock_swarm_initialization, patch.object( MixtureOfAgents, "communication_protocol" ) as mock_communication_protocol: agents = [Mock(spec=Agent)] final_agent = Mock(spec=Agent) scp = Mock(spec=BaseVectorDatabase) MixtureOfAgents( agents=agents, final_agent=final_agent, scp=scp ) mock_agent_check.assert_called_once() mock_final_agent_check.assert_called_once() mock_swarm_initialization.assert_called_once() mock_communication_protocol.assert_called_once() def test_communication_protocol(): agents = [Mock(spec=Agent)] final_agent = Mock(spec=Agent) scp = Mock(spec=BaseVectorDatabase) swarm = MixtureOfAgents( agents=agents, final_agent=final_agent, scp=scp ) swarm.communication_protocol() for agent in agents: agent.long_term_memory.assert_called_once_with(scp) def test_agent_check(): final_agent = Mock(spec=Agent) with pytest.raises(TypeError): MixtureOfAgents(agents="not a list", final_agent=final_agent) with pytest.raises(TypeError): MixtureOfAgents( agents=["not an agent"], final_agent=final_agent ) def test_final_agent_check(): agents = [Mock(spec=Agent)] with pytest.raises(TypeError): MixtureOfAgents(agents=agents, final_agent="not an agent") def test_swarm_initialization(): with patch( "swarms.structs.mixture_of_agents.logger" ) as mock_logger: agents = [Mock(spec=Agent)] final_agent = Mock(spec=Agent) swarm = MixtureOfAgents( agents=agents, final_agent=final_agent ) swarm.swarm_initialization() assert mock_logger.info.call_count == 3 def test_run(): with patch("swarms.structs.mixture_of_agents.logger"), patch( "builtins.open", new_callable=Mock ) as mock_open: agents = [Mock(spec=Agent)] final_agent = Mock(spec=Agent) swarm = MixtureOfAgents( agents=agents, final_agent=final_agent ) swarm.run("task") for agent in agents: agent.run.assert_called_once() final_agent.run.assert_called_once() mock_open.assert_called_once_with(swarm.saved_file_name, "w")