Skip to content
50 changes: 47 additions & 3 deletions src/opengeodeweb_viewer/config.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import os
import tempfile
from shutil import copyfile, copytree
from sys import platform


Expand Down Expand Up @@ -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)
6 changes: 2 additions & 4 deletions src/opengeodeweb_viewer/object/object_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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}"
Expand Down
14 changes: 12 additions & 2 deletions src/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import vtk
import os
from opengeodeweb_viewer import config
import shutil


class ServerMonitor:
Expand Down Expand Up @@ -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)
Expand All @@ -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)