| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- """Tests for CLI import-tool command."""
- from pathlib import Path
- import pytest
- from agency_swarm.cli.import_tool import import_tool_command
- def test_import_tool_list_available_tools(capsys: pytest.CaptureFixture[str]) -> None:
- """List flag should display all available tools."""
- exit_code = import_tool_command(list_tools=True)
- assert exit_code == 0
- captured = capsys.readouterr()
- assert "Available built-in tools:" in captured.out
- assert "IPythonInterpreter" in captured.out
- assert "PersistentShellTool" in captured.out
- assert "LoadFileAttachment" in captured.out
- def test_import_tool_unknown_tool_name(tmp_path: Path) -> None:
- """Import should fail when tool name is unknown."""
- exit_code = import_tool_command(tool_name="UnknownTool", directory=str(tmp_path / "tools"))
- assert exit_code == 1
- def test_import_tool_no_tool_name_provided(tmp_path: Path) -> None:
- """Import should fail when no tool name is provided."""
- exit_code = import_tool_command(tool_name=None, directory=str(tmp_path / "tools"))
- assert exit_code == 1
- def test_import_tool_successful_copy(tmp_path: Path) -> None:
- """Built-in tool should be successfully copied to destination."""
- dest_dir = tmp_path / "tools"
- exit_code = import_tool_command(tool_name="IPythonInterpreter", directory=str(dest_dir))
- assert exit_code == 0
- assert (dest_dir / "IPythonInterpreter.py").exists()
- # Verify it's actual Python code
- content = (dest_dir / "IPythonInterpreter.py").read_text()
- assert "class IPythonInterpreter" in content or "IPythonInterpreter" in content
- def test_import_tool_creates_destination_directory(tmp_path: Path) -> None:
- """Tool import should create destination directory if it doesn't exist."""
- dest_dir = tmp_path / "nested" / "tools"
- exit_code = import_tool_command(tool_name="PersistentShellTool", directory=str(dest_dir))
- assert exit_code == 0
- assert dest_dir.exists()
- assert (dest_dir / "PersistentShellTool.py").exists()
- def test_import_tool_all_built_in_tools(tmp_path: Path) -> None:
- """All built-in tools should be importable."""
- from agency_swarm.cli.import_tool import _get_available_tools
- dest_dir = tmp_path / "tools"
- available_tools = _get_available_tools()
- # Should have at least the 3 custom built-in tools
- assert len(available_tools) >= 3, "Should have at least 3 built-in tools"
- for tool_name in available_tools:
- exit_code = import_tool_command(tool_name=tool_name, directory=str(dest_dir))
- assert exit_code == 0, f"Failed to import {tool_name}"
- assert (dest_dir / f"{tool_name}.py").exists(), f"{tool_name}.py was not created"
- def test_import_tool_overwrites_existing_file_with_confirmation(
- tmp_path: Path, monkeypatch: pytest.MonkeyPatch
- ) -> None:
- """Tool should overwrite existing file when user confirms."""
- dest_dir = tmp_path / "tools"
- dest_dir.mkdir()
- existing_file = dest_dir / "LoadFileAttachment.py"
- existing_file.write_text("# Old content\n")
- # Simulate user confirming overwrite
- monkeypatch.setattr("builtins.input", lambda _: "y")
- exit_code = import_tool_command(tool_name="LoadFileAttachment", directory=str(dest_dir))
- assert exit_code == 0
- # Should contain actual tool code, not old content
- assert existing_file.read_text() != "# Old content\n"
- def test_import_tool_cancels_on_overwrite_rejection(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
- """Tool should not overwrite existing file when user rejects."""
- dest_dir = tmp_path / "tools"
- dest_dir.mkdir()
- existing_file = dest_dir / "IPythonInterpreter.py"
- existing_file.write_text("# Old content\n")
- # Simulate user rejecting overwrite
- monkeypatch.setattr("builtins.input", lambda _: "n")
- exit_code = import_tool_command(tool_name="IPythonInterpreter", directory=str(dest_dir))
- assert exit_code == 0
- assert existing_file.read_text() == "# Old content\n"
|