import pytest from pathlib import Path from pyr.tools.file_ops import ReadFileTool, WriteFileTool, DirectoryGlobTool, MkdirTool @pytest.mark.asyncio async def test_write_and_read_file(temp_dir): write_tool = WriteFileTool() read_tool = ReadFileTool() test_file = temp_dir / "test.txt" test_content = "Hello, PYR!" result = await write_tool.execute(str(test_file), test_content) assert "successfully" in result.lower() result = await read_tool.execute(str(test_file)) assert test_content in result @pytest.mark.asyncio async def test_write_file_append(temp_dir): write_tool = WriteFileTool() read_tool = ReadFileTool() test_file = temp_dir / "append_test.txt" await write_tool.execute(str(test_file), "Line 1\n") await write_tool.execute(str(test_file), "Line 2\n", append=True) result = await read_tool.execute(str(test_file)) assert "Line 1" in result assert "Line 2" in result @pytest.mark.asyncio async def test_directory_glob(temp_dir): glob_tool = DirectoryGlobTool() (temp_dir / "test1.txt").write_text("content1") (temp_dir / "test2.txt").write_text("content2") (temp_dir / "other.log").write_text("log content") result = await glob_tool.execute(f"{temp_dir}/*.txt") assert "test1.txt" in result assert "test2.txt" in result assert "other.log" not in result @pytest.mark.asyncio async def test_mkdir_tool(temp_dir): mkdir_tool = MkdirTool() new_dir = temp_dir / "new_directory" / "nested" result = await mkdir_tool.execute(str(new_dir)) assert "created" in result.lower() assert new_dir.exists() assert new_dir.is_dir() @pytest.mark.asyncio async def test_read_nonexistent_file(): read_tool = ReadFileTool() result = await read_tool.execute("/nonexistent/file.txt") assert "error" in result.lower() def test_tool_definitions(): read_tool = ReadFileTool() definition = read_tool.get_definition() assert definition.function["name"] == "read_file" assert "path" in definition.function["parameters"]["properties"] assert "path" in definition.function["parameters"]["required"]