51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
"""Regression coverage for #3283 profile/config import ordering.
|
|
|
|
Importing ``api.profiles`` before ``api.config`` used to trigger a circular import
|
|
through ``profiles._resolve_base_hermes_home() -> api.config``. ``api.config``
|
|
then caught the partial-module ``ImportError`` from its startup
|
|
``init_profile_state`` import, so the later config import never initialized the
|
|
sticky active profile.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def test_profiles_first_then_config_still_initializes_active_profile(tmp_path):
|
|
home = tmp_path / "home"
|
|
base = home / ".hermes"
|
|
profile_home = base / "profiles" / "webui"
|
|
profile_home.mkdir(parents=True)
|
|
(base / "active_profile").write_text("webui", encoding="utf-8")
|
|
|
|
repo_root = Path(__file__).resolve().parents[1]
|
|
env = os.environ.copy()
|
|
env.pop("HERMES_HOME", None)
|
|
env.pop("HERMES_BASE_HOME", None)
|
|
env.pop("HERMES_WEBUI_STATE_DIR", None)
|
|
env["HOME"] = str(home)
|
|
env["PYTHONPATH"] = str(repo_root)
|
|
|
|
code = """
|
|
import os
|
|
import api.profiles
|
|
import api.config
|
|
print(os.environ.get('HERMES_HOME', ''))
|
|
"""
|
|
proc = subprocess.run(
|
|
[sys.executable, "-c", code],
|
|
cwd=repo_root,
|
|
env=env,
|
|
text=True,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
timeout=20,
|
|
check=False,
|
|
)
|
|
|
|
assert proc.returncode == 0, proc.stderr
|
|
assert proc.stdout.strip() == str(profile_home)
|