35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
BACKEND_MAIN = REPO_ROOT / "ansible/roles/cezen-backend/files/main.py"
|
|
|
|
|
|
@pytest.fixture
|
|
def isolated_appliance(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> dict[str, Path]:
|
|
"""Return isolated appliance paths and never touch /opt/cezen."""
|
|
data = tmp_path / "data"
|
|
backups = tmp_path / "backups"
|
|
data.mkdir()
|
|
backups.mkdir()
|
|
monkeypatch.setenv("CEZEN_DATA", str(data))
|
|
monkeypatch.setenv("CEZEN_BACKUP_DIR", str(backups))
|
|
monkeypatch.setenv("CEZEN_LICENSE_JSON", str(tmp_path / "license.json"))
|
|
return {"root": tmp_path, "data": data, "backups": backups}
|
|
|
|
|
|
def load_backend_module(module_name: str = "cezen_backend_test"):
|
|
"""Load the packaged backend only after fixtures set environment variables."""
|
|
spec = importlib.util.spec_from_file_location(module_name, BACKEND_MAIN)
|
|
if spec is None or spec.loader is None:
|
|
raise RuntimeError(f"Cannot load backend from {BACKEND_MAIN}")
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
return module
|