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