test_dropbox.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import os
  2. from unittest.mock import MagicMock
  3. import pytest
  4. from dropbox.files import FileMetadata
  5. from embedchain.loaders.dropbox import DropboxLoader
  6. @pytest.fixture
  7. def setup_dropbox_loader(mocker):
  8. mock_dropbox = mocker.patch("dropbox.Dropbox")
  9. mock_dbx = mocker.MagicMock()
  10. mock_dropbox.return_value = mock_dbx
  11. os.environ["DROPBOX_ACCESS_TOKEN"] = "test_token"
  12. loader = DropboxLoader()
  13. yield loader, mock_dbx
  14. if "DROPBOX_ACCESS_TOKEN" in os.environ:
  15. del os.environ["DROPBOX_ACCESS_TOKEN"]
  16. def test_initialization(setup_dropbox_loader):
  17. """Test initialization of DropboxLoader."""
  18. loader, _ = setup_dropbox_loader
  19. assert loader is not None
  20. def test_download_folder(setup_dropbox_loader, mocker):
  21. """Test downloading a folder."""
  22. loader, mock_dbx = setup_dropbox_loader
  23. mocker.patch("os.makedirs")
  24. mocker.patch("os.path.join", return_value="mock/path")
  25. mock_file_metadata = mocker.MagicMock(spec=FileMetadata)
  26. mock_dbx.files_list_folder.return_value.entries = [mock_file_metadata]
  27. entries = loader._download_folder("path/to/folder", "local_root")
  28. assert entries is not None
  29. def test_generate_dir_id_from_all_paths(setup_dropbox_loader, mocker):
  30. """Test directory ID generation."""
  31. loader, mock_dbx = setup_dropbox_loader
  32. mock_file_metadata = mocker.MagicMock(spec=FileMetadata, name="file.txt")
  33. mock_dbx.files_list_folder.return_value.entries = [mock_file_metadata]
  34. dir_id = loader._generate_dir_id_from_all_paths("path/to/folder")
  35. assert dir_id is not None
  36. assert len(dir_id) == 64
  37. def test_clean_directory(setup_dropbox_loader, mocker):
  38. """Test cleaning up a directory."""
  39. loader, _ = setup_dropbox_loader
  40. mocker.patch("os.listdir", return_value=["file1", "file2"])
  41. mocker.patch("os.remove")
  42. mocker.patch("os.rmdir")
  43. loader._clean_directory("path/to/folder")
  44. def test_load_data(mocker, setup_dropbox_loader, tmp_path):
  45. loader = setup_dropbox_loader[0]
  46. mock_file_metadata = MagicMock(spec=FileMetadata, name="file.txt")
  47. mocker.patch.object(loader.dbx, "files_list_folder", return_value=MagicMock(entries=[mock_file_metadata]))
  48. mocker.patch.object(loader.dbx, "files_download_to_file")
  49. # Mock DirectoryLoader
  50. mock_data = {"data": "test_data"}
  51. mocker.patch("embedchain.loaders.directory_loader.DirectoryLoader.load_data", return_value=mock_data)
  52. test_dir = tmp_path / "dropbox_test"
  53. test_dir.mkdir()
  54. test_file = test_dir / "file.txt"
  55. test_file.write_text("dummy content")
  56. mocker.patch.object(loader, "_generate_dir_id_from_all_paths", return_value=str(test_dir))
  57. result = loader.load_data("path/to/folder")
  58. assert result == {"doc_id": mocker.ANY, "data": "test_data"}
  59. loader.dbx.files_list_folder.assert_called_once_with("path/to/folder")