diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 76fc3ef..2f8cdf5 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -1,4 +1,6 @@ import os +import tempfile +from shutil import copyfile, copytree from sys import platform @@ -26,7 +28,49 @@ def dev_config(): def test_config(path): default_config() - print(f"{os.path.dirname(__file__)=}", flush=True) - os.environ["DATA_FOLDER_PATH"] = os.path.join(path, "data") - print(f"{os.environ.get('DATA_FOLDER_PATH')=}", flush=True) + tmp_data_root = tempfile.mkdtemp(prefix="ogw_test_data_") + os.environ["DATA_FOLDER_PATH"] = tmp_data_root + + src_data = os.path.join(path, "data") + if not os.path.isdir(src_data): + raise FileNotFoundError(f"Test data folder not found: {src_data}") + + test_ids = ["123456789", "12345678"] + valid_exts = {".vtp", ".vti", ".vtu", ".vtm"} + + project_uuid = "test-project-uuid" + data_uuid = "test-data-uuid" + uploads_directory = os.path.join(tmp_data_root, project_uuid, "uploads") + structure_directory = os.path.join(tmp_data_root, project_uuid, data_uuid) + + for directory in [ + *test_ids, + uploads_directory, + structure_directory, + ]: # create directories for tests + os.makedirs( + ( + os.path.join(tmp_data_root, directory) + if isinstance(directory, str) + else directory + ), + exist_ok=True, + ) + + for root, directories, files in os.walk(src_data): + for directory in directories: + dst = os.path.join(tmp_data_root, test_ids[0], directory) + copytree(os.path.join(root, directory), dst, dirs_exist_ok=True) + + for file in files: + if os.path.splitext(file)[1].lower() not in valid_exts: + continue + + src = os.path.join(root, file) + for test_id in test_ids: + copyfile(src, os.path.join(tmp_data_root, test_id, file)) + copyfile(src, os.path.join(structure_directory, file)) + copyfile(src, os.path.join(uploads_directory, file)) + + print(f"\nDATA_FOLDER_PATH set to: {tmp_data_root}", flush=True) diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 2a55c42..769e2dc 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -16,9 +16,7 @@ def __init__(self): def registerObject(self, id, file_name, reader, filter, mapper): actor = vtk.vtkActor() self.register_object(id, reader, filter, actor, mapper, {}) - - reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, file_name)) - + reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, id, file_name)) actor.SetMapper(mapper) mapper.SetColorModeToMapScalars() mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1) @@ -60,7 +58,7 @@ def applyTextures(self, id, textures): new_texture = vtk.vtkTexture() image_reader = vtk.vtkXMLImageDataReader() image_reader.SetFileName( - os.path.join(self.DATA_FOLDER_PATH, texture_file_name) + os.path.join(self.DATA_FOLDER_PATH, id, texture_file_name) ) shader_texture_name = f"VTK_TEXTURE_UNIT_{index}" diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 3a77c6c..e9f22e1 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -6,6 +6,7 @@ import vtk import os from opengeodeweb_viewer import config +import shutil class ServerMonitor: @@ -145,8 +146,6 @@ class Starter(ProcessStarter): def server(xprocess): name, Starter, Monitor = HELPER.get_xprocess_args() os.environ["PYTHON_ENV"] = "test" - config.test_config(os.path.dirname(__file__)) - print("server", os.environ.get("DATA_FOLDER_PATH"), flush=True) _, log = xprocess.ensure(name, Starter) print(log) monitor = Monitor(log) @@ -155,3 +154,14 @@ def server(xprocess): # clean up whole process tree afterwards xprocess.getinfo(name).terminate() monitor.print_log() + + +@pytest.fixture(scope="session", autouse=True) +def configure_test_environment(): + base_path = os.path.dirname(__file__) + config.test_config(base_path) + yield + tmp_data_path = os.environ.get("DATA_FOLDER_PATH") + if tmp_data_path and "ogw_test_data_" in tmp_data_path: + shutil.rmtree(tmp_data_path, ignore_errors=True) + print(f"Cleaned up test data folder: {tmp_data_path}", flush=True)