"""Tests for DirectoryService."""
import pytest
class TestListDirectories:
"""Tests for list_directories method."""
def test_list_directories_root(self, populated_temp_root, directory_service):
"""Test listing directories in root."""
result = directory_service.list_directories(".")
assert result.total_count == 3
assert len(result.directories) == 3
dir_names = {d.name for d in result.directories}
assert dir_names == {"dir1", "dir2", "empty_dir"}
def test_list_directories_subdirectory(self, populated_temp_root, directory_service):
"""Test listing directories in a subdirectory."""
result = directory_service.list_directories("dir1")
assert result.total_count == 2
assert len(result.directories) == 2
dir_names = {d.name for d in result.directories}
assert dir_names == {"subdir1", "subdir2"}
def test_list_directories_empty(self, populated_temp_root, directory_service):
"""Test listing directories in an empty directory."""
result = directory_service.list_directories("empty_dir")
assert result.total_count == 0
assert len(result.directories) == 0
def test_list_directories_not_found(self, directory_service):
"""Test listing directories in non-existent path."""
with pytest.raises(FileNotFoundError):
directory_service.list_directories("nonexistent")
def test_list_directories_metadata(self, populated_temp_root, directory_service):
"""Test that directory metadata is included."""
result = directory_service.list_directories(".")
for directory in result.directories:
assert directory.name is not None
assert directory.path is not None
assert directory.item_count >= 0
assert directory.created > 0
assert directory.modified > 0
class TestCreateDirectory:
"""Tests for create_directory method."""
def test_create_directory_simple(self, temp_root, directory_service):
"""Test creating a simple directory."""
result = directory_service.create_directory("newdir")
assert result.success is True
assert "created successfully" in result.message.lower()
assert (temp_root / "newdir").exists()
assert (temp_root / "newdir").is_dir()
def test_create_directory_nested(self, temp_root, directory_service):
"""Test creating nested directories with create_parents=True."""
result = directory_service.create_directory("parent/child/grandchild", create_parents=True)
assert result.success is True
assert (temp_root / "parent" / "child" / "grandchild").exists()
assert (temp_root / "parent" / "child" / "grandchild").is_dir()
def test_create_directory_without_parents(self, temp_root, directory_service):
"""Test creating directory fails without parents when create_parents=False."""
result = directory_service.create_directory("parent/child", create_parents=False)
assert result.success is False
assert "parent directory does not exist" in result.message.lower()
def test_create_directory_already_exists(self, populated_temp_root, directory_service):
"""Test creating directory that already exists."""
result = directory_service.create_directory("dir1")
assert result.success is False
assert "already exists" in result.message.lower()
class TestDeleteDirectory:
"""Tests for delete_directory method."""
def test_delete_empty_directory(self, populated_temp_root, directory_service):
"""Test deleting an empty directory."""
result = directory_service.delete_directory("empty_dir")
assert result.success is True
assert "deleted successfully" in result.message.lower()
assert not (populated_temp_root / "empty_dir").exists()
def test_delete_directory_recursive(self, populated_temp_root, directory_service):
"""Test deleting directory with contents recursively."""
result = directory_service.delete_directory("dir1", recursive=True)
assert result.success is True
assert not (populated_temp_root / "dir1").exists()
def test_delete_directory_not_empty_fails(self, populated_temp_root, directory_service):
"""Test deleting non-empty directory without recursive fails."""
result = directory_service.delete_directory("dir1", recursive=False)
assert result.success is False
# Message can be in different languages, just check it failed
assert "failed" in result.message.lower() or "not empty" in result.message.lower()
assert (populated_temp_root / "dir1").exists()
def test_delete_directory_not_found(self, directory_service):
"""Test deleting non-existent directory."""
result = directory_service.delete_directory("nonexistent")
assert result.success is False
assert "not found" in result.message.lower()
class TestMoveDirectory:
"""Tests for move_directory method."""
def test_move_directory_simple(self, populated_temp_root, directory_service):
"""Test moving a directory."""
result = directory_service.move_directory("empty_dir", "renamed_dir")
assert result.success is True
assert not (populated_temp_root / "empty_dir").exists()
assert (populated_temp_root / "renamed_dir").exists()
assert (populated_temp_root / "renamed_dir").is_dir()
def test_move_directory_with_contents(self, populated_temp_root, directory_service):
"""Test moving directory preserves contents."""
result = directory_service.move_directory("dir1", "moved_dir")
assert result.success is True
assert (populated_temp_root / "moved_dir").exists()
assert (populated_temp_root / "moved_dir" / "subdir1").exists()
assert (populated_temp_root / "moved_dir" / "nested.txt").exists()
def test_move_directory_source_not_found(self, directory_service):
"""Test moving non-existent directory."""
result = directory_service.move_directory("nonexistent", "destination")
assert result.success is False
assert "not found" in result.message.lower()
def test_move_directory_destination_exists(self, populated_temp_root, directory_service):
"""Test moving to existing destination fails."""
result = directory_service.move_directory("empty_dir", "dir1")
assert result.success is False
assert "already exists" in result.message.lower()
class TestGetDirectoryMetadata:
"""Tests for get_directory_metadata method."""
def test_get_directory_metadata(self, populated_temp_root, directory_service):
"""Test getting directory metadata."""
result = directory_service.get_directory_metadata(".")
assert result.exists is True
assert result.path == "."
assert result.item_count > 0
assert result.file_count > 0
assert result.directory_count > 0
assert result.created > 0
assert result.modified > 0
assert result.accessed > 0
def test_get_directory_metadata_empty(self, populated_temp_root, directory_service):
"""Test metadata for empty directory."""
result = directory_service.get_directory_metadata("empty_dir")
assert result.exists is True
assert result.item_count == 0
assert result.file_count == 0
assert result.directory_count == 0
def test_get_directory_metadata_not_found(self, directory_service):
"""Test metadata for non-existent directory."""
result = directory_service.get_directory_metadata("nonexistent")
assert result.exists is False
assert result.item_count == 0