import pytest from unittest.mock import MagicMock from swarms import AgentRearrange class MockAgent: def __init__(self, name): self.name = name def run(self, task, img=None, *args, **kwargs): return f"{self.name} processed {task}" @pytest.fixture def mock_agents(): return [ MockAgent(name="Agent1"), MockAgent(name="Agent2"), MockAgent(name="Agent3"), ] @pytest.fixture def agent_rearrange(mock_agents): return AgentRearrange( agents=mock_agents, flow="Agent1 -> Agent2 -> Agent3" ) def test_initialization(mock_agents): agent_rearrange = AgentRearrange( agents=mock_agents, flow="Agent1 -> Agent2 -> Agent3" ) assert len(agent_rearrange.agents) == 3 assert agent_rearrange.flow == "Agent1 -> Agent2 -> Agent3" def test_add_agent(agent_rearrange): new_agent = MockAgent(name="Agent4") agent_rearrange.add_agent(new_agent) assert "Agent4" in agent_rearrange.agents def test_remove_agent(agent_rearrange): agent_rearrange.remove_agent("Agent2") assert "Agent2" not in agent_rearrange.agents def test_add_agents(agent_rearrange): new_agents = [MockAgent(name="Agent4"), MockAgent(name="Agent5")] agent_rearrange.add_agents(new_agents) assert "Agent4" in agent_rearrange.agents assert "Agent5" in agent_rearrange.agents def test_validate_flow_valid(agent_rearrange): assert agent_rearrange.validate_flow() is True def test_validate_flow_invalid(agent_rearrange): agent_rearrange.flow = "Agent1 -> Agent4" with pytest.raises(ValueError): agent_rearrange.validate_flow() def test_run(agent_rearrange): result = agent_rearrange.run("Test Task") assert ( result == "Agent1 processed Test Task; Agent2 processed Agent1 processed Test Task; Agent3 processed Agent2 processed Agent1 processed Test Task" ) def test_run_with_custom_tasks(agent_rearrange): custom_tasks = {"Agent2": "Custom Task"} result = agent_rearrange.run( "Test Task", custom_tasks=custom_tasks ) assert ( result == "Agent1 processed Test Task; Agent2 processed Custom Task; Agent3 processed Agent2 processed Custom Task" ) def test_run_with_human_intervention(agent_rearrange): agent_rearrange.human_in_the_loop = True agent_rearrange.custom_human_in_the_loop = MagicMock( return_value="Human processed Task" ) agent_rearrange.flow = "Agent1 -> H -> Agent3" result = agent_rearrange.run("Test Task") assert ( result == "Agent1 processed Test Task; Human processed Task; Agent3 processed Human processed Task" ) def test_run_sub_swarm(agent_rearrange): sub_swarm_flow = "Agent1 -> Agent3" agent_rearrange.add_sub_swarm("SubSwarm1", sub_swarm_flow) result = agent_rearrange.run_sub_swarm( "SubSwarm1", "Sub Task", None ) assert ( result == "Agent1 processed Sub Task; Agent3 processed Agent1 processed Sub Task" ) def test_process_agent_or_swarm(agent_rearrange): result = agent_rearrange.process_agent_or_swarm( "Agent1", "Process Task", None ) assert result == "Agent1 processed Process Task" def test_track_history(agent_rearrange): agent_rearrange.track_history("Agent1", "Task Result") assert agent_rearrange.swarm_history["Agent1"] == ["Task Result"] def test_human_intervention(agent_rearrange): agent_rearrange.human_in_the_loop = True agent_rearrange.custom_human_in_the_loop = MagicMock( return_value="Human processed Task" ) result = agent_rearrange.human_intervention("Task") assert result == "Human processed Task"