From aaf2641cc82e03324ce19c288c256269c5c18042 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2024 22:29:46 +0000 Subject: [PATCH] Add comprehensive tests for FileReadTool Co-Authored-By: Joe Moura --- tests/file_read_tool_test.py | 84 ++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 tests/file_read_tool_test.py diff --git a/tests/file_read_tool_test.py b/tests/file_read_tool_test.py new file mode 100644 index 000000000..4646df24c --- /dev/null +++ b/tests/file_read_tool_test.py @@ -0,0 +1,84 @@ +import os +import pytest +from crewai_tools import FileReadTool + +def test_file_read_tool_constructor(): + """Test FileReadTool initialization with file_path.""" + # Create a temporary test file + test_file = "/tmp/test_file.txt" + test_content = "Hello, World!" + with open(test_file, "w") as f: + f.write(test_content) + + # Test initialization with file_path + tool = FileReadTool(file_path=test_file) + assert tool.file_path == test_file + assert "test_file.txt" in tool.description + + # Clean up + os.remove(test_file) + +def test_file_read_tool_run(): + """Test FileReadTool _run method with file_path at runtime.""" + # Create a temporary test file + test_file = "/tmp/test_file.txt" + test_content = "Hello, World!" + with open(test_file, "w") as f: + f.write(test_content) + + # Test reading file with runtime file_path + tool = FileReadTool() + result = tool._run(file_path=test_file) + assert result == test_content + + # Clean up + os.remove(test_file) + +def test_file_read_tool_error_handling(): + """Test FileReadTool error handling.""" + # Test missing file path + tool = FileReadTool() + result = tool._run() + assert "Error: No file path provided" in result + + # Test non-existent file + result = tool._run(file_path="/nonexistent/file.txt") + assert "Error: File not found at path:" in result + + # Test permission error (create a file without read permissions) + test_file = "/tmp/no_permission.txt" + with open(test_file, "w") as f: + f.write("test") + os.chmod(test_file, 0o000) + + result = tool._run(file_path=test_file) + assert "Error: Permission denied" in result + + # Clean up + os.chmod(test_file, 0o666) # Restore permissions to delete + os.remove(test_file) + +def test_file_read_tool_constructor_and_run(): + """Test FileReadTool using both constructor and runtime file paths.""" + # Create two test files + test_file1 = "/tmp/test1.txt" + test_file2 = "/tmp/test2.txt" + content1 = "File 1 content" + content2 = "File 2 content" + + with open(test_file1, "w") as f1, open(test_file2, "w") as f2: + f1.write(content1) + f2.write(content2) + + # Test that constructor file_path works + tool = FileReadTool(file_path=test_file1) + result = tool._run() + assert result == content1 + + # Test that runtime file_path overrides constructor + result = tool._run(file_path=test_file2) + assert result == content2 + + # Clean up + os.remove(test_file1) + os.remove(test_file2)