import pytest from aegis.core.tool_registry import ( DuplicateToolError, ToolNotFoundError, ToolRegistry, ) class StubTool: def __init__(self, name: str) -> None: self.name = name def test_registry_registers_and_resolves_tool() -> None: tool = StubTool("calculator") registry = ToolRegistry() registry.register(tool) assert registry.get("calculator") is tool assert registry.contains("calculator") is True assert len(registry) == 1 def test_registry_accepts_initial_tools() -> None: calculator = StubTool("calculator") search = StubTool("search") registry = ToolRegistry([calculator, search]) assert registry.get("calculator") is calculator assert registry.get("search") is search assert len(registry) == 2 def test_registry_rejects_duplicate_tool_names() -> None: registry = ToolRegistry([StubTool("calculator")]) with pytest.raises(DuplicateToolError): registry.register(StubTool("calculator")) def test_registry_raises_when_tool_is_missing() -> None: registry = ToolRegistry() with pytest.raises(ToolNotFoundError): registry.get("missing") def test_registry_returns_sorted_names() -> None: registry = ToolRegistry( [ StubTool("search"), StubTool("calculator"), ] ) assert registry.names() == ("calculator", "search") def test_registry_normalizes_tool_names() -> None: tool = StubTool(" calculator ") registry = ToolRegistry([tool]) assert registry.contains("calculator") is True assert registry.get(" calculator ") is tool def test_registry_rejects_empty_tool_name() -> None: registry = ToolRegistry() with pytest.raises(ValueError, match="Tool name cannot be empty"): registry.register(StubTool(" "))