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,
)