"""Test the DirectoryListing tool."""

from pathlib import Path
from tempfile import TemporaryDirectory

from langchain_community.tools.file_management.list_dir import ListDirectoryTool
from langchain_community.tools.file_management.utils import (
    INVALID_PATH_TEMPLATE,
)


def test_list_directory_with_root_dir() -> None:
    """Test the DirectoryListing tool when a root dir is specified."""
    with TemporaryDirectory() as temp_dir:
        tool = ListDirectoryTool(root_dir=temp_dir)
        file_1 = Path(temp_dir) / "file1.txt"
        file_2 = Path(temp_dir) / "file2.txt"
        file_1.write_text("File 1 content")
        file_2.write_text("File 2 content")
        entries = tool.run({"dir_path": "."}).split("\n")
        assert set(entries) == {"file1.txt", "file2.txt"}


def test_list_directory_errs_outside_root_dir() -> None:
    """Test the DirectoryListing tool when a root dir is specified."""
    with TemporaryDirectory() as temp_dir:
        tool = ListDirectoryTool(root_dir=temp_dir)
        result = tool.run({"dir_path": ".."})
        assert result == INVALID_PATH_TEMPLATE.format(arg_name="dir_path", value="..")


def test_list_directory() -> None:
    """Test the DirectoryListing tool."""
    with TemporaryDirectory() as temp_dir:
        tool = ListDirectoryTool()
        file_1 = Path(temp_dir) / "file1.txt"
        file_2 = Path(temp_dir) / "file2.txt"
        file_1.write_text("File 1 content")
        file_2.write_text("File 2 content")
        entries = tool.run({"dir_path": temp_dir}).split("\n")
        assert set(entries) == {"file1.txt", "file2.txt"}
