from collections.abc import Generator from pathlib import Path import pytest from extensions.storage.opendal_storage import OpenDALStorage from tests.unit_tests.oss.__mock.base import ( get_example_data, get_example_filename, get_opendal_bucket, ) class TestOpenDAL: @pytest.fixture(autouse=True) def setup_method(self, *args, **kwargs): """Executed before each test method.""" self.storage = OpenDALStorage( scheme="fs", root=get_opendal_bucket(), ) @pytest.fixture(scope="class", autouse=True) def teardown_class(self, request): """Clean up after all tests in the class.""" def cleanup(): folder = Path(get_opendal_bucket()) if folder.exists() and folder.is_dir(): for item in folder.iterdir(): if item.is_file(): item.unlink() elif item.is_dir(): item.rmdir() folder.rmdir() return cleanup() def test_save_and_exists(self): """Test saving data and checking existence.""" filename = get_example_filename() data = get_example_data() assert not self.storage.exists(filename) self.storage.save(filename, data) assert self.storage.exists(filename) def test_load_once(self): """Test loading data once.""" filename = get_example_filename() data = get_example_data() self.storage.save(filename, data) loaded_data = self.storage.load_once(filename) assert loaded_data == data def test_load_stream(self): """Test loading data as a stream.""" filename = get_example_filename() data = get_example_data() self.storage.save(filename, data) generator = self.storage.load_stream(filename) assert isinstance(generator, Generator) assert next(generator) == data def test_download(self): """Test downloading data to a file.""" filename = get_example_filename() filepath = str(Path(get_opendal_bucket()) / filename) data = get_example_data() self.storage.save(filename, data) self.storage.download(filename, filepath) def test_delete(self): """Test deleting a file.""" filename = get_example_filename() data = get_example_data() self.storage.save(filename, data) assert self.storage.exists(filename) self.storage.delete(filename) assert not self.storage.exists(filename)