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