64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
import importlib
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
REPO_ROOT = Path(__file__).parent.parent.resolve()
|
|
if str(REPO_ROOT) not in sys.path:
|
|
sys.path.insert(0, str(REPO_ROOT))
|
|
|
|
|
|
def _reload_profiles_module(base_home: Path):
|
|
os.environ["HERMES_BASE_HOME"] = str(base_home)
|
|
os.environ["HERMES_HOME"] = str(base_home)
|
|
|
|
for name in ["api.config", "api.profiles"]:
|
|
if name in sys.modules:
|
|
del sys.modules[name]
|
|
|
|
profiles = importlib.import_module("api.profiles")
|
|
return profiles
|
|
|
|
|
|
def test_switch_profile_rejects_path_traversal():
|
|
with tempfile.TemporaryDirectory() as td:
|
|
temp_root = Path(td)
|
|
base = temp_root / ".hermes"
|
|
(base / "profiles").mkdir(parents=True)
|
|
(temp_root / "escape-target").mkdir()
|
|
|
|
profiles = _reload_profiles_module(base)
|
|
|
|
with pytest.raises(ValueError):
|
|
profiles.switch_profile("../../escape-target")
|
|
|
|
|
|
def test_delete_profile_rejects_path_traversal():
|
|
with tempfile.TemporaryDirectory() as td:
|
|
temp_root = Path(td)
|
|
base = temp_root / ".hermes"
|
|
(base / "profiles").mkdir(parents=True)
|
|
(temp_root / "escape-target").mkdir()
|
|
|
|
profiles = _reload_profiles_module(base)
|
|
|
|
with pytest.raises(ValueError):
|
|
profiles.delete_profile_api("../../escape-target")
|
|
|
|
|
|
def test_switch_profile_allows_valid_profile_name():
|
|
with tempfile.TemporaryDirectory() as td:
|
|
temp_root = Path(td)
|
|
base = temp_root / ".hermes"
|
|
profile_dir = base / "profiles" / "demo"
|
|
profile_dir.mkdir(parents=True)
|
|
|
|
profiles = _reload_profiles_module(base)
|
|
result = profiles.switch_profile("demo")
|
|
|
|
assert result["active"] == "demo"
|
|
assert Path(os.environ["HERMES_HOME"]).resolve() == profile_dir.resolve()
|