from __future__ import annotations import os import subprocess import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[2] def test_app_imports_with_production_like_absolute_paths(tmp_path: Path) -> None: frontend_dist = tmp_path / "frontend-dist" data_dir = tmp_path / "data" backup_dir = data_dir / "backups" fixture_dir = data_dir / "fixtures" diagnostics_dir = data_dir / "diagnostics" uploads_dir = data_dir / "uploads" log_dir = tmp_path / "logs" frontend_dist.mkdir(parents=True) data_dir.mkdir(parents=True) backup_dir.mkdir() fixture_dir.mkdir() diagnostics_dir.mkdir() uploads_dir.mkdir() log_dir.mkdir() (frontend_dist / "index.html").write_text( "TuxDMX", encoding="utf-8", ) env = os.environ.copy() env.update( { "PYTHONPATH": str(ROOT / "backend"), "TUXDMX_FRONTEND_DIST": str(frontend_dist), "TUXDMX_DATA_DIR": str(data_dir), "TUXDMX_BACKUP_DIR": str(backup_dir), "TUXDMX_FIXTURE_CACHE_DIR": str(fixture_dir), "TUXDMX_DIAGNOSTICS_DIR": str(diagnostics_dir), "TUXDMX_UPLOADS_DIR": str(uploads_dir), "TUXDMX_LOG_DIR": str(log_dir), "TUXDMX_DATABASE_URL": f"sqlite+aiosqlite:///{(data_dir / 'tuxdmx.db').as_posix()}", } ) subprocess.run( [ sys.executable, "-c", ( "from app.core.config import get_settings; " "get_settings.cache_clear(); " "import app.main; " "settings = get_settings(); " "assert settings.frontend_dist.is_absolute(); " "assert settings.data_dir.is_absolute(); " "assert settings.backup_dir.is_absolute(); " "assert settings.diagnostics_dir.is_absolute(); " "assert settings.uploads_dir.is_absolute(); " "print('ok')" ), ], check=True, cwd=ROOT, env=env, )