from unittest.mock import MagicMock import pytest from crewai import Agent, Task from crewai.tools.agent_tools.base_agent_tools import BaseAgentTool class TestAgentTool(BaseAgentTool): """Concrete implementation of BaseAgentTool for testing.""" def _run(self, *args, **kwargs): """Implement required _run method.""" return "Test response" @pytest.mark.parametrize("role_name,should_match", [ ('Futel Official Infopoint', True), # exact match (' "Futel Official Infopoint" ', True), # extra quotes and spaces ('Futel Official Infopoint\n', True), # trailing newline ('"Futel Official Infopoint"', True), # embedded quotes (' FUTEL\nOFFICIAL INFOPOINT ', True), # multiple whitespace and newline ('futel official infopoint', True), # lowercase ('FUTEL OFFICIAL INFOPOINT', True), # uppercase ('Non Existent Agent', False), # non-existent agent (None, False), # None agent name ]) def test_agent_tool_role_matching(role_name, should_match): """Test that agent tools can match roles regardless of case, whitespace, and special characters.""" # Create test agent test_agent = Agent( role='Futel Official Infopoint', goal='Answer questions about Futel', backstory='Futel Football Club info', allow_delegation=False ) # Create test agent tool agent_tool = TestAgentTool( name="test_tool", description="Test tool", agents=[test_agent] ) # Test role matching result = agent_tool._execute( agent_name=role_name, task='Test task', context=None ) if should_match: assert "coworker mentioned not found" not in result.lower(), \ f"Should find agent with role name: {role_name}" else: assert "coworker mentioned not found" in result.lower(), \ f"Should not find agent with role name: {role_name}"