Files
hermes-webui/tests/test_issue3283_profiles_config_import_order.py
T

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)